using Manager.Interfaces.Models; using Manager.Services; using ManagerService.Data; using ManagerService.Helpers; using ManagerService.Service.Controllers; using ManagerService.Service.Services; using ManagerService.Tests.Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Xunit; namespace ManagerService.Tests.Controllers { public class AuthenticationControllerTests { private static AuthenticationController BuildController(MyInfoMateDbContext db) { var settings = Options.Create(new TokensSettings { Secret = "test-secret-key-32-chars-minimum!!", AccessTokenExpiration = 30 }); var profileLogic = new ProfileLogic(NullLogger.Instance); var tokensService = new TokensService( NullLogger.Instance, settings, profileLogic, db); return new AuthenticationController( NullLogger.Instance, tokensService, db); } // Note: en mode DEBUG, email est toujours surchargé en "test@email.be" // et password en "kljqsdkljqsd". [Fact] public void Authenticate_UserNotFound_ReturnsProblem() { using var db = DbContextFactory.Create(); // Aucun utilisateur "test@email.be" en base var result = BuildController(db).AuthenticateWithJson( new ManagerService.DTOs.LoginDTO { email = "anyone@test.be", password = "any" }); // KeyNotFoundException → catch(Exception) → Problem (500) var obj = Assert.IsType(result); Assert.Equal(500, obj.StatusCode); } [Fact] public void Authenticate_WrongPassword_Returns401() { using var db = DbContextFactory.Create(); // Mot de passe incorrect en base (hash invalide → PasswordUtils.Compare lance une exception // qui n'est pas UnauthorizedAccessException → retourne Problem 500). // On met un utilisateur avec un hash valide pour un autre mot de passe. var profileLogic = new ProfileLogic(NullLogger.Instance); db.Users.Add(new User { Id = "u1", Email = "test@email.be", Password = profileLogic.HashPassword("differentpassword"), LastName = "Test", Token = "t1", InstanceId = "inst-test" }); db.SaveChanges(); var result = BuildController(db).AuthenticateWithJson( new ManagerService.DTOs.LoginDTO { email = "test@email.be", password = "kljqsdkljqsd" }); // UnauthorizedAccessException → Unauthorized (401) Assert.IsType(result); } } }