diff --git a/src/main/java/project/services/UserService.java b/src/main/java/project/services/UserService.java index 36f07a0..4cf2b11 100644 --- a/src/main/java/project/services/UserService.java +++ b/src/main/java/project/services/UserService.java @@ -13,21 +13,21 @@ public class UserService { private JdbcTemplate jdbcTemplate; - + public UserService(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void create(UserModel user) { final String sql = - "INSERT INTO users (email, login, password) VALUES (?, ?, crypt(?, gen_salt('bf')));"; + "INSERT INTO users (email, login, password) VALUES (?, ?, crypt(?, gen_salt('bf')));"; jdbcTemplate.update(sql, user.getMail(), user.getLogin(), user.getPassword()); } public UserModel signin(UserModel user) { final String sql = - "SELECT email, login, score, id FROM users WHERE email = ? AND password = crypt(?, password);"; + "SELECT email, login, score, id FROM users WHERE email = ? AND password = crypt(?, password);"; return jdbcTemplate.queryForObject(sql, UserModel::getUser, user.getMail(), user.getPassword()); } @@ -86,8 +86,8 @@ public Integer updateScore(String email) { return jdbcTemplate.queryForObject(sql, Integer.class, email); } - public void incrementScoreById(Long id) { - final String sql = "UPDATE users SET score = score + 1 WHERE id = ?"; - jdbcTemplate.update(sql, id); + public Integer incrementScoreById(Long id) { + final String sql = "UPDATE users SET score = score + 1 WHERE id = ? RETURNING score"; + return jdbcTemplate.queryForObject(sql, Integer.class, id); } } diff --git a/src/test/java/project/controllers/UserControllerTest.java b/src/test/java/project/controllers/UserControllerTest.java index f9c1559..24a17ca 100644 --- a/src/test/java/project/controllers/UserControllerTest.java +++ b/src/test/java/project/controllers/UserControllerTest.java @@ -13,10 +13,8 @@ import org.springframework.transaction.annotation.Transactional; import project.models.UserModel; -import javax.servlet.http.HttpSession; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -69,4 +67,64 @@ public void testLogout () { usersController.logout(session); assertTrue(session.isInvalid()); } + + + @Test + @DisplayName("Get user") + public void getUser() { + usersController.register(user, session); + usersController.authorize(user, session); + assertEquals(HttpStatus.OK, usersController.getUser(session).getStatusCode()); + } + + @Test + @DisplayName("Get user when unauthorised") + public void getUserWhenUnauthorised() { + assertEquals(HttpStatus.METHOD_NOT_ALLOWED, usersController.getUser(session).getStatusCode()); + } + + @Test + @DisplayName("Get leaders") + public void getLeaders() { + final ResponseEntity response = usersController.loadLeaders(0, 10); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + @DisplayName("Edit user") + public void editUser() { + usersController.register(user, session); + usersController.authorize(user, session); + user.setLogin(user.getLogin() + 1); + final ResponseEntity response = usersController.changeUserInfo(user, session); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + @DisplayName("Try edit user when unauthorised") + public void editUserUnauthorised() { + usersController.register(user, session); + usersController.logout(session); + + final MockHttpSession newSession = new MockHttpSession(); + user.setLogin(user.getLogin() + 1); + final ResponseEntity response = usersController.changeUserInfo(user, newSession); + assertEquals(HttpStatus.METHOD_NOT_ALLOWED, response.getStatusCode()); + } + + + @Test + @DisplayName("Try edit user mail for already existing") + public void editUserMail() { + usersController.register(user, session); + + final UserModel secondUser = new UserModel("tester1@mail.ru","tester1", 0, "12345qwerty"); + final MockHttpSession secondSession = new MockHttpSession(); + usersController.register(secondUser, secondSession); + + user.setMail("tester1@mail.ru"); + + final ResponseEntity response = usersController.changeUserInfo(user, session); + assertEquals(HttpStatus.CONFLICT, response.getStatusCode()); + } } diff --git a/src/test/java/project/services/UserServiceTest.java b/src/test/java/project/services/UserServiceTest.java index abc0a86..3967d3f 100644 --- a/src/test/java/project/services/UserServiceTest.java +++ b/src/test/java/project/services/UserServiceTest.java @@ -55,7 +55,7 @@ public void testCreate() { public void insertWithSameMail() { userService.create(user); final UserModel user2 = - new UserModel(user.getMail(), changeString(user.getLogin()), user.getScore(), user.getPassword()); + new UserModel(user.getMail(), changeString(user.getLogin()), user.getScore(), user.getPassword()); final Executable getSameUser = () -> userService.create(user2); assertThrows(DuplicateKeyException.class, getSameUser); } @@ -65,8 +65,8 @@ public void insertWithSameMail() { public void insertWithSameLogin() { userService.create(user); final UserModel user2 = - new UserModel(changeString(user.getMail()), user.getLogin(), user.getScore(), user.getPassword()); - final Executable sameLogin = () ->userService.create(user2); + new UserModel(changeString(user.getMail()), user.getLogin(), user.getScore(), user.getPassword()); + final Executable sameLogin = () -> userService.create(user2); assertThrows(DuplicateKeyException.class, sameLogin); } @@ -90,7 +90,7 @@ public void testSignIn() { public void testSignInNonexistent() { final UserModel newUser = new UserModel("default", "default", 2); final Executable signInFunc = () -> userService.signin(newUser); - assertThrows(EmptyResultDataAccessException.class, signInFunc); + assertThrows(EmptyResultDataAccessException.class, signInFunc); } @Test @@ -100,7 +100,6 @@ public void editUserMail() { final String oldMail = user.getMail(); final String newMail = changeString(user.getMail()); final UserModel newUser = new UserModel(newMail, user.getLogin(), user.getScore()); - System.out.println('3'); assertEquals(newUser, userService.edit(newUser, oldMail)); } @@ -128,8 +127,8 @@ public void editUserPassword() { @DisplayName("Showing leaders") public void getLeasersTest() { final UserModel newUser = - new UserModel(changeString(user.getMail()), changeString(user.getLogin()), - user.getScore() + 1, changeString(user.getPassword())); + new UserModel(changeString(user.getMail()), changeString(user.getLogin()), + user.getScore() + 1, changeString(user.getPassword())); userService.create(user); userService.create(newUser); @@ -148,4 +147,39 @@ public void getLeasersTest() { i++; } } -} \ No newline at end of file + + @Test + @DisplayName("Increment score by mail") + public void incrementScoreByMail() { + userService.create(user); + final Long userId = userService.getUserByMail(user.getMail()).getId(); + final Integer newScore = user.getScore() + 1; + assertEquals(newScore, userService.incrementScoreById(userId)); + } + + @Test + @DisplayName("Increment score by id") + public void incrementScoreById() { + userService.create(user); + final Integer newScore = user.getScore() + 1; + assertEquals(newScore, userService.updateScore(user.getMail())); + } + + @Test + @DisplayName("Increment score nonexistance user") + public void incrementScoreNonExistanceUser() { + final Executable error = () -> userService.updateScore(changeString(user.getMail())); + assertThrows(DataAccessException.class, error); + } + + @Test + @DisplayName("Editing all user info") + public void editUserInfo() { + userService.create(user); + final String newPassword = changeString(user.getPassword()); + final String newLogin = changeString(user.getLogin()); + final String newMail = changeString(user.getMail()); + final UserModel newUser = new UserModel(newMail, newLogin, user.getScore(), newPassword); + assertEquals(newUser, userService.edit(newUser, user.getMail())); + } +}