79 lines
2.7 KiB
C#
79 lines
2.7 KiB
C#
using BuildFlow.Application.Users.Handlers;
|
|
using BuildFlow.Application.Users.Queries;
|
|
using BuildFlow.Domain.Entities;
|
|
using BuildFlow.Infrastructure.Persistence;
|
|
using FluentAssertions;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Rag.Tests.Users;
|
|
|
|
/// <summary>
|
|
/// 用户列表查询处理器单元测试。覆盖无搜索、关键字搜索、空表三个场景。
|
|
/// </summary>
|
|
public class GetUserListQueryHandlerTests
|
|
{
|
|
/// <summary>创建 InMemory 数据库 + 种子用户。</summary>
|
|
private static async Task<(RagDbContext db, GetUserListQueryHandler handler)> SetupAsync()
|
|
{
|
|
var options = new DbContextOptionsBuilder<RagDbContext>()
|
|
.UseInMemoryDatabase($"userlist-{Guid.NewGuid()}")
|
|
.Options;
|
|
var db = new RagDbContext(options);
|
|
|
|
db.Users.AddRange(
|
|
new User { Id = Guid.NewGuid(), Username = "zhangsan", Email = "z@e.com", PasswordHash = "x", IsActive = true, CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" },
|
|
new User { Id = Guid.NewGuid(), Username = "lisi", Email = "l@e.com", PasswordHash = "x", IsActive = true, CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" },
|
|
new User { Id = Guid.NewGuid(), Username = "wangwu", Email = "w@e.com", PasswordHash = "x", IsActive = false, CreatedBy = "s", UpdatedBy = "s", OperatorIP = "0" }
|
|
);
|
|
await db.SaveChangesAsync();
|
|
|
|
var handler = new GetUserListQueryHandler(db);
|
|
return (db, handler);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetUserList_WithoutSearch_ReturnsAllUsers()
|
|
{
|
|
// Arrange
|
|
var (db, handler) = await SetupAsync();
|
|
|
|
// Act
|
|
var result = await handler.Handle(new GetUserListQuery(null), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().HaveCount(3);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetUserList_WithSearch_ReturnsFilteredUsers()
|
|
{
|
|
// Arrange
|
|
var (db, handler) = await SetupAsync();
|
|
|
|
// Act
|
|
var result = await handler.Handle(new GetUserListQuery("zhang"), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().HaveCount(1);
|
|
result[0].Username.Should().Be("zhangsan");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetUserList_OnEmptyDatabase_ReturnsEmptyList()
|
|
{
|
|
// Arrange
|
|
var options = new DbContextOptionsBuilder<RagDbContext>()
|
|
.UseInMemoryDatabase($"userlist-empty-{Guid.NewGuid()}")
|
|
.Options;
|
|
var db = new RagDbContext(options);
|
|
var handler = new GetUserListQueryHandler(db);
|
|
|
|
// Act
|
|
var result = await handler.Handle(new GetUserListQuery(null), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeEmpty();
|
|
}
|
|
}
|