Implemented HopFrame.Web tests

This commit is contained in:
2024-12-10 16:30:46 +01:00
parent a4d1d3227b
commit 4d91ce1819
7 changed files with 503 additions and 8 deletions

View File

@@ -0,0 +1,94 @@
using System.Security.Claims;
using HopFrame.Database.Models;
using HopFrame.Database.Repositories;
using HopFrame.Security.Claims;
using HopFrame.Web.Services;
using Microsoft.AspNetCore.Http;
using Moq;
namespace HopFrame.Web.Tests;
public class AuthMiddlewareTests {
private readonly RequestDelegate _delegate = _ => Task.CompletedTask;
public AuthMiddleware SetupEnvironment(bool isLoggedIn = true, Token newToken = null) {
var auth = new Mock<IAuthService>();
auth
.Setup(a => a.IsLoggedIn())
.ReturnsAsync(isLoggedIn);
auth
.Setup(a => a.RefreshLogin())
.ReturnsAsync(newToken);
var perms = new Mock<IPermissionRepository>();
perms
.Setup(p => p.GetFullPermissions(It.Is<User>(u => newToken.Owner.Id == u.Id)))
.ReturnsAsync(CreateDummyUser().Permissions.Select(p => p.PermissionName).ToList);
return new AuthMiddleware(auth.Object, perms.Object);
}
private User CreateDummyUser() => new() {
Id = Guid.NewGuid(),
CreatedAt = DateTime.Now,
Email = "test@example.com",
Username = "ExampleUser",
Password = "1234567890",
Permissions = new List<Permission> {
new () {
PermissionName = "test.permission"
}
}
};
[Fact]
public async Task InvokeAsync_With_ValidLogin_Should_Succeed() {
// Arrange
var auth = SetupEnvironment();
var context = new DefaultHttpContext();
// Act
await auth.InvokeAsync(context, _delegate);
// Assert
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.UserId));
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.AccessTokenId));
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.Permission));
}
[Fact]
public async Task InvokeAsync_With_InvalidLoginValidToken_Should_Succeed() {
// Arrange
var token = new Token {
Content = Guid.NewGuid(),
CreatedAt = DateTime.Now,
Type = Token.AccessTokenType,
Owner = CreateDummyUser()
};
var auth = SetupEnvironment(false, token);
var context = new DefaultHttpContext();
// Act
await auth.InvokeAsync(context, _delegate);
// Assert
Assert.Equal(token.Owner.Id.ToString(), context.User.FindFirstValue(HopFrameClaimTypes.UserId));
Assert.Equal(token.Content.ToString(), context.User.FindFirstValue(HopFrameClaimTypes.AccessTokenId));
Assert.Equal(token.Owner.Permissions.First().PermissionName, context.User.FindFirstValue(HopFrameClaimTypes.Permission));
}
[Fact]
public async Task InvokeAsync_With_InvalidLoginInvalidToken_Should_Succeed() {
// Arrange
var auth = SetupEnvironment(false);
var context = new DefaultHttpContext();
// Act
await auth.InvokeAsync(context, _delegate);
// Assert
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.UserId));
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.AccessTokenId));
Assert.Null(context.User.FindFirst(HopFrameClaimTypes.Permission));
}
}