Additional AI test cases
This commit is contained in:
65
Homework.Tests/AuthControllerTests.cs
Normal file
65
Homework.Tests/AuthControllerTests.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Xunit;
|
||||
|
||||
namespace Homework.Tests
|
||||
{
|
||||
public class FakeLogger : Logger.ILogger
|
||||
{
|
||||
public readonly List<(Logger.LogLevel level, string message)> Messages = new();
|
||||
|
||||
public void Trace(string message) => Log(Logger.LogLevel.Trace, message);
|
||||
public void Debug(string message) => Log(Logger.LogLevel.Debug, message);
|
||||
public void Info(string message) => Log(Logger.LogLevel.Info, message);
|
||||
public void Warning(string message) => Log(Logger.LogLevel.Warning, message);
|
||||
public void Error(string message) => Log(Logger.LogLevel.Error, message);
|
||||
public void Fatal(string message) => Log(Logger.LogLevel.Fatal, message);
|
||||
|
||||
public void Log(Logger.LogLevel level, string message)
|
||||
{
|
||||
Messages.Add((level, message));
|
||||
}
|
||||
}
|
||||
|
||||
public class AuthControllerTests
|
||||
{
|
||||
[Fact]
|
||||
public void Login_ReturnsOkWithToken()
|
||||
{
|
||||
var logger = new FakeLogger();
|
||||
var jwtOptions = Options.Create(new JwtSettings
|
||||
{
|
||||
Key = "test-secret-key-very-long-and-secure",
|
||||
Issuer = "homework",
|
||||
Audience = "homework",
|
||||
ExpireMinutes = 60
|
||||
});
|
||||
|
||||
var jwtService = new JwtService(jwtOptions);
|
||||
var controller = new AuthController(jwtService, logger);
|
||||
|
||||
var request = new LoginRequest
|
||||
{
|
||||
Email = "user@example.com",
|
||||
Password = "password123"
|
||||
};
|
||||
|
||||
var result = controller.Login(request);
|
||||
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
|
||||
var okResult = (OkObjectResult)result;
|
||||
Assert.NotNull(okResult.Value);
|
||||
|
||||
var tokenProperty = okResult.Value.GetType().GetProperty("token");
|
||||
Assert.NotNull(tokenProperty);
|
||||
|
||||
var tokenValue = tokenProperty.GetValue(okResult.Value) as string;
|
||||
Assert.False(string.IsNullOrWhiteSpace(tokenValue));
|
||||
Assert.Contains("ey", tokenValue); // JWT tokens start with ey
|
||||
|
||||
Assert.Contains(logger.Messages, x => x.level == Logger.LogLevel.Info && x.message.Contains("Login attempt"));
|
||||
Assert.Contains(logger.Messages, x => x.level == Logger.LogLevel.Info && x.message.Contains("successfully logged in"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user