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

OZG-6989 OZG-7214 Relation archive

parent ada79a38
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ import org.springframework.hateoas.server.RepresentationModelProcessor;
import org.springframework.stereotype.Component;
import de.ozgcloud.alfa.common.ModelBuilder;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import lombok.RequiredArgsConstructor;
......@@ -22,6 +23,9 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel
private static final Predicate<VorgangWithEingang> IS_VORGANG_ABGESCHLOSSEN = vorgang -> vorgang.getStatus() == VorgangStatus.ABGESCHLOSSEN;
static final LinkRelation REL_EXPORT = LinkRelation.of("export");
static final LinkRelation REL_ARCHIVE = LinkRelation.of("archive");
private final DmsProperties dmsProperties;
@Override
public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
......@@ -34,6 +38,13 @@ class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel
return ModelBuilder.fromModel(model)
.ifMatch(IS_VORGANG_ABGESCHLOSSEN)
.addLink(linkTo(methodOn(ExportVorgangController.class).exportVorgang(vorgang.getId())).withRel(REL_EXPORT))
.ifMatch(IS_VORGANG_ABGESCHLOSSEN.and(isDmsEnabled()))
.addLink(linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(),
null)).withRel(REL_ARCHIVE))
.buildModel();
}
private Predicate<VorgangWithEingang> isDmsEnabled() {
return vorgang -> dmsProperties.isEnabled();
}
}
......@@ -2,6 +2,7 @@ package de.ozgcloud.alfa.export;
import static de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
......@@ -10,10 +11,13 @@ 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.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.UriTemplate;
import de.ozgcloud.alfa.common.UserProfileUrlProvider;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
......@@ -23,21 +27,23 @@ class ExportVorgangProcessorTest {
@InjectMocks
private ExportVorgangProcessor processor;
@Mock
private DmsProperties dmsProperties;
private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
@Nested
class TestProcess {
@BeforeEach
void init() {
initUserProfileUrlProvider(urlProvider);
}
@DisplayName("Export link")
@Nested
class TestExportLink {
@BeforeEach
void init() {
initUserProfileUrlProvider(urlProvider);
}
@Test
void shouldAddLinkWhenVorgangIsAbgeschlossen() {
var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN);
......@@ -57,12 +63,54 @@ class ExportVorgangProcessorTest {
assertThat(model.getLink(ExportVorgangProcessor.REL_EXPORT)).isEmpty();
}
}
@Nested
class TestArchiveLink {
@Test
void shouldAddLink() {
givenDmsIsEnabled();
var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN);
var model = processor.process(EntityModel.of(vorgang));
assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isPresent().get().extracting(Link::getHref)
.isEqualTo(UriTemplate.of(CommandByRelationController.COMMAND_BY_RELATION_PATH)
.expand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString());
}
@ParameterizedTest
@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ABGESCHLOSSEN")
void shouldNotAddLinkWhenVorgangIsNotAbgeschlossen(VorgangStatus status) {
var vorgang = vorgangInStatus(status);
var model = processor.process(EntityModel.of(vorgang));
assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty();
}
@Test
void shouldNotAddLinkWhenDmsIsNotEnabled() {
givenDmsIsNotEnabled();
var vorgang = vorgangInStatus(VorgangStatus.ABGESCHLOSSEN);
private VorgangWithEingang vorgangInStatus(VorgangStatus status) {
return VorgangWithEingangTestFactory.createBuilder().status(status).build();
var model = processor.process(EntityModel.of(vorgang));
assertThat(model.getLink(ExportVorgangProcessor.REL_ARCHIVE)).isEmpty();
}
void givenDmsIsEnabled() {
when(dmsProperties.isEnabled()).thenReturn(true);
}
void givenDmsIsNotEnabled() {
when(dmsProperties.isEnabled()).thenReturn(false);
}
}
private VorgangWithEingang vorgangInStatus(VorgangStatus status) {
return VorgangWithEingangTestFactory.createBuilder().status(status).build();
}
}
}
\ 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