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

OZG-3936 fix HalModel building

parent eac0f4df
No related branches found
No related tags found
1 merge request!16Ozg 3936 refactor user profile url provider
......@@ -39,6 +39,7 @@ import org.springframework.hateoas.mediatype.hal.HalModelBuilder;
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
import de.ozgcloud.alfa.postfach.PostfachMail.Direction;
......@@ -78,6 +79,7 @@ class PostfachMailModelAssembler implements RepresentationModelAssembler<Postfac
private final UserManagerUrlProvider userManagerUrlProvider;
private final VorgangController vorgangController;
private final LinkedResourceProcessor<PostfachMail> linkedResourceProcessor;
public RepresentationModel<EntityModel<PostfachSettings>> toCollectionModel(Stream<PostfachMail> postfachMails, VorgangWithEingang vorgang,
PostfachSettings postfachSettings) {
......@@ -95,7 +97,7 @@ class PostfachMailModelAssembler implements RepresentationModelAssembler<Postfac
return HalModelBuilder
.halModelOf(postfachSettings)
.link(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withSelfRel())
.embed(postfachMails.map(this::toModel))
.embed(postfachMails.map(this::toModel).map(linkedResourceProcessor::process))
.build();
}
......
......@@ -37,6 +37,7 @@ import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserId;
......@@ -57,6 +58,7 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent
private final CurrentUserService userService;
private final VorgangService vorgangService;
private final LinkedResourceProcessor<Vorgang> linkedResourceProcessor;
public RepresentationModel<EntityModel<EnhancedVorgang>> toCollectionModel(Stream<VorgangHeader> entities, VorgaengeHeaderResponse response,
FindVorgaengeHeaderRequestCriteria requestCriteria, Statistic statistic) {
......@@ -71,7 +73,7 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent
RepresentationModel<EntityModel<EnhancedVorgang>> initModel(Stream<VorgangHeader> entities, Statistic statistic) {
return HalModelBuilder.halModelOf(EnhancedVorgang.builder().statistic(statistic).build())
.link(linkTo(VorgangController.class).withSelfRel())
.embed(entities.map(this::toModel).toList())
.embed(entities.map(this::toModel).map(linkedResourceProcessor::process))
.build();
}
......
......@@ -48,6 +48,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.user.UserId;
import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
import de.ozgcloud.alfa.postfach.PostfachMail.Direction;
......@@ -69,6 +70,8 @@ class PostfachMailModelAssemblerTest {
private UserManagerUrlProvider userManagerUrlProvider;
@Mock
private VorgangController vorgangController;
@Mock
private LinkedResourceProcessor<PostfachMail> linkedResourceProcessor;
@Nested
class TestToModel {
......@@ -352,6 +355,14 @@ class PostfachMailModelAssemblerTest {
private final Stream<PostfachMail> mails = Stream.of(postfachMail);
private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
private final PostfachSettings postfachSettings = PostfachSettingsTestFactory.create();
private final EntityModel<PostfachMail> entityModel = EntityModel.of(postfachMail);
private final EntityModel<PostfachMail> processedEntityModel = EntityModel.of(postfachMail, Link.of("dummy"));
@BeforeEach
void mock() {
doReturn(entityModel).when(modelAssembler).toModel(any());
when(linkedResourceProcessor.process(entityModel)).thenReturn(processedEntityModel);
}
@Test
void shouldHavePostfachAsContent() {
......@@ -376,15 +387,21 @@ class PostfachMailModelAssemblerTest {
verify(modelAssembler).toModel(postfachMail);
}
@Test
void shouldCallLinkedResourceProcessor() {
callModelAssembler();
verify(linkedResourceProcessor).process(entityModel);
}
@Test
@SneakyThrows
void shouldContainPostfachMails() {
var objectMapper = new ObjectMapper().registerModules(new JavaTimeModule(), new Jdk8Module());
doReturn(EntityModel.of(postfachMail)).when(modelAssembler).toModel(postfachMail);
var model = callModelAssembler();
assertThat(objectMapper.writeValueAsString(model)).contains(objectMapper.writeValueAsString(EntityModel.of(postfachMail)));
assertThat(objectMapper.writeValueAsString(model)).contains(objectMapper.writeValueAsString(processedEntityModel));
}
private RepresentationModel<EntityModel<PostfachSettings>> callModelAssembler() {
......
......@@ -24,6 +24,7 @@
package de.ozgcloud.alfa.vorgang;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Collections;
......@@ -32,6 +33,7 @@ import java.util.Optional;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
......@@ -42,10 +44,17 @@ import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import de.ozgcloud.alfa.common.LinkedResourceProcessor;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
import de.ozgcloud.alfa.common.user.UserRole;
import de.ozgcloud.alfa.statistic.Statistic;
import de.ozgcloud.alfa.statistic.StatisticTestFactory;
import lombok.SneakyThrows;
class VorgangModelAssemblerTest {
......@@ -56,6 +65,8 @@ class VorgangModelAssemblerTest {
private CurrentUserService userService;
@Mock
private VorgangService vorgangService;
@Mock
private LinkedResourceProcessor<Vorgang> linkedResourceProcessor;
private static final int PAGE_SIZE = 100;
......@@ -172,6 +183,54 @@ class VorgangModelAssemblerTest {
}
}
@Nested
class TestInitModel {
private static final Link DUMMY_LINK = Link.of("dummy");
private final VorgangHeader vorgangHeader = VorgangHeaderTestFactory.create();
private final Stream<VorgangHeader> entities = Stream.of(vorgangHeader);
private final Statistic statistic = StatisticTestFactory.create();
private final EntityModel<Vorgang> entityModel = EntityModel.of(vorgangHeader);
private final EntityModel<Vorgang> processedEntityModel = EntityModel.of(vorgangHeader, DUMMY_LINK);
@BeforeEach
void mock() {
doReturn(entityModel).when(modelAssembler).toModel(any());
when(linkedResourceProcessor.process(any())).thenReturn(processedEntityModel);
}
@Test
void shouldHaveSelfLink() {
var model = modelAssembler.initModel(entities, statistic);
assertThat(model.getLink(IanaLinkRelations.SELF_VALUE)).get().extracting(Link::getHref).isEqualTo(VorgangController.PATH);
}
@Test
void shouldCallToModel() {
modelAssembler.initModel(entities, statistic);
verify(modelAssembler).toModel(vorgangHeader);
}
@Test
void shouldCallLinkedResourceProcessor() {
modelAssembler.initModel(entities, statistic);
verify(linkedResourceProcessor).process(entityModel);
}
@Test
@SneakyThrows
void shouldContainProcessedEntity() {
var mapper = new ObjectMapper().registerModules(new JavaTimeModule(), new Jdk8Module());
var model = mapper.writeValueAsString(modelAssembler.initModel(entities, statistic));
assertThat(model).contains(mapper.writeValueAsString(processedEntityModel));
}
}
@DisplayName("Build page link")
@Nested
class TestBuildPageLink {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment