diff --git a/API_SQLuedo/API/Controllers/UserController.cs b/API_SQLuedo/API/Controllers/UserController.cs index fb57815..dc05be0 100644 --- a/API_SQLuedo/API/Controllers/UserController.cs +++ b/API_SQLuedo/API/Controllers/UserController.cs @@ -62,6 +62,22 @@ namespace API.Controllers return NotFound(); } } + [HttpGet("user/email/{email}")] + [ProducesResponseType(typeof(UserDto), 200)] + [ProducesResponseType(typeof(string), 404)] + public IActionResult GetByEmail(string email) + { + try + { + logger.LogInformation("[INFORMATION] Utilisateur avec l'username {email} a été trouvé.", email); + return Ok(userService.GetUserByEmail(email)); + } + catch (ArgumentException) + { + logger.LogError("[ERREUR] Aucun utilisateur trouvé avec l'username {email}.", email); + return NotFound(); + } + } [HttpDelete("user/{id:int}")] [ProducesResponseType(typeof(UserDto), 200)] diff --git a/API_SQLuedo/API/Service/UserDataServiceAPI.cs b/API_SQLuedo/API/Service/UserDataServiceAPI.cs index 72bca16..4100f76 100644 --- a/API_SQLuedo/API/Service/UserDataServiceAPI.cs +++ b/API_SQLuedo/API/Service/UserDataServiceAPI.cs @@ -17,6 +17,7 @@ public class UserDataServiceApi(IUserService userService) : IUserSer public UserDto GetUserById(int id) => userService.GetUserById(id).FromEntityToDto(); public UserDto GetUserByUsername(string username) => userService.GetUserByUsername(username).FromEntityToDto(); + public UserDto GetUserByEmail(string email) => userService.GetUserByEmail(email).FromEntityToDto(); public bool DeleteUser(int id) => userService.DeleteUser(id); diff --git a/API_SQLuedo/DbDataManager/Service/UserDataService.cs b/API_SQLuedo/DbDataManager/Service/UserDataService.cs index ebb3ba5..e9a175a 100644 --- a/API_SQLuedo/DbDataManager/Service/UserDataService.cs +++ b/API_SQLuedo/DbDataManager/Service/UserDataService.cs @@ -37,6 +37,17 @@ public class UserDataService : IUserService return userEntity; } + public UserEntity GetUserByEmail(string email) + { + var userEntity = DbContext.Users.FirstOrDefault(u => u.Email == email); + if (userEntity == null) + { + throw new ArgumentException("Impossible de trouver l'utilisateur", nameof(email)); + } + + return userEntity; + } + public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria) { if (page <= 0) diff --git a/API_SQLuedo/Shared/IUserService.cs b/API_SQLuedo/Shared/IUserService.cs index d1d458a..f052a84 100644 --- a/API_SQLuedo/Shared/IUserService.cs +++ b/API_SQLuedo/Shared/IUserService.cs @@ -7,6 +7,7 @@ namespace Shared public IEnumerable GetUsers(int page, int number, UserOrderCriteria orderCriteria); public TUser GetUserById(int id); public TUser GetUserByUsername(string username); + public TUser GetUserByEmail(string email); public bool DeleteUser(int id); public TUser UpdateUser(int id, TUser user); public TUser CreateUser(string username, string password, string email, bool isAdmin); diff --git a/API_SQLuedo/TestAPI/UserUnitTest.cs b/API_SQLuedo/TestAPI/UserUnitTest.cs index 1dc5b4e..027e74a 100644 --- a/API_SQLuedo/TestAPI/UserUnitTest.cs +++ b/API_SQLuedo/TestAPI/UserUnitTest.cs @@ -117,6 +117,28 @@ public class UserUnitTest Assert.True(valeur.IsAdmin); } } + [Fact] + public void GetUserEmailSuccess() + { + var userList = GetUsersData(); + _userService.Setup(x => x.GetUserByEmail("adressemail@gmail.com")) + .Returns(userList[0]); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.GetByEmail("adressemail@gmail.com"); + if (userResult is OkObjectResult okObjectResult) + { + UserDto valeur = okObjectResult.Value as UserDto; + + Assert.NotNull(valeur); + Assert.IsType(valeur); + Assert.Contains(valeur, userList); + Assert.Equal("adressemail@gmail.com", valeur.Email); + Assert.Equal("Useruser", valeur.Username); + Assert.Equal("motdepasse", valeur.Password); + Assert.True(valeur.IsAdmin); + } + } [Fact] public void GetUserUsernameFail() @@ -138,6 +160,26 @@ public class UserUnitTest Assert.False(userList == valeur); } } + [Fact] + public void GetUserEmailFail() + { + var userList = GetUsersData(); + _userService.Setup(x => x.GetUserByEmail("adressemail@gmail.com")) + .Returns(userList[0]); + var usersController = new UsersController(new NullLogger(), _userService.Object); + + var userResult = usersController.GetByEmail("GYIIieihhh"); + + if (userResult is NotFoundObjectResult nfObjectResult) + { + var valeur = nfObjectResult.Value; + + Assert.NotNull(valeur); + Assert.IsNotType(valeur); + Assert.DoesNotContain(valeur, userList); + Assert.False(userList == valeur); + } + } [Fact] public void DeleteUserSuccess() diff --git a/API_SQLuedo/TestEF/Service/TestUserDataService.cs b/API_SQLuedo/TestEF/Service/TestUserDataService.cs index 040f600..c998b72 100644 --- a/API_SQLuedo/TestEF/Service/TestUserDataService.cs +++ b/API_SQLuedo/TestEF/Service/TestUserDataService.cs @@ -54,6 +54,15 @@ public class TestUserDataService var result = _userDataService.GetUserByUsername("Test1"); Assert.Equal(1, result.Id); } + [Fact] + public void GetUserByEmail_ReturnsCorrectUser() + { + _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example@email.com", Password = "password", IsAdmin = true }); + _dbContext.Users.Add(new UserEntity() { Id = 2, Username = "Test2", Email = "example@email.com", Password = "password", IsAdmin = false }); + _dbContext.SaveChanges(); + var result = _userDataService.GetUserByEmail("example@email.com"); + Assert.Equal(1, result.Id); + } [Fact] public void CreateUser_AddsNewUser() @@ -127,6 +136,15 @@ public class TestUserDataService Assert.Throws(() => _userDataService.GetUserByUsername("Test2")); } + + [Fact] + public void GetUserByEmail_WithoutUsername_ThrowsException() + { + _dbContext.Users.Add(new UserEntity() { Id = 1, Username = "Test1", Email = "example@email.com", Password = "password", IsAdmin = true }); + _dbContext.SaveChanges(); + + Assert.Throws(() => _userDataService.GetUserByEmail("test@test")); + } [Fact] public void DeleteUser_WithoutId_ReturnsFalse()