build-flow.api/tests/BuildFlow.Rag.Tests/Roles/GetRoleListQueryHandlerTests.cs

65 lines
2.1 KiB
C#

using BuildFlow.Application.Roles.Handlers;
using BuildFlow.Application.Roles.Queries;
using BuildFlow.Domain.Entities;
using BuildFlow.Infrastructure.Persistence;
using FluentAssertions;
using Microsoft.EntityFrameworkCore;
using Xunit;
namespace BuildFlow.Rag.Tests.Roles;
/// <summary>
/// 角色列表查询处理器单元测试。覆盖正常查询和空表场景。
/// </summary>
public class GetRoleListQueryHandlerTests
{
private static async Task<(RagDbContext db, GetRoleListQueryHandler handler)> SetupAsync()
{
var options = new DbContextOptionsBuilder<RagDbContext>()
.UseInMemoryDatabase($"rolelist-{Guid.NewGuid()}")
.Options;
var db = new RagDbContext(options);
db.Roles.AddRange(
new Role { Id = Guid.NewGuid(), Name = "SuperAdmin", CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" },
new Role { Id = Guid.NewGuid(), Name = "Admin", CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" },
new Role { Id = Guid.NewGuid(), Name = "User", CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" }
);
await db.SaveChangesAsync();
var handler = new GetRoleListQueryHandler(db);
return (db, handler);
}
[Fact]
public async Task GetRoleList_ReturnsAllRoles()
{
// Arrange
var (db, handler) = await SetupAsync();
// Act
var result = await handler.Handle(new GetRoleListQuery(), CancellationToken.None);
// Assert
result.Should().HaveCount(3);
result.Select(r => r.Name).Should().Contain(new[] { "SuperAdmin", "Admin", "User" });
}
[Fact]
public async Task GetRoleList_OnEmptyDatabase_ReturnsEmptyList()
{
// Arrange
var options = new DbContextOptionsBuilder<RagDbContext>()
.UseInMemoryDatabase($"rolelist-empty-{Guid.NewGuid()}")
.Options;
var db = new RagDbContext(options);
var handler = new GetRoleListQueryHandler(db);
// Act
var result = await handler.Handle(new GetRoleListQuery(), CancellationToken.None);
// Assert
result.Should().BeEmpty();
}
}