41 lines
1.4 KiB
C#
41 lines
1.4 KiB
C#
using Omika.Core.Contracts.Security;
|
|
|
|
namespace Omika.Tests.Contracts.Security;
|
|
|
|
/// <summary>
|
|
/// Tests de sécurité du contrat <see cref="LoginRequest"/> : le mot de passe
|
|
/// ne doit jamais être exposé par <see cref="LoginRequest.ToString"/>.
|
|
/// </summary>
|
|
public class LoginRequestTests
|
|
{
|
|
[Fact]
|
|
public void ToString_NeverExposesPassword()
|
|
{
|
|
const string password = "MotDePasseUltraSecret123!";
|
|
var request = new LoginRequest { Login = "jean.dupont", Password = password };
|
|
|
|
string text = request.ToString();
|
|
|
|
Assert.DoesNotContain(password, text, StringComparison.Ordinal);
|
|
Assert.Contains(request.Login, text, StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToString_IndicatesWhetherPasswordIsPresent()
|
|
{
|
|
var withPassword = new LoginRequest { Login = "jean.dupont", Password = "secret" };
|
|
var withoutPassword = new LoginRequest { Login = "jean.dupont", Password = null };
|
|
|
|
Assert.Contains("HasPassword = True", withPassword.ToString(), StringComparison.Ordinal);
|
|
Assert.Contains("HasPassword = False", withoutPassword.ToString(), StringComparison.Ordinal);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToString_EmptyPasswordIsTreatedAsAbsent()
|
|
{
|
|
var request = new LoginRequest { Login = "jean.dupont", Password = string.Empty };
|
|
|
|
Assert.Contains("HasPassword = False", request.ToString(), StringComparison.Ordinal);
|
|
}
|
|
}
|