Add more links (unconditional)

This commit is contained in:
René Pfeuffer
2018-05-29 15:36:52 +02:00
parent 0bb7c131ed
commit 92d5ec58b6
2 changed files with 33 additions and 7 deletions

View File

@@ -6,10 +6,13 @@ import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget; import org.mapstruct.MappingTarget;
import sonia.scm.user.User; import sonia.scm.user.User;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import static javax.ws.rs.core.Link.fromUri;
@Mapper @Mapper
public abstract class User2UserDtoMapper { public abstract class User2UserDtoMapper {
@@ -23,7 +26,14 @@ public abstract class User2UserDtoMapper {
@AfterMapping @AfterMapping
void appendLinks(@MappingTarget UserDto target, @Context UriInfo uriInfo) { void appendLinks(@MappingTarget UserDto target, @Context UriInfo uriInfo) {
Map<String, Link> links = new LinkedHashMap<>(); Map<String, Link> 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); target.setLinks(links);
} }
} }

View File

@@ -1,5 +1,6 @@
package sonia.scm.api.rest.resources; package sonia.scm.api.rest.resources;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import sonia.scm.user.User; import sonia.scm.user.User;
@@ -17,22 +18,34 @@ public class User2UserDtoMapperTest {
private final User2UserDtoMapper mapper = Mappers.getMapper(User2UserDtoMapper.class); private final User2UserDtoMapper mapper = Mappers.getMapper(User2UserDtoMapper.class);
private final UriInfo uriInfo = mock(UriInfo.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 @Test
public void shouldMapLinks() throws URISyntaxException { public void shouldMapLinks() throws URISyntaxException {
URI link = new URI("link");
when(uriInfo.getAbsolutePath()).thenReturn(link);
User user = new User(); User user = new User();
user.setName("abc");
UserDto userDto = mapper.userToUserDto(user, uriInfo); 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 @Test
public void shouldMapFields() { public void shouldMapFields() {
User user = new User(); User user = new User();
user.setName("abc"); user.setName("abc");
UserDto userDto = mapper.userToUserDto(user, uriInfo); UserDto userDto = mapper.userToUserDto(user, uriInfo);
assertEquals("abc", userDto.getName()); assertEquals("abc", userDto.getName());
} }
@@ -40,7 +53,10 @@ public class User2UserDtoMapperTest {
public void shouldRemovePassword() { public void shouldRemovePassword() {
User user = new User(); User user = new User();
user.setPassword("password"); user.setPassword("password");
user.setName("abc");
UserDto userDto = mapper.userToUserDto(user, uriInfo); UserDto userDto = mapper.userToUserDto(user, uriInfo);
assertEquals(UserResource.DUMMY_PASSWORT, userDto.getPassword()); assertEquals(UserResource.DUMMY_PASSWORT, userDto.getPassword());
} }
} }