Skip to content
Snippets Groups Projects
Commit d73ea41d authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-5570: check if vorgang is configured for automatic...

Merge pull request 'OZG-5570: check if vorgang is configured for automatic bescheid creation' (#555) from OZG-5570-check-vorgang-configuration-create-document into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/alfa/pulls/555


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents ed6e5562 07a70cbf
No related branches found
No related tags found
No related merge requests found
package de.ozgcloud.alfa.bescheid;
import static java.util.Optional.*;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import java.util.function.Predicate;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.stereotype.Component;
import de.ozgcloud.alfa.common.ModelBuilder;
import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
import de.ozgcloud.alfa.common.command.CommandController;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.vorgang.Eingang;
import de.ozgcloud.alfa.vorgang.EingangHeader;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangProperties;
import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import lombok.RequiredArgsConstructor;
@Component
......@@ -31,6 +39,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty();
private final BescheidService bescheidService;
private final VorgangController vorgangController;
private final VorgangProperties vorgangProperties;
@Override
public EntityModel<Bescheid> toModel(Bescheid bescheid) {
......@@ -40,8 +50,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null));
var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null));
var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getVorgangId()));
var createCommandLink = linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(),
bescheid.getId(), bescheid.getVersion(), null));
var createCommandLink = buildCreateCommandLink(bescheid);
var vorgangWithEingang = vorgangController.getVorgang(bescheid.getVorgangId());
return ModelBuilder.fromEntity(bescheid)
.addLink(selfLink.withSelfRel())
......@@ -52,10 +62,34 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
.ifMatch(HAS_ATTACHMENTS)
.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
.addLink(createCommandLink.withRel(REL_UPDATE))
.ifMatch(bescheidService::canCreateBescheidDocumentAutomatically)
.ifMatch(() -> canCreateBescheidDocumentAutomatically(vorgangWithEingang))
.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT))
.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE))
.addLink(createCommandLink.withRel(REL_SEND))
.buildModel();
}
private WebMvcLinkBuilder buildCreateCommandLink(Bescheid bescheid) {
return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(), bescheid.getId(),
bescheid.getVersion(), null));
}
boolean canCreateBescheidDocumentAutomatically(VorgangWithEingang vorgang) {
return bescheidService.canCreateBescheidDocumentAutomatically() && hasVorgangCreateBescheidDocumentEnabled(vorgang);
}
boolean hasVorgangCreateBescheidDocumentEnabled(VorgangWithEingang vorgang) {
return ofNullable(vorgang.getEingang())
.map(Eingang::getHeader)
.map(this::isCreateBescheidDocumentEnabled)
.orElse(false);
}
private boolean isCreateBescheidDocumentEnabled(EingangHeader eingangHeader) {
return vorgangProperties.getBescheid().stream().anyMatch(prop -> isFormIdAndFormEngineNameMatching(eingangHeader, prop));
}
private boolean isFormIdAndFormEngineNameMatching(EingangHeader eingangHeader, VorgangProperty property) {
return property.getFormId().equals(eingangHeader.getFormId()) && property.getFormEngineName().equals(eingangHeader.getFormEngineName());
}
}
......@@ -5,7 +5,9 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
......@@ -19,7 +21,15 @@ import org.springframework.hateoas.Link;
import org.springframework.web.util.UriTemplate;
import de.ozgcloud.alfa.common.command.CommandController;
import de.ozgcloud.alfa.vorgang.Eingang;
import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.EingangTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangProperties;
import de.ozgcloud.alfa.vorgang.VorgangPropertyTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
class BescheidModelAssemblerTest {
......@@ -30,10 +40,22 @@ class BescheidModelAssemblerTest {
@Mock
private BescheidService bescheidService;
@Mock
private VorgangProperties vorgangProperties;
@Mock
private VorgangController vorgangController;
@Nested
class TestToModel {
private final Bescheid bescheid = BescheidTestFactory.create();
private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create();
@BeforeEach
void setUp() {
when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgangWithEingang);
}
@Test
void shouldHaveSelfLink() {
......@@ -95,7 +117,7 @@ class BescheidModelAssemblerTest {
@Test
void shouldHaveCreateDocumentLink() {
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
doReturn(true).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
var model = callToModel();
......@@ -105,7 +127,7 @@ class BescheidModelAssemblerTest {
@Test
void shoulNotdHaveCreateDocumentLink() {
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false);
doReturn(false).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
var model = callToModel();
......@@ -168,4 +190,136 @@ class BescheidModelAssemblerTest {
return assembler.toModel(bescheid);
}
}
@Nested
class TestHasVorgangCreateBescheidDocumentEnabled {
@Nested
class TestOnEmptyBescheidProperties {
@BeforeEach
void setUp() {
when(vorgangProperties.getBescheid()).thenReturn(Collections.emptyList());
}
@Test
void shouldReturnFalse() {
var hasEnabled = callAssembler(VorgangWithEingangTestFactory.create());
assertThat(hasEnabled).isFalse();
}
}
@Nested
class TestOnBescheidPropertiesSet {
@BeforeEach
void setUp() {
when(vorgangProperties.getBescheid()).thenReturn(List.of(VorgangPropertyTestFactory.create()));
}
@Test
void shouldReturnFalseIfFormEngineNameNotEquals() {
var vorgang = createVorgang(EingangTestFactory.createBuilder()
.header(EingangHeaderTestFactory.createBuilder()
.formEngineName("different").build())
.build());
var hasEnabled = callAssembler(vorgang);
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnTrue() {
var hasEnabled = callAssembler(VorgangWithEingangTestFactory.create());
assertThat(hasEnabled).isTrue();
}
}
@Test
void shouldReturnFalseOnEmptyEingang() {
var vorgangWithEmptyEingang = createVorgang(null);
var hasEnabled = callAssembler(vorgangWithEmptyEingang);
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseOnEmptyEingangHeader() {
var vorgangWithEmptyEingangHeader = EingangTestFactory.createBuilder().header(null).build();
var hasEnabled = callAssembler(createVorgang(vorgangWithEmptyEingangHeader));
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseOnEmptyFormEngineName() {
var vorgangWithEmptyFormEngineName = createVorgang(
EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formEngineName(null).build()).build());
var hasEnabled = callAssembler(vorgangWithEmptyFormEngineName);
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseOnEmptyFormId() {
var vorgangWithEmptyFormId = createVorgang(
EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formId(null).build()).build());
var hasEnabled = callAssembler(vorgangWithEmptyFormId);
assertThat(hasEnabled).isFalse();
}
private boolean callAssembler(VorgangWithEingang vorgang) {
return assembler.hasVorgangCreateBescheidDocumentEnabled(vorgang);
}
private VorgangWithEingang createVorgang(Eingang eingang) {
return VorgangWithEingangTestFactory.createBuilder().eingang(eingang).build();
}
}
@Nested
class TestCanCreateBescheidDocumentAutomatically {
private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create();
@Test
void shouldReturnTrueIfServiceConfigured() {
doReturn(true).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang);
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
assertThat(canCreate).isTrue();
}
@Test
void shouldReturnFalseIfServiceNotConfigured() {
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false);
var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
assertThat(canCreate).isFalse();
}
@Test
void shouldReturnFalseIfVorgangNotConfigured() {
doReturn(false).when(assembler).hasVorgangCreateBescheidDocumentEnabled(vorgangWithEingang);
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true);
var canCreate = assembler.canCreateBescheidDocumentAutomatically(vorgangWithEingang);
assertThat(canCreate).isFalse();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment