using SIGCM2.Infrastructure.Security; namespace SIGCM2.Application.Tests.Infrastructure; public class BcryptPasswordHasherTests { private readonly BcryptPasswordHasher _hasher = new(); // The seed hash for '@Diego550@' generated at cost 12 private const string SeedHash = "$2a$12$rmq6tlSAQ8WXhR2CwLCSeuwCJKz/.8Eab95UQCUNfwe4dokeOqMcW"; // Scenario: correct password verifies against seed hash [Fact] public void Verify_CorrectPassword_ReturnsTrue() { var result = _hasher.Verify("@Diego550@", SeedHash); Assert.True(result); } // Triangulation: wrong password does not verify [Fact] public void Verify_WrongPassword_ReturnsFalse() { var result = _hasher.Verify("WrongPass1", SeedHash); Assert.False(result); } // Hash + Verify round-trip: hash a new password and verify it [Fact] public void Hash_ThenVerify_ReturnsTrue() { var plain = "TestPassword123!"; var hash = _hasher.Hash(plain); Assert.StartsWith("$2a$", hash); // BCrypt format Assert.True(_hasher.Verify(plain, hash)); } // Triangulation: verification of different password against generated hash fails [Fact] public void Hash_ThenVerifyWrong_ReturnsFalse() { var hash = _hasher.Hash("OriginalPassword1!"); Assert.False(_hasher.Verify("DifferentPassword1!", hash)); } }