diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index a58dcb6..6247613 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -150,6 +150,8 @@ namespace API.Controllers [HttpPost] [ProducesResponseType(typeof(UserDto), 201)] [ProducesResponseType(typeof(string), 400)] + [ProducesResponseType(typeof(string), 409)] + [ProducesResponseType(typeof(string), 410)] public IActionResult CreateUser([FromBody] UserDto dto) { if (dto.Username == null || dto.Password == null || dto.Email == null) @@ -179,9 +181,10 @@ namespace API.Controllers [ProducesResponseType(typeof(UserDto), 200)] [ProducesResponseType(typeof(string), 400)] [ProducesResponseType(typeof(string), 404)] - public IActionResult UpdateUser(int id, [FromBody] UserDto UserDto) + [ProducesResponseType(typeof(string), 409)] + public IActionResult UpdateUser(int id, [FromBody] UserDto userDto) { - if (id != UserDto.Id) + if (id != userDto.Id) { logger.LogError("[ERREUR] Problème ID - La mise à jour de l'utilisateur avec l'id {id} a échouée.", id); return BadRequest(); @@ -194,15 +197,17 @@ namespace API.Controllers return BadRequest(); } - if (UserDto != null) + if (userDto.Username == userService.GetUserById(id).Username && !userService.IsEmailTaken(userDto.Email) + || (userDto.Email == userService.GetUserById(id).Email && + !userService.IsUsernameTaken(userDto.Username)) + || (!userService.IsEmailTaken(userDto.Email) && !userService.IsUsernameTaken(userDto.Username))) { logger.LogInformation("[INFORMATION] La mise à jour de l'utilisateur avec l'id {id} a été effectuée", id); - return Ok(userService.UpdateUser(id, UserDto)); + return Ok(userService.UpdateUser(id, userDto)); } - - logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'id {id}.", id); - return NotFound(); + logger.LogError("[ERREUR] Email ou nom d'utilisateur déjà utilisé"); + return StatusCode(409,"Email ou nom d'utilisateur déjà utilisé"); } [HttpPut("user/promote/{id:int}")] diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs index 6109618..c09dcc4 100644 --- a/API_SQLuedo/TestAPI/UserUnitTest.cs +++ b/API_SQLuedo/TestAPI/UserUnitTest.cs @@ -411,6 +411,106 @@ public class UserUnitTest Assert.Equal(400, bdObjectResult.StatusCode); } } + [Fact] + public void UpdateUserFailWithExistingUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "heudfk@hdye.com", true))) + .Returns(new UserDto("Useruser", "Passssss", "heudfk@hdye.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "heudfk@hdye.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserFailWithExistingEmail() + { + _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false); + _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "adressemail@gmail.com", true))) + .Returns(new UserDto("Test1234", "Passssss", "adressemail@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "adressemail@gmail.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserFailWithExistingEmailAndExistingUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Useruser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("adressemail@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Useruser", "Passssss", "adressemail@gmail.com", true))) + .Returns(new UserDto("Useruser", "Passssss", "adressemail@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Useruser", "Passssss", "adressemail@gmail.com", true)); + + if (userResult is StatusCodeResult statusCodeResult) + { + Assert.Equal(409, statusCodeResult.StatusCode); + } + } + [Fact] + public void UpdateUserSucessWithSameEmail() + { + _userService.Setup(x => x.IsUsernameTaken("Test1234")).Returns(false); + _userService.Setup(x => x.IsEmailTaken("deuxadresse@gmail.com")).Returns(true); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "deuxadresse@gmail.com", true))) + .Returns(new UserDto("Test1234", "Passssss", "deuxadresse@gmail.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Test1234", "Passssss", "deuxadresse@gmail.com", true)); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.Equal("Test1234", valeur.Username); + Assert.Equal("Passssss", valeur.Password); + Assert.Equal("deuxadresse@gmail.com", valeur.Email); + Assert.True(valeur.IsAdmin); + } + } + [Fact] + public void UpdateUserSucessWithSameUsername() + { + _userService.Setup(x => x.IsUsernameTaken("Leuser")).Returns(true); + _userService.Setup(x => x.IsEmailTaken("heudfk@hdye.com")).Returns(false); + _userService.Setup(x => x.GetUserById(1)).Returns(new UserDto(1, "Leuser", "motdepasse", "deuxadresse@gmail.com", true)); + _userService.Setup(x => x.UpdateUser(1, new UserDto(1, "Test1234", "Passssss", "heudfk@hdye.com", true))) + .Returns(new UserDto("Leuser", "Passssss", "heudfk@hdye.com", true)); + + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.UpdateUser(1, new UserDto(1,"Leuser", "Passssss", "heudfk@hdye.com", true)); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.Equal("Leuser", valeur.Username); + Assert.Equal("Passssss", valeur.Password); + Assert.Equal("heudfk@hdye.com", valeur.Email); + Assert.True(valeur.IsAdmin); + } + } [Fact]