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

OZG-6989 OZG-7216 Deactivate links if locked

parent 3ac7caed
No related branches found
No related tags found
No related merge requests found
......@@ -38,7 +38,6 @@ import de.ozgcloud.alfa.common.CollectionModelBuilder;
import de.ozgcloud.alfa.common.ModelBuilder;
import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
......@@ -67,7 +66,7 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
var attachmentsLink = linkTo(methodOn(KommentarController.class).getAttachments(kommentar.getId()));
return ModelBuilder.fromEntity(kommentar).addLink(selfLink.withSelfRel())
.ifMatch(() -> isEditable(vorgang))
.ifMatch(() -> vorgangController.isEditable(vorgang))
.addLink(commandLink.withRel(REL_EDIT))
.ifMatch(HAS_ATTACHMENTS)
.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
......@@ -80,13 +79,9 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
return CollectionModelBuilder.fromEntities(entities.map(kommentar -> buildModel(kommentar, vorgang)))
.addLink(linkTo(KommentarController.class).withSelfRel())
.addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE))
.ifMatch(kommentareModel -> isEditable(vorgang))
.ifMatch(() -> vorgangController.isEditable(vorgang))
.addLink(linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId))
.withRel(REL_CREATE))
.buildModel();
}
private boolean isEditable(VorgangWithEingang vorgang) {
return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN;
}
}
\ No newline at end of file
......@@ -213,4 +213,8 @@ public class VorgangController {
return handleGetAllRequest(requestCriteria);
}
public boolean isEditable(VorgangWithEingang vorgang) {
return vorgangService.isEditable(vorgang);
}
}
\ No newline at end of file
......@@ -97,4 +97,8 @@ class VorgangService {
private Collection<String> getOrganisationseinheitenIdsFromUser() {
return userService.getUser().getOrganisationseinheitIds();
}
public boolean isEditable(VorgangWithEingang vorgang) {
return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN && (vorgang.getHeader() == null || !vorgang.getHeader().isLocked());
}
}
\ No newline at end of file
......@@ -43,9 +43,9 @@ import org.springframework.hateoas.server.EntityLinks;
import de.ozgcloud.alfa.common.UserProfileUrlProvider;
import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory;
import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
class KommentarModelAssemblerTest {
......@@ -90,11 +90,13 @@ class KommentarModelAssemblerTest {
@Nested
class TestLinksOnModel {
final String COMMAND_BY_KOMMENTAR_PATH = //
private static final String COMMAND_BY_KOMMENTAR_PATH = //
KommentarCommandController.KOMMENTAR_COMMANDS
.replace("{kommentarId}", KommentarTestFactory.ID)
.replace("{kommentarVersion}", String.valueOf(KommentarTestFactory.VERSION));
private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
@Test
void shouldHaveSelfLink() {
var link = buildModel().getLink(IanaLinkRelations.SELF);
......@@ -105,6 +107,8 @@ class KommentarModelAssemblerTest {
@Test
void shouldHaveEditLink() {
when(vorgangController.isEditable(vorgang)).thenReturn(true);
var model = buildModel();
assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isPresent().get().extracting(Link::getHref)
......@@ -113,9 +117,9 @@ class KommentarModelAssemblerTest {
@Test
void shouldNotHaveEditLink() {
var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build();
when(vorgangController.isEditable(vorgang)).thenReturn(false);
var model = modelAssembler.buildModel(KommentarTestFactory.create(), vorgang);
var model = buildModel();
assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isEmpty();
}
......@@ -149,7 +153,7 @@ class KommentarModelAssemblerTest {
}
EntityModel<Kommentar> buildModel() {
return modelAssembler.buildModel(KommentarTestFactory.create(), VorgangWithEingangTestFactory.create());
return modelAssembler.buildModel(KommentarTestFactory.create(), vorgang);
}
}
......@@ -157,10 +161,11 @@ class KommentarModelAssemblerTest {
class TestLinksOnCollectionModel {
private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
@BeforeEach
void beforeEach() {
when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create());
when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang);
}
@Test
......@@ -187,6 +192,7 @@ class KommentarModelAssemblerTest {
@Test
void shouldHaveCreateKommentarLink() {
initUserProfileUrlProvider(urlProvider);
when(vorgangController.isEditable(vorgang)).thenReturn(true);
var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(),
VorgangHeaderTestFactory.ID);
......@@ -201,8 +207,7 @@ class KommentarModelAssemblerTest {
@Test
void shouldNotHaveCreateKommentarLink() {
initUserProfileUrlProvider(urlProvider);
var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build();
when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang);
when(vorgangController.isEditable(vorgang)).thenReturn(false);
var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(),
VorgangHeaderTestFactory.ID);
......
......@@ -901,4 +901,27 @@ class VorgangControllerTest {
.content(body));
}
}
@Nested
class TestIsEditable {
private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
@Test
void shouldCallService() {
controller.isEditable(vorgang);
verify(vorgangService).isEditable(vorgang);
}
@ParameterizedTest
@ValueSource(booleans = {true, false})
void shouldReturnServiceResult(boolean serviceResult) {
when(vorgangService.isEditable(vorgang)).thenReturn(serviceResult);
var editable = controller.isEditable(vorgang);
assertThat(editable).isEqualTo(serviceResult);
}
}
}
\ No newline at end of file
......@@ -33,6 +33,8 @@ 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;
......@@ -332,4 +334,59 @@ class VorgangServiceTest {
verify(service).buildFilterCriteria(any(FilterCriteria.class));
}
}
@Nested
class TestIsEditable {
@ParameterizedTest
@EnumSource
void shouldBeFalseWhenVorgangIsLocked(VorgangStatus status) {
var vorgang = VorgangWithEingangTestFactory.createBuilder()
.header(VorgangHeadTestFactory.createBuilder().locked(true).build())
.status(status)
.build();
var editable = service.isEditable(vorgang);
assertThat(editable).isFalse();
}
@Test
void shouldBeFalseWhenVorgangZuLoeschen() {
var vorgang = VorgangWithEingangTestFactory.createBuilder()
.header(VorgangHeadTestFactory.createBuilder().locked(false).build())
.status(VorgangStatus.ZU_LOESCHEN)
.build();
var editable = service.isEditable(vorgang);
assertThat(editable).isFalse();
}
@ParameterizedTest
@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN")
void shouldBeTrueWhenVorgangIsNotZuLoeschen(VorgangStatus status) {
var vorgang = VorgangWithEingangTestFactory.createBuilder()
.header(VorgangHeadTestFactory.createBuilder().locked(false).build())
.status(status)
.build();
var editable = service.isEditable(vorgang);
assertThat(editable).isTrue();
}
@ParameterizedTest
@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN")
void shouldBeTrueIfHeaderIsNull(VorgangStatus status) {
var vorgang = VorgangWithEingangTestFactory.createBuilder()
.header(null)
.status(status)
.build();
var editable = service.isEditable(vorgang);
assertThat(editable).isTrue();
}
}
}
\ 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