diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java index 6a4b3d43e1..52cdd8067b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/User2UserDtoMapper.java @@ -6,10 +6,13 @@ import org.mapstruct.Mapper; import org.mapstruct.MappingTarget; import sonia.scm.user.User; +import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import java.util.LinkedHashMap; import java.util.Map; +import static javax.ws.rs.core.Link.fromUri; + @Mapper public abstract class User2UserDtoMapper { @@ -23,7 +26,14 @@ public abstract class User2UserDtoMapper { @AfterMapping void appendLinks(@MappingTarget UserDto target, @Context UriInfo uriInfo) { Map links = new LinkedHashMap<>(); - links.put("self", new Link(uriInfo.getAbsolutePath())); + links.put("self", new Link(uriInfo.getBaseUri().resolve(fromUri(UriBuilder.fromResource(UserNewResource.class) + .path(UserNewResource.class, "get").build(target.getName())).build().getUri()))); + links.put("delete", new Link(uriInfo.getBaseUri().resolve(fromUri(UriBuilder.fromResource(UserNewResource.class) + .path(UserNewResource.class, "delete").build(target.getName())).build().getUri()))); + links.put("update", new Link(uriInfo.getBaseUri().resolve(fromUri(UriBuilder.fromResource(UserNewResource.class) + .path(UserNewResource.class, "update").build(target.getName())).build().getUri()))); + links.put("create", new Link(uriInfo.getBaseUri().resolve(fromUri(UriBuilder.fromResource(UserNewResource.class) + .path(UserNewResource.class, "create").build()).build().getUri()))); target.setLinks(links); } } diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/User2UserDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/User2UserDtoMapperTest.java index 400fc6a521..816663143b 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/resources/User2UserDtoMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/resources/User2UserDtoMapperTest.java @@ -1,5 +1,6 @@ package sonia.scm.api.rest.resources; +import org.junit.Before; import org.junit.Test; import org.mapstruct.factory.Mappers; import sonia.scm.user.User; @@ -17,30 +18,45 @@ public class User2UserDtoMapperTest { private final User2UserDtoMapper mapper = Mappers.getMapper(User2UserDtoMapper.class); private final UriInfo uriInfo = mock(UriInfo.class); + private URI baseUri; + + @Before + public void init() throws URISyntaxException { + baseUri = new URI("http://example.com/base/"); + when(uriInfo.getBaseUri()).thenReturn(baseUri); + } + @Test public void shouldMapLinks() throws URISyntaxException { - URI link = new URI("link"); - when(uriInfo.getAbsolutePath()).thenReturn(link); - User user = new User(); + user.setName("abc"); UserDto userDto = mapper.userToUserDto(user, uriInfo); - assertEquals("expected map with self links", link, userDto.getLinks().get("self").getHref()); + + assertEquals("expected map with self baseUri", baseUri.resolve("usersnew/abc"), userDto.getLinks().get("self").getHref()); + assertEquals("expected map with delete baseUri", baseUri.resolve("usersnew/abc"), userDto.getLinks().get("delete").getHref()); + assertEquals("expected map with update baseUri", baseUri.resolve("usersnew/abc"), userDto.getLinks().get("update").getHref()); + assertEquals("expected map with create baseUri", baseUri.resolve("usersnew"), userDto.getLinks().get("create").getHref()); } @Test public void shouldMapFields() { User user = new User(); user.setName("abc"); + UserDto userDto = mapper.userToUserDto(user, uriInfo); - assertEquals("abc" , userDto.getName()); + + assertEquals("abc", userDto.getName()); } @Test public void shouldRemovePassword() { User user = new User(); user.setPassword("password"); + user.setName("abc"); + UserDto userDto = mapper.userToUserDto(user, uriInfo); - assertEquals(UserResource.DUMMY_PASSWORT , userDto.getPassword()); + + assertEquals(UserResource.DUMMY_PASSWORT, userDto.getPassword()); } }