# HG changeset patch # User ymh # Date 1386758168 -3600 # Node ID 73150fdbcafcf79e325b40c1f95884bbd3ab344e # Parent f8746a482459dc8cd51e958fc1278d9d532c6e78 add some test for user diff -r f8746a482459 -r 73150fdbcafc server/src/test/java/org/iri_research/renkan/test/controller/UsersAdminControllerTest.java --- a/server/src/test/java/org/iri_research/renkan/test/controller/UsersAdminControllerTest.java Wed Dec 11 10:23:05 2013 +0100 +++ b/server/src/test/java/org/iri_research/renkan/test/controller/UsersAdminControllerTest.java Wed Dec 11 11:36:08 2013 +0100 @@ -1,5 +1,6 @@ package org.iri_research.renkan.test.controller; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -7,6 +8,7 @@ import java.util.TimeZone; import java.util.UUID; +import org.apache.commons.codec.binary.Hex; import org.iri_research.renkan.models.Project; import org.iri_research.renkan.models.Space; import org.iri_research.renkan.models.User; @@ -23,16 +25,20 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.util.NestedServletException; @RunWith(SpringJUnit4ClassRunner.class) @@ -291,292 +297,198 @@ } -// @Test -// public void testSpacePostCreateBadJson() throws Exception { -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders -// .post("/admin/spaces/save"); -// post = post.param("title", "New Title"); -// post = post.param("description", "New description"); -// post = post.param("uri", "http://ldt.iri.centrepompidou.fr/new/uri"); -// post = post.param("color", "#ffffff"); -// post = post.param("binConfig", "}"); -// -// this.mvc.perform(post) -// .andExpect(MockMvcResultMatchers.status().isOk()) -// .andExpect(MockMvcResultMatchers.view().name("admin/spaceEdit")) -// .andExpect(MockMvcResultMatchers.model().hasErrors()) -// .andExpect(MockMvcResultMatchers.model().errorCount(1)) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasErrors( -// "space")) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasFieldErrors( -// "space", "binConfig")); -// -// Assert.assertEquals("Must not have one more space", SPACE_NB, -// this.spacesRepository.count()); -// -// } -// -// @Test -// public void testSpacePostUpdateAllErrors() throws Exception { -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders -// .post("/admin/spaces/save"); -// post = post.param("id", this.spacesUuids.get(0)); -// post = post.param("title", ""); -// post = post.param("description", "New description"); -// post = post.param("uri", "http://ldt.iri.centrepompidou.fr/new/uri"); -// post = post.param("color", "#ffffff"); -// post = post.param("binConfig", "{"); -// -// this.mvc.perform(post) -// .andExpect(MockMvcResultMatchers.status().isOk()) -// .andExpect(MockMvcResultMatchers.view().name("admin/spaceEdit")) -// .andExpect(MockMvcResultMatchers.model().hasErrors()) -// .andExpect(MockMvcResultMatchers.model().errorCount(2)) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasErrors( -// "space")) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasFieldErrors( -// "space", "title")) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasFieldErrors( -// "space", "binConfig")); -// -// Space sp = this.spacesRepository.findOne(this.spacesUuids.get(0)); -// -// Assert.assertNotNull("Should find space", sp); -// Assert.assertEquals("Bin config equals", "{}", sp.getBinConfig()); -// Assert.assertEquals("title equals", "test 0", sp.getTitle()); -// -// } -// -// @Test -// public void testSpacePostCreateAllErrors() throws Exception { -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders -// .post("/admin/spaces/save"); -// post = post.param("title", ""); -// post = post.param("description", "New description"); -// post = post.param("uri", "http://ldt.iri.centrepompidou.fr/new/uri"); -// post = post.param("color", "#ffffff"); -// post = post.param("binConfig", "}"); -// -// this.mvc.perform(post) -// .andExpect(MockMvcResultMatchers.status().isOk()) -// .andExpect(MockMvcResultMatchers.view().name("admin/spaceEdit")) -// .andExpect(MockMvcResultMatchers.model().hasErrors()) -// .andExpect(MockMvcResultMatchers.model().errorCount(2)) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasErrors( -// "space")) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasFieldErrors( -// "space", "title")) -// .andExpect( -// MockMvcResultMatchers.model().attributeHasFieldErrors( -// "space", "binConfig")); -// -// Assert.assertEquals("Must not have one more space", SPACE_NB, -// this.spacesRepository.count()); -// -// } -// -// @Test -// public void testDeleteSpace() throws Exception { -// -// MockHttpServletRequestBuilder get = MockMvcRequestBuilders -// .get("/admin/spaces/delete/" -// + this.spacesUuids.get(SPACE_NB - 1)); -// -// MvcResult res = this.mvc -// .perform(get) -// .andExpect(MockMvcResultMatchers.status().isOk()) -// .andExpect( -// MockMvcResultMatchers.view().name( -// "admin/spaceDeleteConfirm")) -// .andExpect( -// MockMvcResultMatchers.model().attributeExists( -// "spaceObj", "key", "salt")).andReturn(); -// -// Map model = res.getModelAndView().getModel(); -// -// Space space = (Space) model.get("spaceObj"); -// Assert.assertNotNull("Space is not null", space); -// Assert.assertEquals("Must be first space id", -// this.spacesUuids.get(SPACE_NB - 1), space.getId()); -// -// String key = (String) model.get("key"); -// Assert.assertNotNull("key is not null", key); -// -// String salt = (String) model.get("salt"); -// Assert.assertNotNull("salt is not null", salt); -// -// Assert.assertTrue("Key must be checked", space.checkKey(key, salt)); -// -// } -// -// @Test -// public void testDeleteFakeSpace() throws Exception { -// -// MockHttpServletRequestBuilder get = MockMvcRequestBuilders -// .get("/admin/spaces/delete/" + UUID.randomUUID().toString()); -// -// try { -// this.mvc.perform(get).andExpect( -// MockMvcResultMatchers.status().isNotFound()); -// } catch (NestedServletException e) { -// Assert.assertNotNull("Nested exception must not be null", -// e.getCause()); -// Assert.assertEquals( -// "Inner exception must be a HttpClientErrorException", -// HttpClientErrorException.class, e.getCause().getClass()); -// Assert.assertEquals("Exception error status must be not found", -// HttpStatus.NOT_FOUND, -// ((HttpClientErrorException) e.getCause()).getStatusCode()); -// } -// -// } -// -// @Test -// public void testDeleteSpaceProject() throws Exception { -// -// MockHttpServletRequestBuilder get = MockMvcRequestBuilders -// .get("/admin/spaces/delete/" + this.spacesUuids.get(0)); -// -// try { -// this.mvc.perform(get).andExpect( -// MockMvcResultMatchers.status().isBadRequest()); -// } catch (NestedServletException e) { -// Assert.assertNotNull("Nested exception must not be null", -// e.getCause()); -// Assert.assertEquals( -// "Inner exception must be a HttpClientErrorException", -// HttpClientErrorException.class, e.getCause().getClass()); -// Assert.assertEquals("Exception error status must be not found", -// HttpStatus.BAD_REQUEST, -// ((HttpClientErrorException) e.getCause()).getStatusCode()); -// } -// -// } -// -// @Test -// public void testDoDeleteSpaceNoKey() throws Exception { -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders -// .post("/admin/spaces/delete/" -// + this.spacesUuids.get(SPACE_NB - 1)); -// -// try { -// this.mvc.perform(post).andExpect( -// MockMvcResultMatchers.status().isBadRequest()); -// } catch (NestedServletException e) { -// Assert.assertNotNull("Nested exception must not be null", -// e.getCause()); -// Assert.assertEquals( -// "Inner exception must be a HttpClientErrorException", -// HttpClientErrorException.class, e.getCause().getClass()); -// Assert.assertEquals("Exception error status must be not found", -// HttpStatus.BAD_REQUEST, -// ((HttpClientErrorException) e.getCause()).getStatusCode()); -// } -// -// Assert.assertEquals("Must have same nb of space", SPACE_NB, -// this.spacesRepository.count()); -// -// } -// -// @Test -// public void testDoDeleteSpace() throws Exception { -// -// Space space = this.spacesList.get(this.spacesUuids.get(SPACE_NB - 1)); -// -// SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); -// rand.setSeed(System.currentTimeMillis()); -// byte[] rawSalt = new byte[50]; -// rand.nextBytes(rawSalt); -// String salt = Hex.encodeHexString(rawSalt); -// String key = space.getKey(salt); -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String -// .format("/admin/spaces/delete/%s?key=%s&salt=%s", -// this.spacesUuids.get(SPACE_NB - 1), key, salt)); -// -// this.mvc.perform(post) -// .andExpect(MockMvcResultMatchers.status().isSeeOther()) -// .andExpect(MockMvcResultMatchers.redirectedUrl("/admin/spaces")); -// -// Assert.assertEquals("Must have one less space", SPACE_NB - 1, -// this.spacesRepository.count()); -// -// space = this.spacesRepository.findOne(this.spacesUuids -// .get(SPACE_NB - 1)); -// -// Assert.assertNull("Space " + this.spacesUuids.get(SPACE_NB - 1) -// + " deleted", space); -// -// } -// -// @Test -// public void testDoDeleteSpaceFake() throws Exception { -// -// Space space = this.spacesList.get(this.spacesUuids.get(SPACE_NB - 1)); -// -// SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); -// rand.setSeed(System.currentTimeMillis()); -// byte[] rawSalt = new byte[50]; -// rand.nextBytes(rawSalt); -// String salt = Hex.encodeHexString(rawSalt); -// String key = space.getKey(salt); -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String -// .format("/admin/spaces/delete/%s?key=%s&salt=%s", -// UUID.randomUUID(), key, salt)); -// -// this.mvc.perform(post) -// .andExpect(MockMvcResultMatchers.status().isSeeOther()) -// .andExpect(MockMvcResultMatchers.redirectedUrl("/admin/spaces")); -// -// Assert.assertEquals("Must have the same nb of space", SPACE_NB, -// this.spacesRepository.count()); -// -// } -// -// @Test -// public void testDoDeleteSpaceProject() throws Exception { -// -// Space space = this.spacesList.get(this.spacesUuids.get(0)); -// -// SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); -// rand.setSeed(System.currentTimeMillis()); -// byte[] rawSalt = new byte[50]; -// rand.nextBytes(rawSalt); -// String salt = Hex.encodeHexString(rawSalt); -// String key = space.getKey(salt); -// -// MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String -// .format("/admin/spaces/delete/%s?key=%s&salt=%s", -// this.spacesUuids.get(0), key, salt)); -// -// try { -// this.mvc.perform(post).andExpect( -// MockMvcResultMatchers.status().isBadRequest()); -// } catch (NestedServletException e) { -// Assert.assertNotNull("Nested exception must not be null", -// e.getCause()); -// Assert.assertEquals( -// "Inner exception must be a HttpClientErrorException", -// HttpClientErrorException.class, e.getCause().getClass()); -// Assert.assertEquals("Exception error status must be not found", -// HttpStatus.BAD_REQUEST, -// ((HttpClientErrorException) e.getCause()).getStatusCode()); -// } -// -// Assert.assertEquals("Must have the same nb of space", SPACE_NB, -// this.spacesRepository.count()); -// -// } + @Test + public void testDeleteUser() throws Exception { + + MockHttpServletRequestBuilder get = MockMvcRequestBuilders + .get("/admin/users/delete/" + + this.usersUuids.get(USER_NB - 1)); + + MvcResult res = this.mvc + .perform(get) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect( + MockMvcResultMatchers.view().name( + "admin/userDeleteConfirm")) + .andExpect( + MockMvcResultMatchers.model().attributeExists( + "userObj", "key", "salt")).andReturn(); + + Map model = res.getModelAndView().getModel(); + + User user = (User) model.get("userObj"); + Assert.assertNotNull("User is not null", user); + Assert.assertEquals("Must be first user id", + this.usersUuids.get(USER_NB - 1), user.getId()); + + String key = (String) model.get("key"); + Assert.assertNotNull("key is not null", key); + + String salt = (String) model.get("salt"); + Assert.assertNotNull("salt is not null", salt); + + Assert.assertTrue("Key must be checked", user.checkKey(key, salt)); + + } + + @Test + public void testDeleteFakeUser() throws Exception { + + MockHttpServletRequestBuilder get = MockMvcRequestBuilders + .get("/admin/users/delete/" + UUID.randomUUID().toString()); + + try { + this.mvc.perform(get).andExpect( + MockMvcResultMatchers.status().isNotFound()); + } catch (NestedServletException e) { + Assert.assertNotNull("Nested exception must not be null", + e.getCause()); + Assert.assertEquals( + "Inner exception must be a HttpClientErrorException", + HttpClientErrorException.class, e.getCause().getClass()); + Assert.assertEquals("Exception error status must be not found", + HttpStatus.NOT_FOUND, + ((HttpClientErrorException) e.getCause()).getStatusCode()); + } + + } + + @Test + public void testDeleteUserProject() throws Exception { + + MockHttpServletRequestBuilder get = MockMvcRequestBuilders + .get("/admin/users/delete/" + this.usersUuids.get(0)); + + try { + this.mvc.perform(get).andExpect( + MockMvcResultMatchers.status().isBadRequest()); + } catch (NestedServletException e) { + Assert.assertNotNull("Nested exception must not be null", + e.getCause()); + Assert.assertEquals( + "Inner exception must be a HttpClientErrorException", + HttpClientErrorException.class, e.getCause().getClass()); + Assert.assertEquals("Exception error status must be not found", + HttpStatus.BAD_REQUEST, + ((HttpClientErrorException) e.getCause()).getStatusCode()); + } + + } + + @Test + public void testDoDeleteUserNoKey() throws Exception { + MockHttpServletRequestBuilder post = MockMvcRequestBuilders + .post("/admin/users/delete/" + + this.usersUuids.get(USER_NB - 1)); + + try { + this.mvc.perform(post).andExpect( + MockMvcResultMatchers.status().isBadRequest()); + } catch (NestedServletException e) { + Assert.assertNotNull("Nested exception must not be null", + e.getCause()); + Assert.assertEquals( + "Inner exception must be a HttpClientErrorException", + HttpClientErrorException.class, e.getCause().getClass()); + Assert.assertEquals("Exception error status must be not found", + HttpStatus.BAD_REQUEST, + ((HttpClientErrorException) e.getCause()).getStatusCode()); + } + + Assert.assertEquals("Must have same nb of user", USER_NB, + this.usersRepository.count()); + + } + + @Test + public void testDoDeleteUser() throws Exception { + + User user = this.usersList.get(this.usersUuids.get(USER_NB - 1)); + + SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); + rand.setSeed(System.currentTimeMillis()); + byte[] rawSalt = new byte[50]; + rand.nextBytes(rawSalt); + String salt = Hex.encodeHexString(rawSalt); + String key = user.getKey(salt); + + MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String + .format("/admin/users/delete/%s?key=%s&salt=%s", + this.usersUuids.get(USER_NB - 1), key, salt)); + + this.mvc.perform(post) + .andExpect(MockMvcResultMatchers.status().isSeeOther()) + .andExpect(MockMvcResultMatchers.redirectedUrl("/admin/users")); + + Assert.assertEquals("Must have one less user", USER_NB - 1, + this.usersRepository.count()); + + user = this.usersRepository.findOne(this.usersUuids + .get(USER_NB - 1)); + + Assert.assertNull("User " + this.usersUuids.get(USER_NB - 1) + + " deleted", user); + + } + + @Test + public void testDoDeleteSpaceFake() throws Exception { + + User user = this.usersList.get(this.usersUuids.get(USER_NB - 1)); + + SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); + rand.setSeed(System.currentTimeMillis()); + byte[] rawSalt = new byte[50]; + rand.nextBytes(rawSalt); + String salt = Hex.encodeHexString(rawSalt); + String key = user.getKey(salt); + + MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String + .format("/admin/users/delete/%s?key=%s&salt=%s", + UUID.randomUUID(), key, salt)); + + this.mvc.perform(post) + .andExpect(MockMvcResultMatchers.status().isSeeOther()) + .andExpect(MockMvcResultMatchers.redirectedUrl("/admin/users")); + + Assert.assertEquals("Must have the same nb of user", USER_NB, + this.usersRepository.count()); + + } + + @Test + public void testDoDeleteUserProject() throws Exception { + + User user = this.usersList.get(this.usersUuids.get(0)); + + SecureRandom rand = SecureRandom.getInstance("SHA1PRNG"); + rand.setSeed(System.currentTimeMillis()); + byte[] rawSalt = new byte[50]; + rand.nextBytes(rawSalt); + String salt = Hex.encodeHexString(rawSalt); + String key = user.getKey(salt); + + MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post(String + .format("/admin/users/delete/%s?key=%s&salt=%s", + this.usersUuids.get(0), key, salt)); + + try { + this.mvc.perform(post).andExpect( + MockMvcResultMatchers.status().isBadRequest()); + } catch (NestedServletException e) { + Assert.assertNotNull("Nested exception must not be null", + e.getCause()); + Assert.assertEquals( + "Inner exception must be a HttpClientErrorException", + HttpClientErrorException.class, e.getCause().getClass()); + Assert.assertEquals("Exception error status must be not found", + HttpStatus.BAD_REQUEST, + ((HttpClientErrorException) e.getCause()).getStatusCode()); + } + + Assert.assertEquals("Must have the same nb of user", USER_NB, + this.usersRepository.count()); + + } }