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

OZG-4391 OZG-4417 enable create bescheid only for configured vorgaenge

parent 3747cb5e
Branches
Tags
No related merge requests found
......@@ -20,7 +20,7 @@ public class FeatureToggleProperties {
private boolean vorgangExport = false;
/**
* Enable/Disable Bescheid creation feature
* Enable/Disable Bescheid creation feature.
*/
private boolean createBescheid = false;
}
package de.ozgcloud.alfa.vorgang;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = VorgangProperties.PREFIX)
public class VorgangProperties {
public static final String PREFIX = "ozgcloud.vorgang";
private Map<String, String> bescheid = new HashMap<>();
}
......@@ -23,6 +23,7 @@
*/
package de.ozgcloud.alfa.vorgang.command;
import static java.util.Optional.*;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
import java.util.Objects;
......@@ -40,6 +41,7 @@ import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationContro
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserRole;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangProperties;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController;
......@@ -59,6 +61,8 @@ public class VorgangWithEingangCommandProzessor implements RepresentationModelPr
@Autowired
private FeatureToggleProperties featureToggle;
@Autowired
private VorgangProperties vorgangProperties;
@Override
public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
......@@ -73,7 +77,7 @@ public class VorgangWithEingangCommandProzessor implements RepresentationModelPr
null)).withRel(REL_VORGANG_FORWARD))
.ifMatch(this::existsPendingCommands)
.addLink(linkTo(methodOn(CommandController.class).getPendingCommands(true, vorgang.getId())).withRel(REL_PENDING_COMMANDS))
.ifMatch(() -> featureToggle.isCreateBescheid())
.ifMatch(() -> isCreateBescheidEnabled(vorgang))
.addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(),
null)).withRel(REL_BESCHEID))
.buildModel();
......@@ -93,4 +97,17 @@ public class VorgangWithEingangCommandProzessor implements RepresentationModelPr
private boolean existsPendingCommands(VorgangWithEingang vorgang) {
return commandController.existsPendingCommands(vorgang.getId());
}
boolean isCreateBescheidEnabled(VorgangWithEingang vorgang) {
return featureToggle.isCreateBescheid() && hasVorgangCreateBescheidEnabled(vorgang);
}
boolean hasVorgangCreateBescheidEnabled(VorgangWithEingang vorgang) {
return ofNullable(vorgang.getEingang())
.flatMap(eingang -> ofNullable(eingang.getHeader())
.flatMap(eingangHeader -> ofNullable(eingangHeader.getFormId())
.flatMap(formId -> ofNullable(vorgangProperties.getBescheid().get(eingangHeader.getFormId())))
.map(formEngineName -> formEngineName.equals(eingangHeader.getFormEngineName()))))
.orElse(false);
}
}
\ No newline at end of file
......@@ -30,12 +30,13 @@ public class EingangHeaderTestFactory {
public static final String CREATED_AT_STR = "2020-01-10T10:30:00Z";
public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
public static final String FORM_ENGINE_NAME = "AFM";
public static final String FORM_ID = "test-form-id";
public static EingangHeader create() {
return createBuilder().build();
}
public static EingangHeader.EingangHeaderBuilder createBuilder() {
return EingangHeader.builder().createdAt(CREATED_AT).formEngineName(FORM_ENGINE_NAME);
return EingangHeader.builder().createdAt(CREATED_AT).formEngineName(FORM_ENGINE_NAME).formId(FORM_ID);
}
}
\ No newline at end of file
......@@ -29,6 +29,7 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Collections;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
......@@ -49,8 +50,11 @@ import de.ozgcloud.alfa.common.UserProfileUrlProvider;
import de.ozgcloud.alfa.common.command.CommandController;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserRole;
import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.EingangTestFactory;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangProperties;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController;
......@@ -70,6 +74,8 @@ class VorgangWithEingangCommandProzessorTest {
@Mock
private FeatureToggleProperties featureToggle;
@Mock
private VorgangProperties vorgangProperties;
private VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
private EntityModel<VorgangWithEingang> vorgangEntityModel = EntityModel.of(vorgang);
......@@ -233,12 +239,13 @@ class VorgangWithEingangCommandProzessorTest {
@BeforeEach
void activateFeature() {
when(featureToggle.isCreateBescheid()).thenReturn(true);
initUserProfileUrlProvider(urlProvider);
}
@Test
void shouldHaveCreateBescheidLink() {
doReturn(true).when(processor).isCreateBescheidEnabled(vorgang);
var processed = processor.process(vorgangEntityModel);
assertThat(processed.getLink(VorgangWithEingangCommandProzessor.REL_BESCHEID)).isPresent().get()
......@@ -249,11 +256,179 @@ class VorgangWithEingangCommandProzessorTest {
@Test
void shouldHaveNoLinkIfDisabled() {
when(featureToggle.isCreateBescheid()).thenReturn(false);
doReturn(false).when(processor).isCreateBescheidEnabled(vorgang);
var processed = processor.process(vorgangEntityModel);
assertThat(processed.getLink(VorgangWithEingangCommandProzessor.REL_BESCHEID)).isEmpty();
}
}
@Nested
class TestIsCreateBescheidEnabled {
@BeforeEach
void setUp() {
when(featureToggle.isCreateBescheid()).thenReturn(true);
}
@Test
void shouldCallFeatureToggleProperties() {
callProcessor(VorgangWithEingangTestFactory.create());
verify(featureToggle).isCreateBescheid();
}
@Test
void shouldCallHasVorgangCreateBescheidEnabled() {
var vorgang = VorgangWithEingangTestFactory.create();
callProcessor(vorgang);
verify(processor).hasVorgangCreateBescheidEnabled(vorgang);
}
@Nested
class TestFeatureToggleDisabled {
@BeforeEach
void setUp() {
when(featureToggle.isCreateBescheid()).thenReturn(false);
}
@Test
void shouldReturnFalse() {
var isEnabled = callProcessor(VorgangWithEingangTestFactory.create());
assertThat(isEnabled).isFalse();
}
}
@Nested
class TestFeatureToggleEnabled {
private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
@BeforeEach
void setUp() {
when(featureToggle.isCreateBescheid()).thenReturn(true);
}
@Test
void shouldReturnTrue() {
doReturn(true).when(processor).hasVorgangCreateBescheidEnabled(vorgang);
var isEnabled = callProcessor(vorgang);
assertThat(isEnabled).isTrue();
}
@Test
void shouldReturnFalse() {
doReturn(false).when(processor).hasVorgangCreateBescheidEnabled(vorgang);
var isEnabled = callProcessor(vorgang);
assertThat(isEnabled).isFalse();
}
}
private boolean callProcessor(VorgangWithEingang vorgang) {
return processor.isCreateBescheidEnabled(vorgang);
}
}
@Nested
class TestHasVorgangCreateBescheidEnabled {
@Nested
class TestWhenBescheidPropertiesEmpty {
@BeforeEach
void setUp() {
when(vorgangProperties.getBescheid()).thenReturn(Map.of());
}
@Test
void shouldReturnFalse() {
var hasEnabled = callProcessor(VorgangWithEingangTestFactory.create());
assertThat(hasEnabled).isFalse();
}
}
@Nested
class TestWhenVorgangDataNotComplete {
@Test
void shouldReturnFalseIfEingangNull() {
var hasEnabled = callProcessor(VorgangWithEingangTestFactory.createBuilder().eingang(null).build());
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseIfEingangHeaderNull() {
var hasEnabled = callProcessor(
VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().header(null).build()).build());
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseIfFormEngineNameNull() {
var hasEnabled = callProcessor(
VorgangWithEingangTestFactory.createBuilder().eingang(
EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formEngineName(null).build())
.build()).build());
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnFalseIfFormIdNull() {
var hasEnabled = callProcessor(
VorgangWithEingangTestFactory.createBuilder().eingang(
EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formId(null).build())
.build()).build());
assertThat(hasEnabled).isFalse();
}
}
@Nested
class TestWhenBescheidPropertiesSet {
@BeforeEach
void setUp() {
when(vorgangProperties.getBescheid()).thenReturn(Map.of(EingangHeaderTestFactory.FORM_ID, EingangHeaderTestFactory.FORM_ENGINE_NAME));
}
@Test
void shouldReturnFalseIfFormEngineNameNotEquals() {
var hasEnabled = callProcessor(
VorgangWithEingangTestFactory.createBuilder().eingang(
EingangTestFactory.createBuilder()
.header(EingangHeaderTestFactory.createBuilder().formEngineName("different").build())
.build()).build());
assertThat(hasEnabled).isFalse();
}
@Test
void shouldReturnTrue() {
var hasEnabled = callProcessor(VorgangWithEingangTestFactory.create());
assertThat(hasEnabled).isTrue();
}
}
boolean callProcessor(VorgangWithEingang vorgang) {
return processor.hasVorgangCreateBescheidEnabled(vorgang);
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment