diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index 28b5ae16a2..98c70ff82a 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -154,11 +154,11 @@
resteasy-servlet-initializer
${resteasy.version}
-
+
- com.github.pfeuffer
+ de.otto.edison
edison-hal
- jetpack-SNAPSHOT
+ 2.0.1
diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java
index e0b79c0ab0..dbd69828b9 100644
--- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java
@@ -71,7 +71,6 @@ public class UserRootResourceTest {
public void prepareEnvironment() throws IOException, UserException {
initMocks(this);
User dummyUser = createDummyUser("Neo");
- when(userManager.getPage(any(), eq(0), eq(10))).thenReturn(new PageResult<>(singletonList(dummyUser), 1));
doNothing().when(userManager).create(userCaptor.capture());
doNothing().when(userManager).modify(userCaptor.capture());
doNothing().when(userManager).delete(userCaptor.capture());
@@ -105,7 +104,7 @@ public class UserRootResourceTest {
@Test
@SubjectAware(username = "unpriv")
public void shouldCreateLimitedResponseForSimpleUser() throws URISyntaxException {
- MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2);
+ MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "Neo");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
@@ -228,6 +227,48 @@ public class UserRootResourceTest {
verify(userManager, never()).modify(any(User.class));
}
+ @Test
+ public void shouldCreatePageForOnePageOnly() throws URISyntaxException {
+ PageResult singletonPageResult = createSingletonPageResult(1);
+ when(userManager.getPage(any(), eq(0), eq(10))).thenReturn(singletonPageResult);
+ MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2);
+ MockHttpResponse response = new MockHttpResponse();
+
+ dispatcher.invoke(request, response);
+
+ System.out.println(response.getContentAsString());
+
+ assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+ assertTrue(response.getContentAsString().contains("\"name\":\"Neo\""));
+ assertTrue(response.getContentAsString().contains("\"self\":{\"href\":\"/v2/users/?page=0"));
+ assertTrue(response.getContentAsString().contains("\"create\":{\"href\":\"/v2/users/\"}"));
+ assertFalse(response.getContentAsString().contains("\"next\"")); // check for bug of edison-hal v2.0.0
+ }
+
+ @Test
+ public void shouldCreatePageForMultiplePages() throws URISyntaxException {
+ PageResult singletonPageResult = createSingletonPageResult(3);
+ when(userManager.getPage(any(), eq(1), eq(1))).thenReturn(singletonPageResult);
+ MockHttpRequest request = MockHttpRequest.get("/" + UserRootResource.USERS_PATH_V2 + "?page=1&pageSize=1");
+ MockHttpResponse response = new MockHttpResponse();
+
+ dispatcher.invoke(request, response);
+
+ System.out.println(response.getContentAsString());
+
+ assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+ assertTrue(response.getContentAsString().contains("\"name\":\"Neo\""));
+ assertTrue(response.getContentAsString().contains("\"self\":{\"href\":\"/v2/users/?page=1"));
+ assertTrue(response.getContentAsString().contains("\"first\":{\"href\":\"/v2/users/?page=0"));
+ assertTrue(response.getContentAsString().contains("\"prev\":{\"href\":\"/v2/users/?page=0"));
+ assertTrue(response.getContentAsString().contains("\"next\":{\"href\":\"/v2/users/?page=2"));
+ assertTrue(response.getContentAsString().contains("\"last\":{\"href\":\"/v2/users/?page=2"));
+ }
+
+ private PageResult createSingletonPageResult(int overallCount) {
+ return new PageResult<>(singletonList(createDummyUser("Neo")), overallCount);
+ }
+
private User createDummyUser(String name) {
User user = new User();
user.setName(name);