diff --git a/alfa-server/src/main/resources/application-dev.yml b/alfa-server/src/main/resources/application-dev.yml index 18feb5c73f71f7e5cfda4ffc5ea23530d8797f34..0b2ff4f5d986874d51c24f2e1ea49e42ec0f30c2 100644 --- a/alfa-server/src/main/resources/application-dev.yml +++ b/alfa-server/src/main/resources/application-dev.yml @@ -11,6 +11,7 @@ ozgcloud: feature: reply-always-allowed: true collaboration-enabled: true + forward-by-ozg-cloud-enabled: true production: false stage: production: false diff --git a/alfa-server/src/main/resources/application-e2e.yml b/alfa-server/src/main/resources/application-e2e.yml index d56ddccb468a1ec933afa67796cc933a031851a8..e1104d4169b4fd601ae25ba33fe7d8950e4fcccb 100644 --- a/alfa-server/src/main/resources/application-e2e.yml +++ b/alfa-server/src/main/resources/application-e2e.yml @@ -5,6 +5,7 @@ ozgcloud: feature: reply-always-allowed: true collaboration-enabled: true + forward-by-ozg-cloud-enabled: true forwarding: lninfo: url: classpath:files/LandesnetzInfo.html diff --git a/alfa-server/src/main/resources/application-local.yml b/alfa-server/src/main/resources/application-local.yml index 76f4ccb48052de1ee266058c1f7377dafdac11b0..6c0f901bcd2e416639d72d9c02c178e87a4fb1f6 100644 --- a/alfa-server/src/main/resources/application-local.yml +++ b/alfa-server/src/main/resources/application-local.yml @@ -24,6 +24,7 @@ ozgcloud: feature: reply-always-allowed: true collaboration-enabled: true + forward-by-ozg-cloud-enabled: true production: false user-assistance: documentation: diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java index 9fe15e7d929b643995dc46717453e60be8f58304..52e3396fd8b1e5002bbbf80b22faf14794184e25 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java @@ -44,4 +44,9 @@ public class FeatureToggleProperties { * Enable collaboration-feature in Vorgang */ private boolean collaborationEnabled = false; + + /** + * Enable forwarding feature + */ + private boolean forwardByOzgCloudEnabled = false; } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java index 21bb1c9bde7590193d9f78598e95181070685b10..b4d8be1f41504a7f2a31e3256f7aacc633f79a42 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/Command.java @@ -30,7 +30,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import de.ozgcloud.alfa.common.LinkedUserProfileResource; import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java index eff4c6d7cdb8e907412b0f9a98ac9c793cfdbc59..46db2e9b657a09f9d98f4a25c77d800a07cdba1b 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java @@ -30,13 +30,13 @@ import de.ozgcloud.alfa.aktenzeichen.AktenzeichenCommandBody; import de.ozgcloud.alfa.bescheid.Bescheid; import de.ozgcloud.alfa.bescheid.BescheidDocumentFromFileBody; import de.ozgcloud.alfa.collaboration.CollaborationCommandBody; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import de.ozgcloud.alfa.kommentar.Kommentar; import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung; import de.ozgcloud.alfa.loeschanforderung.LoeschAnforderung; import de.ozgcloud.alfa.postfach.PostfachMail; import de.ozgcloud.alfa.vorgang.AssignUserCommandBody; import de.ozgcloud.alfa.vorgang.ProcessVorgangBody; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; @JsonSubTypes({ @@ -57,7 +57,7 @@ import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; @Type(value = AktenzeichenCommandBody.class, name = "SET_AKTENZEICHEN"), @Type(value = BescheidDocumentFromFileBody.class, name = "CREATE_BESCHEID_DOCUMENT_FROM_FILE"), @Type(value = CollaborationCommandBody.class, name = "CREATE_COLLABORATION_REQUEST"), - @Type(value = EmptyCommandBody.class, name="ARCHIVE_VORGANG") + @Type(value = EmptyCommandBody.class, name = "ARCHIVE_VORGANG") }) public interface CommandBody { } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java index 7c81d4cb175a320df2fdb4fb9c7e49160b0d66de..d9c449e4ca471d018a686fe47f6fef78f325316f 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandMapper.java @@ -36,7 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; import de.ozgcloud.alfa.common.TimeMapper; import de.ozgcloud.alfa.common.callcontext.CallContextMapper; import de.ozgcloud.alfa.common.user.UserIdMapper; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; import de.ozgcloud.vorgang.grpc.command.GrpcCommand; import de.ozgcloud.vorgang.grpc.command.GrpcRedirectRequest; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java index cd92b52eef33d5fdaf1d13075e77488304a370c4..31f4bce83e9fd2493493ccf8629ff74aecd11927 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java @@ -40,10 +40,10 @@ import de.ozgcloud.alfa.bescheid.BescheidController; import de.ozgcloud.alfa.bescheid.DocumentController; import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController; import de.ozgcloud.alfa.common.ModelBuilder; +import de.ozgcloud.alfa.forwarding.ForwardingController; import de.ozgcloud.alfa.kommentar.KommentarController; import de.ozgcloud.alfa.postfach.PostfachMailController; import de.ozgcloud.alfa.vorgang.VorgangController; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController; @Component diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java index 90a7dbe82cd63d41f3ef77e9143bfadf920c0ca9..e4dafbe784bf6fa42d35d9a7fcc5fecd42f886b9 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandRemoteService.java @@ -32,7 +32,7 @@ import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.GrpcUtil; import de.ozgcloud.alfa.common.callcontext.ContextService; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java index 634746ff1f2f7bae267d4811b72d47860c540ba3..ae6b87d3a4c82fbb5d8ec22cd67ad9eb87d44564 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CreateCommand.java @@ -31,7 +31,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import de.ozgcloud.alfa.common.user.UserId; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/Forwarding.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/Forwarding.java index 8bce269cf11e84e986cba4edbd1333eb066a186a..396153f1c4cd950e7274561c5e8bdf6973c2585e 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/Forwarding.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/Forwarding.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.time.ZonedDateTime; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingController.java similarity index 95% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingController.java index 62447cc7c136cee398917a79c4cf04d2af0081d2..665f4ada47abfc85e8db115c7b74713842370d3c 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingController.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.util.List; import java.util.function.Predicate; @@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; +import de.ozgcloud.alfa.forwarding.Forwarding.Status; @RestController @RequestMapping(ForwardingController.LIST_PATH) diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoService.java similarity index 98% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoService.java index 7eb50c08577e8293e2306e6ee986406f3787ed17..bcf072bfdbf2108a64759e1f27aee87b475ba6fa 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoService.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.util.Collections; import java.util.Objects; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingMapper.java similarity index 96% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingMapper.java index c8e7a4af92ff6d7177040e3c7050d9213781c50e..808adef376c3bce7035bedfaef872a9b9c594b73 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingMapper.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingMapper.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import org.mapstruct.Mapper; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java index 8a4d1bb8c7c0f7c2133acbd6f67ffe7a13a84624..fdb6df92dd6fa7fc692974d1e079bb8567a1bb78 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; @@ -37,7 +37,7 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; +import de.ozgcloud.alfa.forwarding.Forwarding.Status; @Component class ForwardingModelAssembler implements RepresentationModelAssembler<Forwarding, EntityModel<Forwarding>> { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordSizeConstraint.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordSizeConstraint.java index 11fec98c49d8e183569257701ddee46a7e9d432d..674402eb9e14ff4e184147cfaa5e002b63bfccd3 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordSizeConstraint.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordSizeConstraint.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidator.java similarity index 98% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidator.java index 1c6a82af0f9256a1373ae927cfa0ada3a21f163b..b56dd943b95bb31daa4fa970fa109d00129eebd4 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidator.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidator.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteService.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteService.java index 85ca4d49cb0aec55df057dfc245bfb07364b4e0c..24f9874965316d17f3e711b64e0e2bf11ce5644c 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteService.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.util.stream.Stream; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingService.java similarity index 96% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingService.java index abd68ad81cff15f504bd1853839bafd05223d148..6da266ffa25eca78b937b26255e7a4aa90ce5200 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingService.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.util.stream.Stream; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..60a3c43ef0338e8e7908cc592ddcb3c2fdb7f257 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java @@ -0,0 +1,66 @@ +package de.ozgcloud.alfa.forwarding; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; + +import java.util.Optional; + +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.Link; +import org.springframework.hateoas.LinkRelation; +import org.springframework.hateoas.server.RepresentationModelProcessor; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.common.FeatureToggleProperties; +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.Vorgang.VorgangStatus; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +class ForwardingVorgangWithEingangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { + + static final LinkRelation REL_FORWARD_BY_OZGCLOUD = LinkRelation.of("forwardByOzgCloud"); + static final LinkRelation REL_FORWARD_BY_EMAIL = LinkRelation.of("forwardByEmail"); + + private final FeatureToggleProperties featureToggleProperties; + private final CurrentUserService userService; + + @Override + public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { + + Optional.ofNullable(model.getContent()) + .ifPresent(vorgang -> model + .addIf(isForwardableByOzgCloud(vorgang), () -> buildForwardByOzgCloudLink(vorgang)) + .addIf(isForwardableByEmail(), () -> buildForwardByEmailLink(vorgang))); + return model; + } + + boolean isForwardableByOzgCloud(VorgangWithEingang vorgang) { + return featureToggleProperties.isForwardByOzgCloudEnabled() && isStatusNeu(vorgang) && isVerwaltungUser(); + } + + private boolean isStatusNeu(VorgangWithEingang vorgang) { + return vorgang.getStatus() == VorgangStatus.NEU; + } + + private boolean isVerwaltungUser() { + return userService.hasRole(UserRole.VERWALTUNG_USER); + } + + private Link buildForwardByOzgCloudLink(VorgangWithEingang vorgang) { + return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), + vorgang.getVersion(), null)).withRel(REL_FORWARD_BY_OZGCLOUD); + } + + boolean isForwardableByEmail() { + return userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); + } + + private Link buildForwardByEmailLink(VorgangWithEingang vorgang) { + return linkTo(methodOn(ForwardingController.class).findByVorgangId(vorgang.getId())).withRel(REL_FORWARD_BY_EMAIL); + } + +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoProperties.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoProperties.java index 010b4798226e61d67d2f7579e289e8cd09b41904..2d74c3df6885e4d84765f9b084d96c1b4b2ef4a4 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoProperties.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoProperties.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadService.java similarity index 96% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadService.java index 24e63abf3ec8079d2e4bbad6869621409c949d43..c9d96ed8e60b21739e49a59f8adcc553a748d9c1 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadService.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.io.IOException; import java.io.InputStream; @@ -79,7 +79,7 @@ class LandesnetzInfoReadService { } Set<String> readFile(InputStream fileInputStream) { - try(var fileScanner = new Scanner(fileInputStream, StandardCharsets.UTF_8)){ + try (var fileScanner = new Scanner(fileInputStream, StandardCharsets.UTF_8)) { while (fileScanner.hasNextLine()) { var line = fileScanner.nextLine(); if (isStartOfSection(line)) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/RedirectRequest.java similarity index 97% rename from alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java rename to alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/RedirectRequest.java index e07009c3843824afbcdeeae985e0b4837becc700..f7d6b10f4399918d52df9e9c67a6cd417b06a68a 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/RedirectRequest.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/RedirectRequest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static de.ozgcloud.alfa.common.ValidationMessageCodes.*; diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java index 38e6b3c7e13f35faeab1684111fc787a69361da3..a5014ff3e7ac1482d61d7c3b6e3b509f744b7fae 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java @@ -39,15 +39,12 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.attachment.AttachmentByVorgangController; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.historie.HistorieController; import de.ozgcloud.alfa.kommentar.KommentarController.KommentarByVorgangController; import de.ozgcloud.alfa.postfach.PostfachMailController; import de.ozgcloud.alfa.representation.RepresentationByVorgangController; import de.ozgcloud.alfa.vorgang.VorgangProperties.VorgangProperty; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; import lombok.RequiredArgsConstructor; @Component @@ -68,7 +65,6 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity static final String USER_PROFILE_SEARCH_ORGANISATIONS_EINHEIT_ID_PARAM = "organisationsEinheitId"; private final PostfachMailController postfachMailController; - private final CurrentUserService userService; private final UserManagerUrlProvider userManagerUrlProvider; private final VorgangProcessorProperties vorgangProcessorProperties; @@ -99,8 +95,6 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity .withRel(REL_REPRESENTATIONS)) .ifMatch(this::isPostfachConfigured) .addLink(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS)) - .ifMatch(this::isEinheitlicherAnsprechpartner) - .addLink(linkTo(methodOn(ForwardingController.class).findByVorgangId(vorgang.getId())).withRel(REL_VORGANG_FORWARDING)) .addLink(linkTo(methodOn(HistorieController.class).getAll(vorgang.getId())).withRel(REL_HISTORIE)) .ifMatch(() -> userManagerUrlProvider.isConfiguredForSearchUserProfile() && hasOrganisationsEinheitId(vorgang)) .addLink(this::buildSearchUserProfilesLink) @@ -115,10 +109,6 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity return postfachMailController.isPostfachConfigured(); } - private boolean isEinheitlicherAnsprechpartner(VorgangWithEingang vorgang) { - return userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); - } - private Link buildSearchUserProfilesLink(VorgangWithEingang vorgang) { return Link.of(userManagerUrlProvider.getSearchUserProfilesTemplate() .queryParam(USER_PROFILE_SEARCH_DELETED_PARAM, false) diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java index 1a4862869d9de93184e643671e9d1e4c327d8d4a..2c2453560d8651d92c72673e29d17f6d75ce75c3 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java @@ -38,9 +38,9 @@ import de.ozgcloud.alfa.common.command.CommandController; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; +import de.ozgcloud.alfa.forwarding.ForwardingController; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; @Component public class VorgangWithEingangCommandProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { @@ -74,8 +74,8 @@ public class VorgangWithEingangCommandProcessor implements RepresentationModelPr boolean isForwardingAllowed(VorgangWithEingang vorgang) { return userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER) && (vorgang.getStatus() == VorgangStatus.NEU - || (vorgang.getStatus() == VorgangStatus.IN_BEARBEITUNG - && hasForwardingFailed(vorgang))); + || (vorgang.getStatus() == VorgangStatus.IN_BEARBEITUNG + && hasForwardingFailed(vorgang))); } private boolean hasForwardingFailed(VorgangWithEingang vorgang) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java index d6cb0b73c7bd7d7108e61664307d81694bc560b8..095f95d67833f26cf946cefe6d62b6e0a61eae6b 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandITCase.java @@ -49,12 +49,12 @@ import org.springframework.test.web.servlet.ResultActions; import de.ozgcloud.alfa.common.ValidationMessageCodes; import de.ozgcloud.alfa.common.user.UserProfileTestFactory; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import de.ozgcloud.alfa.postfach.PostfachMailTestFactory; import de.ozgcloud.alfa.vorgang.RedirectRequestTestFactory; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; import de.ozgcloud.common.test.TestUtils; @AutoConfigureMockMvc diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingControllerTest.java similarity index 98% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingControllerTest.java index 670bbd3dcfbf08a51a52bc57e4d69c912a1bf801..013042859a82dd82873a1beb7d966bf5ecea4125 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingControllerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingControllerTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoServiceTest.java similarity index 98% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoServiceTest.java index 7f237a504d9845ac8b0f1c36cbdd9b566ac673a2..dc5c9e355519dc6441b33a0a87525fb26b0e7f6e 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingLandesnetzInfoServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingLandesnetzInfoServiceTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.assertj.core.api.Assertions.*; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssemblerTest.java similarity index 98% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssemblerTest.java index bc9484c6d37e412a8bc0f602366b79a0edf5ec64..ee5503fc35c1712b2a782874a1a16fc59fab4d94 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingModelAssemblerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssemblerTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -40,8 +40,8 @@ import org.springframework.hateoas.IanaLinkRelations; import org.springframework.hateoas.Link; import org.springframework.stereotype.Component; +import de.ozgcloud.alfa.forwarding.Forwarding.Status; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.Forwarding.Status; @Component class ForwardingModelAssemblerTest { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidatorTest.java similarity index 98% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidatorTest.java index 406376542a0ba7962304aefd24cbf64b87131971..f59e4b8d8ea6cc6e81b80ae4fb5a3362acdd3138 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingPasswordValidatorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingPasswordValidatorTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteServiceTest.java similarity index 98% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteServiceTest.java index 82aa2a6652bc58b4e09c8ed805a1b3c5fa0ce392..591294c83c45022419941f186e66c549c7fbbd65 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingRemoteServiceTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingTestFactory.java similarity index 96% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingTestFactory.java index 5b834aa838b32ccc81f29c9c0cc9189992e44d88..c75aa41fc1eaf13a28330f49c0de73c76486845f 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingTestFactory.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import java.util.UUID; diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..15be150ccf28cc8cf1248f727ade96dcbc29e9e5 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java @@ -0,0 +1,273 @@ +package de.ozgcloud.alfa.forwarding; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.EnumSource.Mode; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.Link; +import org.springframework.web.util.UriComponentsBuilder; + +import de.ozgcloud.alfa.common.FeatureToggleProperties; +import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; +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.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; + +class ForwardingVorgangWithEingangProcessorTest { + + @InjectMocks + @Spy + private ForwardingVorgangWithEingangProcessor processor; + + @Mock + private CurrentUserService userService; + @Mock + private FeatureToggleProperties featureToggleProperties; + + @Nested + class TestProcess { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + @Test + void shouldReturnSameModelOnEmptyEntity() { + EntityModel<VorgangWithEingang> inputModel = when(mock(EntityModel.class).getContent()).thenReturn(null).getMock(); + + var model = processor.process(inputModel); + + assertThat(model).isSameAs(inputModel); + } + + @Test + void shouldReturnSameModel() { + var inputModel = EntityModel.of(vorgang); + + var model = processor.process(inputModel); + + assertThat(model).isSameAs(inputModel); + } + + @Nested + class TestForwardByOzgCloudLink { + + @Test + void shouldCallIsForwardableByOzgCloud() { + doReturn(false).when(processor).isForwardableByOzgCloud(any()); + + processor.process(EntityModel.of(vorgang)); + + verify(processor).isForwardableByOzgCloud(vorgang); + } + + @Nested + class TestOnIsNotForwardableByOzgCloud { + + @BeforeEach + void givenIsNotForwardableByOzgCloud() { + doReturn(false).when(processor).isForwardableByOzgCloud(any()); + } + + @Test + void shouldNotAddLink() { + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ForwardingVorgangWithEingangProcessor.REL_FORWARD_BY_OZGCLOUD)).isEmpty(); + } + } + + @Nested + class TestOnIsForwardableByOzgCloud { + + @BeforeEach + void givenIsNotForwardableByOzgCloud() { + doReturn(true).when(processor).isForwardableByOzgCloud(any()); + } + + @Test + void shouldAddForwardByOzgCloudLink() { + var expectedHref = UriComponentsBuilder.fromUriString(CommandByRelationController.COMMAND_BY_RELATION_PATH) + .buildAndExpand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString(); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ForwardingVorgangWithEingangProcessor.REL_FORWARD_BY_OZGCLOUD)).get() + .extracting(Link::getHref) + .isEqualTo(expectedHref); + } + } + } + + @Nested + class TestForwardByEmailLink { + + @Test + void shouldCallIsForwardableByEmail() { + doReturn(false).when(processor).isForwardableByEmail(); + + processor.process(EntityModel.of(vorgang)); + + verify(processor).isForwardableByEmail(); + } + + @Nested + class TestOnIsNotForwardableByEmail { + + @BeforeEach + void givenIsNotForwardableByEmail() { + doReturn(false).when(processor).isForwardableByEmail(); + } + + @Test + void shouldNotAddLink() { + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ForwardingVorgangWithEingangProcessor.REL_FORWARD_BY_EMAIL)).isEmpty(); + } + } + + @Nested + class TestOnIsForwardableByEmail { + + @BeforeEach + void givenIsForwardableByEmail() { + doReturn(true).when(processor).isForwardableByEmail(); + } + + @Test + void shouldAddLink() { + var expectedHref = UriComponentsBuilder.fromUriString(ForwardingController.LIST_PATH) + .queryParam(ForwardingController.PARAM_VORGANG_ID, VorgangHeaderTestFactory.ID).build().toString(); + + var model = processor.process(EntityModel.of(vorgang)); + + assertThat(model.getLink(ForwardingVorgangWithEingangProcessor.REL_FORWARD_BY_EMAIL)).get() + .extracting(Link::getHref) + .isEqualTo(expectedHref); + } + } + } + } + + @Nested + class TestIsForwardableByOzgCloud { + + @Nested + class TestOnFeatureDisabled { + + @BeforeEach + void givenFeatureDisabled() { + when(featureToggleProperties.isForwardByOzgCloudEnabled()).thenReturn(false); + } + + @ParameterizedTest + @EnumSource + void shouldReturnFalse(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + var forwardableByOzgCloud = processor.isForwardableByOzgCloud(vorgang); + + assertThat(forwardableByOzgCloud).isFalse(); + } + + @ParameterizedTest + @EnumSource + void shouldNotCallUserService(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + processor.isForwardableByOzgCloud(vorgang); + + verify(userService, never()).hasRole(any()); + } + } + + @Nested + class TestOnFeatureEnabled { + + @BeforeEach + void givenFeatureEnabled() { + when(featureToggleProperties.isForwardByOzgCloudEnabled()).thenReturn(true); + } + + @Nested + class TestOnVorgangNotNeu { + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) + void shouldReturnFalseOnVorgangStatusNotNeu(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + var forwardableByOzgCloud = processor.isForwardableByOzgCloud(vorgang); + + assertThat(forwardableByOzgCloud).isFalse(); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) + void shouldNotCallUserService(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + processor.isForwardableByOzgCloud(vorgang); + + verify(userService, never()).hasRole(any()); + } + } + + @Nested + class TestOnVorgangIsNeu { + + private final VorgangWithEingang newVorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build(); + + @Test + void shouldCheckUserRole() { + processor.isForwardableByOzgCloud(newVorgang); + + verify(userService).hasRole(UserRole.VERWALTUNG_USER); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnValueOfHasVerwaltungUserRole(boolean isVerwaltungUser) { + when(userService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(isVerwaltungUser); + + var forwardableByOzgCloud = processor.isForwardableByOzgCloud(newVorgang); + + assertThat(forwardableByOzgCloud).isEqualTo(isVerwaltungUser); + } + } + } + } + + @Nested + class TestIsForwardableByEmail { + + @Test + void shouldCallUserServiceForCurrentRole() { + processor.isForwardableByEmail(); + + verify(userService).hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnIsEinheitlicherAnsprechpartner(boolean isEinheitlicherAnsprechpartner) { + when(userService.hasRole(any())).thenReturn(isEinheitlicherAnsprechpartner); + + var isForwardableByEmail = processor.isForwardableByEmail(); + + assertThat(isForwardableByEmail).isEqualTo(isEinheitlicherAnsprechpartner); + } + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadServiceTest.java similarity index 89% rename from alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java rename to alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadServiceTest.java index a2291ca870f98ece338f36e19a7842a395f41022..92ba57bbdb2a001cef7b0c33bfc3565bf1dbd683 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/LandesnetzInfoReadServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/LandesnetzInfoReadServiceTest.java @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.alfa.vorgang.forwarding; +package de.ozgcloud.alfa.forwarding; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -51,14 +51,15 @@ class LandesnetzInfoReadServiceTest { @Test void shouldAcceptStartSectionLine() { - boolean isStartOfSection = service.isStartOfSection("############################## Beginn Schleswig-Holstein ##########################"); + boolean isStartOfSection = service + .isStartOfSection("############################## Beginn Schleswig-Holstein ##########################"); assertThat(isStartOfSection).isTrue(); } @DisplayName("should return FALSE when") @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "###", "abs.de esm", "################## Schleswig-Holstein ########"}) + @ValueSource(strings = { "", "0", "###", "abs.de esm", "################## Schleswig-Holstein ########" }) void shouldDeclineAnotherLines(String line) { boolean isStartOfSection = service.isStartOfSection(line); @@ -78,7 +79,7 @@ class LandesnetzInfoReadServiceTest { @DisplayName("should return FALSE when") @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "###", "abs.de esm","################## Schleswig-Holstein ########"}) + @ValueSource(strings = { "", "0", "###", "abs.de esm", "################## Schleswig-Holstein ########" }) void shouldDeclineAnotherLines(String line) { boolean isEndOfSection = service.isEndOfSection(line); @@ -98,7 +99,7 @@ class LandesnetzInfoReadServiceTest { @DisplayName("should return FALSE when") @ParameterizedTest(name = "\"{0}\"") - @ValueSource(strings = {"", "0", "abs.de esm"}) + @ValueSource(strings = { "", "0", "abs.de esm" }) void shouldDeclineAnotherLines(String line) { boolean isCommentedLine = service.isCommentedLine(line); @@ -167,7 +168,7 @@ class LandesnetzInfoReadServiceTest { var line = "row"; doReturn(Optional.of(line)).when(service).getFirstColumn(anyString()); - var section = service.readSection(new Scanner(line+ "\n# Ende Schleswig-Holstein")); + var section = service.readSection(new Scanner(line + "\n# Ende Schleswig-Holstein")); assertThat(section).containsExactly(line); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java index 96f08f793d99849a616a42b1f5eec827c8905894..fde089cc30122225b4a97bcc70dc28322bd0dee1 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/RedirectRequestTestFactory.java @@ -24,7 +24,7 @@ package de.ozgcloud.alfa.vorgang; import de.ozgcloud.alfa.common.command.CreateCommand; -import de.ozgcloud.alfa.vorgang.forwarding.RedirectRequest; +import de.ozgcloud.alfa.forwarding.RedirectRequest; import de.ozgcloud.common.test.TestUtils; public class RedirectRequestTestFactory { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java index d916fca57012f1ecab9d21af08457d73be29b688..257f019b7ffc2ba3f4a0b10f74139f3ed49cc4b5 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerITCase.java @@ -57,11 +57,11 @@ import de.ozgcloud.alfa.common.errorhandling.ResourceNotFoundException; import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserProfileTestFactory; import de.ozgcloud.alfa.common.user.UserService; +import de.ozgcloud.alfa.forwarding.ForwardingController; import de.ozgcloud.alfa.postfach.PostfachMailController; import de.ozgcloud.alfa.statistic.ByStatusTestFactory; import de.ozgcloud.alfa.statistic.StatisticController; import de.ozgcloud.alfa.statistic.StatisticTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory; @AutoConfigureMockMvc diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java index 87d377093b7b9438cef8bd144f1f736f34656072..987b09227e8f17d3beeb0709b2385e6f7f45f930 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessorTest.java @@ -33,8 +33,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -46,11 +44,8 @@ import org.springframework.web.util.UriTemplate; import de.ozgcloud.alfa.common.UserProfileUrlProvider; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; -import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; -import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.postfach.PostfachMailController; -import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; class VorgangWithEingangProcessorTest { @@ -60,8 +55,6 @@ class VorgangWithEingangProcessorTest { @Mock private PostfachMailController postfachMailController; @Mock - private CurrentUserService userService; - @Mock private UserManagerUrlProvider userManagerUrlProvider; @Mock @@ -205,43 +198,6 @@ class VorgangWithEingangProcessorTest { } } - @Nested - class TestForwardingLink { - - @DisplayName("should NOT be present in other Role then EA") - @ParameterizedTest - @EnumSource - void shouldNotBePresentWithoutRole(Vorgang.VorgangStatus status) { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(false); - - var link = processor.process(buildVorgangInStatus(status)).getLink(VorgangWithEingangProcessor.REL_VORGANG_FORWARDING); - - assertThat(link).isEmpty(); - } - - @DisplayName("with role EinheitlicherAnsprechpartner") - @Nested - class TestWithRoleEinheitlicherAnsprechpartner { - @BeforeEach - void init() { - when(userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); - } - - @DisplayName("should be present in any Status") - @ParameterizedTest - @EnumSource() - void shouldBePresent(VorgangStatus status) { - var link = processor.process(buildVorgangInStatus(status)).getLink(VorgangWithEingangProcessor.REL_VORGANG_FORWARDING); - - assertThat(link).isPresent().get().extracting(Link::getHref).isEqualTo("/api/forwardings?vorgangId=" + VorgangHeaderTestFactory.ID); - } - } - - private EntityModel<VorgangWithEingang> buildVorgangInStatus(VorgangStatus status) { - return EntityModel.of(VorgangWithEingangTestFactory.createBuilder().status(status).build()); - } - } - @DisplayName("Historie Link") @Nested class TestHistorieLink { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java index 64fd8c50634f12d18c5e14de0e2226252ad21fa4..37b3d3ad544fc896f8a915c5f22b02b1278ac966 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessorTest.java @@ -48,12 +48,12 @@ 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.forwarding.ForwardingController; +import de.ozgcloud.alfa.forwarding.ForwardingTestFactory; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingController; -import de.ozgcloud.alfa.vorgang.forwarding.ForwardingTestFactory; class VorgangWithEingangCommandProcessorTest {