diff --git a/goofy-server/src/main/java/de/itvsh/goofy/historie/HistorieModelAssembler.java b/goofy-server/src/main/java/de/itvsh/goofy/historie/HistorieModelAssembler.java index 8e5eaa28f998654080b36ba438a29fc960123a07..15719a6c8a6f97382dafa786832fc7d1de8c2384 100644 --- a/goofy-server/src/main/java/de/itvsh/goofy/historie/HistorieModelAssembler.java +++ b/goofy-server/src/main/java/de/itvsh/goofy/historie/HistorieModelAssembler.java @@ -2,6 +2,7 @@ package de.itvsh.goofy.historie; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; +import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; @@ -17,19 +18,35 @@ import de.itvsh.goofy.common.user.UserProfileController; @Component class HistorieModelAssembler implements RepresentationModelAssembler<Command, EntityModel<Command>> { + static final String SYSTEM_NOTIFICATION_MANAGER_PREFIX = "system-notification_manager"; + static final String REL_ASSIGNED_TO = "assignedTo"; static final String ASSIGNED_TO_BODY_FIELD = "assignedTo"; @Override public EntityModel<Command> toModel(Command entity) { - var modelBuilder = ModelBuilder.fromEntity(entity).addLink(linkTo(HistorieController.class).slash(entity.getId()).withSelfRel()); + var cleanCommand = unsetSystemUser(entity); + var modelBuilder = ModelBuilder.fromEntity(cleanCommand).addLink(linkTo(HistorieController.class).slash(cleanCommand.getId()).withSelfRel()); - addAssignedTo(entity, modelBuilder); + addAssignedTo(cleanCommand, modelBuilder); return modelBuilder.buildModel(); } + Command unsetSystemUser(Command entity) { + if (isSystemNotificationUser(entity)) { + return entity.toBuilder().createdBy(null).build(); + } + + return entity; + + } + + private boolean isSystemNotificationUser(Command entity) { + return Objects.nonNull(entity.getCreatedBy()) && entity.getCreatedBy().toString().startsWith(SYSTEM_NOTIFICATION_MANAGER_PREFIX); + } + private void addAssignedTo(Command entity, ModelBuilder<Command> modelBuilder) { Optional.ofNullable(entity.getBody()).map(body -> body.get(ASSIGNED_TO_BODY_FIELD)) .ifPresent(assignedTo -> modelBuilder.addLink(linkTo(UserProfileController.class).slash(assignedTo).withRel(REL_ASSIGNED_TO))); diff --git a/goofy-server/src/test/java/de/itvsh/goofy/historie/HistorieModelAssemblerTest.java b/goofy-server/src/test/java/de/itvsh/goofy/historie/HistorieModelAssemblerTest.java index 688517382f94b4ddb2126d06db34271886dafe14..824d8d08f59e6439463026eb40f24f0430e58aaf 100644 --- a/goofy-server/src/test/java/de/itvsh/goofy/historie/HistorieModelAssemblerTest.java +++ b/goofy-server/src/test/java/de/itvsh/goofy/historie/HistorieModelAssemblerTest.java @@ -1,5 +1,7 @@ package de.itvsh.goofy.historie; +import static org.assertj.core.api.Assertions.*; + import java.util.Map; import org.junit.jupiter.api.DisplayName; @@ -9,13 +11,16 @@ import org.mockito.InjectMocks; import org.springframework.hateoas.IanaLinkRelations; import org.springframework.hateoas.Link; -import static org.assertj.core.api.Assertions.*; - import de.itvsh.goofy.common.command.CommandTestFactory; +import de.itvsh.goofy.common.user.UserId; import de.itvsh.goofy.common.user.UserProfileTestFactory; class HistorieModelAssemblerTest { + private static final String USER_PROFILES_API_PATH = "/api/userProfiles/"; + + private static final String CREATED_BY = "createdBy"; + @InjectMocks private HistorieModelAssembler modelAssembler; @@ -28,14 +33,6 @@ class HistorieModelAssemblerTest { assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref).isEqualTo(COMMAND_SINGLE_PATH); } - @Test - void shouldHaveCreatedByLink() { - var model = modelAssembler.toModel(CommandTestFactory.create()); - - assertThat(model.getLink("createdBy")).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/userProfiles/" + UserProfileTestFactory.ID); - } - @DisplayName("AssignedTo Link") @Nested class TestAssignedToLink { @@ -46,7 +43,7 @@ class HistorieModelAssemblerTest { .body(Map.of(HistorieModelAssembler.ASSIGNED_TO_BODY_FIELD, UserProfileTestFactory.ID)).build()); assertThat(model.getLink(HistorieModelAssembler.REL_ASSIGNED_TO)).isPresent().get().extracting(Link::getHref) - .isEqualTo("/api/userProfiles/" + UserProfileTestFactory.ID); + .isEqualTo(USER_PROFILES_API_PATH + UserProfileTestFactory.ID); } @Test @@ -56,4 +53,33 @@ class HistorieModelAssemblerTest { assertThat(model.getLink(HistorieModelAssembler.REL_ASSIGNED_TO)).isNotPresent(); } } + + @DisplayName("createdBy Link") + @Nested + class TestCreatedByLink { + + @Test + void shouldExistingAtUser() { + var model = modelAssembler.toModel(CommandTestFactory.create()); + + assertThat(model.getLink(CREATED_BY)).isPresent().get().extracting(Link::getHref) + .isEqualTo(USER_PROFILES_API_PATH + UserProfileTestFactory.ID); + } + + @Test + void shouldNotExistingAtSystemNotificationMAnager() { + var model = modelAssembler + .toModel(CommandTestFactory.createBuilder().createdBy(UserId.from(HistorieModelAssembler.SYSTEM_NOTIFICATION_MANAGER_PREFIX)) + .build()); + + 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