Skip to content
Snippets Groups Projects
Commit a32aa1f8 authored by Felix Reichenbach's avatar Felix Reichenbach
Browse files

OZG-3936 move tests for linked resources to own test classes

parent 0b063d57
No related branches found
No related tags found
1 merge request!16Ozg 3936 refactor user profile url provider
This commit is part of merge request !16. Comments created here will be created in the context of that merge request.
Showing
with 224 additions and 149 deletions
package de.ozgcloud.alfa.bescheid;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.mockito.InjectMocks;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
class BescheidLinkedResourceTest {
@InjectMocks
private LinkedResourceProcessor<Bescheid> processor;
@Nested
class TestEntityModelProcessing {
private static final String REL_BESCHEID_DOCUMENT = "bescheidDocument";
@Test
void shouldHaveBescheidDocumentLink() {
var model = processor.process(EntityModel.of(BescheidTestFactory.create()));
assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isPresent().get().extracting(Link::getHref)
.isEqualTo(String.format("%s/%s", DocumentController.PATH, BescheidTestFactory.BESCHEID_DOCUMENT));
}
@ParameterizedTest
@NullAndEmptySource
void shouldNotHaveBescheidDocumentLinkIfNoDocumentAvailable(String documentId) {
var model = processor.process(EntityModel.of(BescheidTestFactory.createBuilder().bescheidDocument(documentId).build()));
assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isEmpty();
}
}
}
......@@ -46,7 +46,6 @@ import org.springframework.hateoas.Link;
import org.springframework.web.util.UriTemplate;
import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController;
import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
import de.ozgcloud.alfa.common.binaryfile.FileId;
import de.ozgcloud.alfa.common.command.CommandController;
import de.ozgcloud.alfa.postfach.PostfachMailController;
......@@ -175,22 +174,6 @@ class BescheidModelAssemblerTest {
.isEqualTo(createCommandLink());
}
@ParameterizedTest
@NullAndEmptySource
void shouldNotHaveBescheidDocumentLinkIfNoDocumentAvailable(String documentId) {
var model = callToModel(BescheidTestFactory.createBuilder().bescheidDocument(documentId).build());
assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isEmpty();
}
@Test
void shouldHaveBescheidDocumentLink() {
var model = callToModel();
assertThat(model.getLink(REL_BESCHEID_DOCUMENT)).isPresent().get().extracting(Link::getHref)
.isEqualTo(String.format("%s/%s", DocumentController.PATH, BescheidTestFactory.BESCHEID_DOCUMENT));
}
@Test
void shouldHaveBescheidenUndSendenLink() {
when(postfachMailController.isPostfachConfigured()).thenReturn(true);
......@@ -259,7 +242,7 @@ class BescheidModelAssemblerTest {
}
private EntityModel<Bescheid> callToModel(Bescheid bescheid) {
return LinkedResourceTestUtils.processLinkedResource(assembler.toModel(bescheid));
return assembler.toModel(bescheid);
}
}
......
package de.ozgcloud.alfa.bescheid;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.mockito.InjectMocks;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.binaryfile.FileId;
class DocumentLinkedResourceTest {
@InjectMocks
private LinkedResourceProcessor<Document> processor;
@Nested
class TestEntityModelProcessing {
static final String REL_FILE = "file";
@Test
void shouldHaveFileIdLink() {
var model = processor.process(EntityModel.of(DocumentTestFactory.create()));
assertThat(model.getLink(REL_FILE)).isPresent().get().extracting(Link::getHref)
.isEqualTo("/api/binaryFiles/" + DocumentTestFactory.FILE_ID);
}
@ParameterizedTest
@NullAndEmptySource
void shouldNotHaveFileIdLinkIfNoFileAvailable(String fileId) {
var model = processor.process(EntityModel.of(DocumentTestFactory.createBuilder().fileId(FileId.from(fileId)).build()));
assertThat(model.getLink(REL_FILE)).isEmpty();
}
}
}
......@@ -23,7 +23,6 @@
*/
package de.ozgcloud.alfa.bescheid;
import static de.ozgcloud.alfa.bescheid.DocumentModelAssembler.*;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
......@@ -33,8 +32,6 @@ import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
class DocumentModelAssemblerTest {
@Spy
......@@ -53,16 +50,8 @@ class DocumentModelAssemblerTest {
.isEqualTo(DocumentController.PATH + "/" + DocumentTestFactory.ID);
}
@Test
void shouldHaveFileIdLink() {
var model = callToModel();
assertThat(model.getLink(REL_FILE)).isPresent().get().extracting(Link::getHref)
.isEqualTo("/api/binaryFiles/" + DocumentTestFactory.FILE_ID);
}
private EntityModel<Document> callToModel() {
return LinkedResourceTestUtils.processLinkedResource(assembler.toModel(document));
return assembler.toModel(document);
}
}
}
package de.ozgcloud.alfa.collaboration;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
class CollaborationLinkedResourceTest {
@InjectMocks
private LinkedResourceProcessor<Collaboration> processor;
@Nested
class TestEntityModelProcessing {
private static final String REL_ZUSTAENDIGE_STELLE = "zustaendigeStelle";
@Test
void shouldHaveLinkToOrganisationsEinheit() {
var entityModel = processor.process(EntityModel.of(OrganisationsEinheitCollaborationTestFactory.create()));
assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
.isEqualTo(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID);
}
@Test
void shouldHaveLinkToFachstelle() {
var entityModel = processor.process(EntityModel.of(FachstelleCollaborationTestFactory.create()));
assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
.isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID);
}
}
}
......@@ -41,7 +41,6 @@ import org.springframework.hateoas.Link;
import org.springframework.hateoas.UriTemplate;
import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
......@@ -60,8 +59,6 @@ class CollaborationModelAssemblerTest {
@Nested
class TestToModel {
private static final String REL_ZUSTAENDIGE_STELLE = "zustaendigeStelle";
@Nested
class OnOrganisationsEinheitCollaboration {
......@@ -74,14 +71,6 @@ class CollaborationModelAssemblerTest {
assertThat(entityModel.getContent()).isEqualTo(collaboration);
}
@Test
void shouldHaveLinkToOrganisationsEinheit() {
var entityModel = LinkedResourceTestUtils.processLinkedResource(callAssembler());
assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
.isEqualTo(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID);
}
private EntityModel<Collaboration> callAssembler() {
return assembler.toModel(collaboration);
}
......@@ -99,14 +88,6 @@ class CollaborationModelAssemblerTest {
assertThat(entityModel.getContent()).isEqualTo(collaboration);
}
@Test
void shouldHaveLinkToFachstelle() {
var entityModel = LinkedResourceTestUtils.processLinkedResource(callAssembler());
assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
.isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID);
}
private EntityModel<Collaboration> callAssembler() {
return assembler.toModel(collaboration);
}
......
/*
* Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.alfa.common;
import org.springframework.hateoas.EntityModel;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
public class LinkedResourceTestUtils {
public static <T> EntityModel<T> processLinkedResource(EntityModel<T> model) {
return new LinkedResourceProcessor<T>(null).process(model);
}
public static <T> EntityModel<T> processUserProfileResource(EntityModel<T> model, UserManagerUrlProvider userManagerUrlProvider) {
return new LinkedResourceProcessor<T>(userManagerUrlProvider).process(model);
}
}
package de.ozgcloud.alfa.common.command;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.user.UserId;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
class CommandLinkedResourceTest {
@InjectMocks
private LinkedResourceProcessor<Command> processor;
@Mock
private UserManagerUrlProvider userManagerUrlProvider;
@Nested
class TestEntityModelProcessing {
private static final String CREATED_BY = "createdBy";
private static final String ROOT_URL = LoremIpsum.getInstance().getUrl();
private static final String USER_PROFILES_API_PATH = "/api/user-profiles/";
@Test
void shouldHaveCreatedByLink() {
when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(ROOT_URL + USER_PROFILES_API_PATH + "%s");
var model = processor.process(EntityModel.of(CommandTestFactory.create()));
assertThat(model.getLink(CREATED_BY)).isPresent().get().extracting(Link::getHref)
.isEqualTo(ROOT_URL + USER_PROFILES_API_PATH + UserProfileTestFactory.ID);
}
@Test
void shouldNotHaveCreatedByLinkForSystemUser() {
var systemUser = UserId.from("system-" + LoremIpsum.getInstance().getWords(1));
var commandBySystemUser = CommandTestFactory.createBuilder()
.createdBy(systemUser)
.build();
var model = processor.process(EntityModel.of(commandBySystemUser));
assertThat(model.getLink(CREATED_BY)).isNotPresent();
}
@Test
void shouldNotHaveCreatedByLinkOnNullValue() {
var model = processor.process(EntityModel.of(CommandTestFactory.createBuilder().createdBy(null).build()));
assertThat(model.getLink(CREATED_BY)).isNotPresent();
}
}
}
......@@ -36,18 +36,12 @@ import org.mockito.Mock;
import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
import de.ozgcloud.alfa.common.command.CommandTestFactory;
import de.ozgcloud.alfa.common.user.UserId;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
class HistorieModelAssemblerTest {
private static final String CREATED_BY = "createdBy";
@InjectMocks
private HistorieModelAssembler modelAssembler;
@Mock
......@@ -116,44 +110,4 @@ class HistorieModelAssemblerTest {
}
}
@DisplayName("createdBy Link")
@Nested
class TestCreatedByLink {
private static final String ROOT_URL = LoremIpsum.getInstance().getUrl();
private static final String USER_PROFILES_API_PATH = "/api/user-profiles/";
@Mock
private UserManagerUrlProvider userManagerUrlProvider;
@Test
void shouldExistingAtUser() {
when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(ROOT_URL + USER_PROFILES_API_PATH + "%s");
var model = LinkedResourceTestUtils
.processUserProfileResource(modelAssembler.toModel(CommandTestFactory.create()), userManagerUrlProvider);
assertThat(model.getLink(CREATED_BY)).isPresent().get().extracting(Link::getHref)
.isEqualTo(ROOT_URL + USER_PROFILES_API_PATH + UserProfileTestFactory.ID);
}
@Test
void shouldNotExistForSystemUser() {
var systemUser = UserId.from("system-" + LoremIpsum.getInstance().getWords(1));
var commandBySystemUser = CommandTestFactory.createBuilder()
.createdBy(systemUser)
.build();
var model = modelAssembler.toModel(commandBySystemUser);
assertThat(model.getLink(CREATED_BY)).isNotPresent();
}
@Test
void shouldNotBePresentOnNullValue() {
var model = modelAssembler.toModel(CommandTestFactory.createBuilder().createdBy(null).build());
assertThat(model.getLink(CREATED_BY)).isNotPresent();
}
}
}
\ No newline at end of file
package de.ozgcloud.alfa.kommentar;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
class KommentarLinkedResourceTest {
@InjectMocks
private LinkedResourceProcessor<Kommentar> processor;
@Mock
private UserManagerUrlProvider userManagerUrlProvider;
@Nested
class TestEntityModelProcessing {
private static final String REL_CREATED_BY = "createdBy";
private static final String USER_MANAGER_URL = LoremIpsum.getInstance().getUrl();
@Test
void shouldHaveCreatedByLink() {
when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(USER_MANAGER_URL + "%s");
var model = processor.process(EntityModel.of(KommentarTestFactory.create()));
assertThat(model.getLink(REL_CREATED_BY)).isPresent().get().extracting(Link::getHref)
.isEqualTo(USER_MANAGER_URL + KommentarTestFactory.CREATED_BY);
}
}
}
......@@ -40,9 +40,6 @@ import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.server.EntityLinks;
import com.thedeanda.lorem.LoremIpsum;
import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
import de.ozgcloud.alfa.vorgang.VorgangController;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
......@@ -52,8 +49,6 @@ import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
class KommentarModelAssemblerTest {
private static final String PATH = KommentarController.KOMMENTAR_PATH + "/";
private static final String REL_CREATED_BY = "createdBy";
private static final String USER_MANAGER_URL = LoremIpsum.getInstance().getUrl();
@Spy
@InjectMocks
......@@ -127,16 +122,6 @@ class KommentarModelAssemblerTest {
assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isEmpty();
}
@Test
void shouldHaveCreatedByLink() {
when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(USER_MANAGER_URL + "%s");
var model = LinkedResourceTestUtils.processUserProfileResource(buildModel(), userManagerUrlProvider);
assertThat(model.getLink(REL_CREATED_BY)).isPresent().get().extracting(Link::getHref)
.isEqualTo(USER_MANAGER_URL + KommentarTestFactory.CREATED_BY);
}
@Test
void shouldHaveAttachmentsLink() {
var kommentar = KommentarTestFactory.create();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment