From a506f9c0c6feee249f8fdbb1d8832c542b12cd64 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 2 Jun 2021 08:56:53 +0200
Subject: [PATCH] OZG-400 add ModelAssembler for UserProfile, providing
 self-link

---
 .../user/UserProfileModelAssembler.java       | 13 +++---
 .../user/UserProfileModelAssemblerTest.java   | 43 +++++++++++++++++++
 2 files changed, 51 insertions(+), 5 deletions(-)
 create mode 100644 goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileModelAssemblerTest.java

diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserProfileModelAssembler.java b/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserProfileModelAssembler.java
index ab55f0bb91..df5ab9f7da 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserProfileModelAssembler.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/user/UserProfileModelAssembler.java
@@ -1,5 +1,8 @@
 package de.itvsh.goofy.common.user;
 
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.springframework.hateoas.CollectionModel;
@@ -12,13 +15,13 @@ class UserProfileModelAssembler implements RepresentationModelAssembler<UserProf
 
 	@Override
 	public EntityModel<UserProfile> toModel(UserProfile entity) {
-		// TODO Auto-generated method stub
-		return null;
+		return EntityModel.of(entity)
+				.add(linkTo(UserProfileController.class).slash(entity.getId()).withSelfRel());
 	}
 
-	public CollectionModel<EntityModel<UserProfile>> toCollectionModel(Stream<UserProfile> userProfile) {
-		// FIXME
-		return null;
+	public CollectionModel<EntityModel<UserProfile>> toCollectionModel(Stream<UserProfile> userProfiles) {
+		return CollectionModel.of(userProfiles.map(this::toModel).collect(Collectors.toList()))
+				.add(linkTo(UserProfileController.class).withSelfRel());
 	}
 
 }
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileModelAssemblerTest.java b/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileModelAssemblerTest.java
new file mode 100644
index 0000000000..1569eba131
--- /dev/null
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/user/UserProfileModelAssemblerTest.java
@@ -0,0 +1,43 @@
+package de.itvsh.goofy.common.user;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.springframework.hateoas.IanaLinkRelations;
+import org.springframework.hateoas.Link;
+
+class UserProfileModelAssemblerTest {
+
+	@InjectMocks
+	private UserProfileModelAssembler modelAssembler;
+
+	@Nested
+	class ToModelTest {
+
+		@Test
+		void shouldHaveSelfLink() {
+			var model = modelAssembler.toModel(UserProfileTestFactory.create());
+
+			assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref)
+					.isEqualTo(UserProfileController.BASE_PATH + "/" + UserProfileTestFactory.ID);
+		}
+	}
+
+	@Nested
+	class ToCollectionModelTest {
+
+		private Stream<UserProfile> profiles = Stream.of(UserProfileTestFactory.create());
+
+		@Test
+		void shouldHaveSelfLink() {
+			var model = modelAssembler.toCollectionModel(profiles);
+
+			assertThat(model.getLink(IanaLinkRelations.SELF)).isPresent().get().extracting(Link::getHref)
+					.isEqualTo(UserProfileController.BASE_PATH);
+		}
+	}
+}
-- 
GitLab