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; package de.ozgcloud.alfa.bescheid;
import static java.util.Optional.*;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import java.util.function.Predicate; import java.util.function.Predicate;
import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.RepresentationModelAssembler; import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.ModelBuilder;
import de.ozgcloud.alfa.common.binaryfile.BinaryFileController; import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
import de.ozgcloud.alfa.common.command.CommandController; import de.ozgcloud.alfa.common.command.CommandController;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; 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; import lombok.RequiredArgsConstructor;
@Component @Component
...@@ -31,6 +39,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc ...@@ -31,6 +39,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty(); private static final Predicate<Bescheid> HAS_ATTACHMENTS = bescheid -> !bescheid.getAttachments().isEmpty();
private final BescheidService bescheidService; private final BescheidService bescheidService;
private final VorgangController vorgangController;
private final VorgangProperties vorgangProperties;
@Override @Override
public EntityModel<Bescheid> toModel(Bescheid bescheid) { public EntityModel<Bescheid> toModel(Bescheid bescheid) {
...@@ -40,8 +50,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc ...@@ -40,8 +50,8 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null)); var uploadBescheidFileLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidFile", null));
var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null)); var uploadAttachmentLink = linkTo(methodOn(BinaryFileController.class).uploadFile(bescheid.getVorgangId(), "bescheidAttachment", null));
var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getVorgangId())); var attachmentsLink = linkTo(methodOn(BescheidController.class).getAttachments(bescheid.getVorgangId()));
var createCommandLink = linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(bescheid.getVorgangId(), var createCommandLink = buildCreateCommandLink(bescheid);
bescheid.getId(), bescheid.getVersion(), null)); var vorgangWithEingang = vorgangController.getVorgang(bescheid.getVorgangId());
return ModelBuilder.fromEntity(bescheid) return ModelBuilder.fromEntity(bescheid)
.addLink(selfLink.withSelfRel()) .addLink(selfLink.withSelfRel())
...@@ -52,10 +62,34 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc ...@@ -52,10 +62,34 @@ public class BescheidModelAssembler implements RepresentationModelAssembler<Besc
.ifMatch(HAS_ATTACHMENTS) .ifMatch(HAS_ATTACHMENTS)
.addLink(attachmentsLink.withRel(REL_ATTACHMENTS)) .addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
.addLink(createCommandLink.withRel(REL_UPDATE)) .addLink(createCommandLink.withRel(REL_UPDATE))
.ifMatch(bescheidService::canCreateBescheidDocumentAutomatically) .ifMatch(() -> canCreateBescheidDocumentAutomatically(vorgangWithEingang))
.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT)) .addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT))
.addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE)) .addLink(createCommandLink.withRel(REL_CREATE_DOCUMENT_FROM_FILE))
.addLink(createCommandLink.withRel(REL_SEND)) .addLink(createCommandLink.withRel(REL_SEND))
.buildModel(); .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.*; ...@@ -5,7 +5,9 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.Collections; 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.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
...@@ -19,7 +21,15 @@ import org.springframework.hateoas.Link; ...@@ -19,7 +21,15 @@ import org.springframework.hateoas.Link;
import org.springframework.web.util.UriTemplate; import org.springframework.web.util.UriTemplate;
import de.ozgcloud.alfa.common.command.CommandController; 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.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 { class BescheidModelAssemblerTest {
...@@ -30,10 +40,22 @@ class BescheidModelAssemblerTest { ...@@ -30,10 +40,22 @@ class BescheidModelAssemblerTest {
@Mock @Mock
private BescheidService bescheidService; private BescheidService bescheidService;
@Mock
private VorgangProperties vorgangProperties;
@Mock
private VorgangController vorgangController;
@Nested @Nested
class TestToModel { class TestToModel {
private final Bescheid bescheid = BescheidTestFactory.create(); private final Bescheid bescheid = BescheidTestFactory.create();
private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create();
@BeforeEach
void setUp() {
when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgangWithEingang);
}
@Test @Test
void shouldHaveSelfLink() { void shouldHaveSelfLink() {
...@@ -95,7 +117,7 @@ class BescheidModelAssemblerTest { ...@@ -95,7 +117,7 @@ class BescheidModelAssemblerTest {
@Test @Test
void shouldHaveCreateDocumentLink() { void shouldHaveCreateDocumentLink() {
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(true); doReturn(true).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
var model = callToModel(); var model = callToModel();
...@@ -105,7 +127,7 @@ class BescheidModelAssemblerTest { ...@@ -105,7 +127,7 @@ class BescheidModelAssemblerTest {
@Test @Test
void shoulNotdHaveCreateDocumentLink() { void shoulNotdHaveCreateDocumentLink() {
when(bescheidService.canCreateBescheidDocumentAutomatically()).thenReturn(false); doReturn(false).when(assembler).canCreateBescheidDocumentAutomatically(vorgangWithEingang);
var model = callToModel(); var model = callToModel();
...@@ -168,4 +190,136 @@ class BescheidModelAssemblerTest { ...@@ -168,4 +190,136 @@ class BescheidModelAssemblerTest {
return assembler.toModel(bescheid); 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