From e156ef19646b0caa7d22751667df3996bdad473c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 25 Jun 2018 14:05:25 +0200 Subject: [PATCH 1/3] Add unit tests for group resource --- .../v2/resources/GroupRootResourceTest.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java index a05a217ac5..b4e8d167e1 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java @@ -13,6 +13,7 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; +import sonia.scm.PageResult; import sonia.scm.group.Group; import sonia.scm.group.GroupException; import sonia.scm.group.GroupManager; @@ -26,9 +27,12 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.Collections; +import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @@ -56,8 +60,6 @@ public class GroupRootResourceTest { private GroupDtoToGroupMapperImpl dtoToGroupMapper; @InjectMocks private GroupToGroupDtoMapperImpl groupToDtoMapper; - @InjectMocks - private GroupCollectionToDtoMapper groupCollectionToDtoMapper; private ArgumentCaptor groupCaptor = ArgumentCaptor.forClass(Group.class); @@ -67,8 +69,10 @@ public class GroupRootResourceTest { doNothing().when(groupManager).create(groupCaptor.capture()); Group group = createDummyGroup(); + when(groupManager.getPage(any(), eq(0), eq(10))).thenReturn(new PageResult<>(singletonList(group), 1)); when(groupManager.get("admin")).thenReturn(group); + GroupCollectionToDtoMapper groupCollectionToDtoMapper = new GroupCollectionToDtoMapper(groupToDtoMapper, uriInfoStore); GroupCollectionResource groupCollectionResource = new GroupCollectionResource(groupManager, dtoToGroupMapper, groupToDtoMapper, groupCollectionToDtoMapper); GroupResource groupResource = new GroupResource(groupManager, groupToDtoMapper); GroupRootResource groupRootResource = new GroupRootResource(MockProvider.of(groupCollectionResource), MockProvider.of(groupResource)); @@ -126,6 +130,31 @@ public class GroupRootResourceTest { assertEquals("user1", createdGroup.getMembers().get(0)); } + @Test + public void shouldFailForMissingContent() throws URISyntaxException { + MockHttpRequest request = MockHttpRequest + .post("/" + GroupRootResource.GROUPS_PATH_V2) + .contentType(VndMediaType.GROUP) + .content(new byte[] {}); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + assertEquals(400, response.getStatus()); + } + + @Test + public void shouldGetAll() throws URISyntaxException { + MockHttpRequest request = MockHttpRequest.get("/" + GroupRootResource.GROUPS_PATH_V2); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + assertEquals(HttpServletResponse.SC_OK, response.getStatus()); + assertTrue(response.getContentAsString().contains("\"name\":\"admin\"")); + assertTrue(response.getContentAsString().contains("\"self\":{\"href\":\"/v2/groups/admin\"}")); + } + private Group createDummyGroup() { Group group = new Group(); group.setName("admin"); From 15acd69562127258ea6192214b972e3237aa1645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 25 Jun 2018 14:16:20 +0200 Subject: [PATCH 2/3] Add unit tests for user update --- .../v2/resources/UserRootResourceTest.java | 21 +++++++++++++++++++ .../sonia/scm/api/v2/user-test-create.json | 6 +++--- .../sonia/scm/api/v2/user-test-update.json | 9 ++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-update.json 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 e8bcff1a0e..c52ecd4fee 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 @@ -73,6 +73,7 @@ public class UserRootResourceTest { when(userManager.getPage(any(), eq(0), eq(10))).thenReturn(new PageResult<>(singletonList(dummyUser), 1)); when(userManager.get("Neo")).thenReturn(dummyUser); doNothing().when(userManager).create(userCaptor.capture()); + doNothing().when(userManager).modify(userCaptor.capture()); UserCollectionToDtoMapper userCollectionToDtoMapper = new UserCollectionToDtoMapper(userToDtoMapper, uriInfoStore); UserCollectionResource userCollectionResource = new UserCollectionResource(userManager, dtoToUserMapper, userToDtoMapper, @@ -134,6 +135,26 @@ public class UserRootResourceTest { assertEquals("encrypted123", createdUser.getPassword()); } + @Test + public void shouldUpdateChangedUserWithEncryptedPassword() throws URISyntaxException, IOException { + URL url = Resources.getResource("sonia/scm/api/v2/user-test-update.json"); + byte[] userJson = Resources.toByteArray(url); + + MockHttpRequest request = MockHttpRequest + .put("/" + UserRootResource.USERS_PATH_V2 + "Neo") + .contentType(VndMediaType.USER) + .content(userJson); + MockHttpResponse response = new MockHttpResponse(); + when(passwordService.encryptPassword("pwd123")).thenReturn("encrypted123"); + + dispatcher.invoke(request, response); + + assertEquals(204, response.getStatus()); + User updatedUser = userCaptor.getValue(); + assertNotNull(updatedUser); + assertEquals("encrypted123", updatedUser.getPassword()); + } + @Test public void shouldFailForMissingContent() throws URISyntaxException { MockHttpRequest request = MockHttpRequest diff --git a/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-create.json b/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-create.json index 551cb6c2ae..89164ee67f 100644 --- a/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-create.json +++ b/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-create.json @@ -1,9 +1,9 @@ { "active": true, "admin": false, - "displayName": "rpf", - "mail": "x@abcde.cd", - "name": "rpf", + "displayName": "someone", + "mail": "x@example.com", + "name": "someone", "password": "pwd123", "type": "xml" } diff --git a/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-update.json b/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-update.json new file mode 100644 index 0000000000..fdcb708545 --- /dev/null +++ b/scm-webapp/src/test/resources/sonia/scm/api/v2/user-test-update.json @@ -0,0 +1,9 @@ +{ + "active": true, + "admin": false, + "displayName": "Neo", + "mail": "neo@example.com", + "name": "Neo", + "password": "pwd123", + "type": "xml" +} From 3edd5877b8dc254cedbb81d83159c15f9b6ad89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 25 Jun 2018 14:28:41 +0200 Subject: [PATCH 3/3] Add unit tests for user deletion --- .../v2/resources/UserRootResourceTest.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) 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 c52ecd4fee..c946077e0b 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 @@ -30,11 +30,11 @@ import java.net.URL; import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; @@ -74,6 +74,7 @@ public class UserRootResourceTest { when(userManager.get("Neo")).thenReturn(dummyUser); doNothing().when(userManager).create(userCaptor.capture()); doNothing().when(userManager).modify(userCaptor.capture()); + doNothing().when(userManager).delete(userCaptor.capture()); UserCollectionToDtoMapper userCollectionToDtoMapper = new UserCollectionToDtoMapper(userToDtoMapper, uriInfoStore); UserCollectionResource userCollectionResource = new UserCollectionResource(userManager, dtoToUserMapper, userToDtoMapper, @@ -116,7 +117,7 @@ public class UserRootResourceTest { } @Test - public void shouldCreateNewUserWithEncryptedPassword() throws URISyntaxException, IOException { + public void shouldCreateNewUserWithEncryptedPassword() throws URISyntaxException, IOException, UserException { URL url = Resources.getResource("sonia/scm/api/v2/user-test-create.json"); byte[] userJson = Resources.toByteArray(url); @@ -129,14 +130,14 @@ public class UserRootResourceTest { dispatcher.invoke(request, response); - assertEquals(201, response.getStatus()); + assertEquals(HttpServletResponse.SC_CREATED, response.getStatus()); + verify(userManager).create(any(User.class)); User createdUser = userCaptor.getValue(); - assertNotNull(createdUser); assertEquals("encrypted123", createdUser.getPassword()); } @Test - public void shouldUpdateChangedUserWithEncryptedPassword() throws URISyntaxException, IOException { + public void shouldUpdateChangedUserWithEncryptedPassword() throws URISyntaxException, IOException, UserException { URL url = Resources.getResource("sonia/scm/api/v2/user-test-update.json"); byte[] userJson = Resources.toByteArray(url); @@ -149,9 +150,9 @@ public class UserRootResourceTest { dispatcher.invoke(request, response); - assertEquals(204, response.getStatus()); + assertEquals(HttpServletResponse.SC_NO_CONTENT, response.getStatus()); + verify(userManager).modify(any(User.class)); User updatedUser = userCaptor.getValue(); - assertNotNull(updatedUser); assertEquals("encrypted123", updatedUser.getPassword()); } @@ -166,7 +167,7 @@ public class UserRootResourceTest { dispatcher.invoke(request, response); - assertEquals(400, response.getStatus()); + assertEquals(HttpServletResponse.SC_BAD_REQUEST, response.getStatus()); } @Test @@ -179,6 +180,17 @@ public class UserRootResourceTest { assertEquals(HttpServletResponse.SC_NOT_FOUND, response.getStatus()); } + @Test + public void shouldDeleteUser() throws URISyntaxException, IOException, UserException { + MockHttpRequest request = MockHttpRequest.delete("/" + UserRootResource.USERS_PATH_V2 + "Neo"); + MockHttpResponse response = new MockHttpResponse(); + + dispatcher.invoke(request, response); + + verify(userManager).delete(any(User.class)); + assertEquals(HttpServletResponse.SC_NO_CONTENT, response.getStatus()); + } + private User createDummyUser() { User user = new User(); user.setName("Neo");