build-flow.api/tests/BuildFlow.Platform.Tests/Auth/ChangePasswordEndpointTests.cs

39 lines
1.2 KiB
C#

using BuildFlow.Host.Endpoints.Platform.Auth;
using BuildFlow.Platform.Application.Auth.Commands;
using FastEndpoints;
using FluentAssertions;
using MediatR;
using NSubstitute;
using Xunit;
namespace BuildFlow.Platform.Tests.Auth;
/// <summary>
/// 修改密码 HTTP 适配器测试,确保 Endpoint 只转发应用层命令。
/// </summary>
public class ChangePasswordEndpointTests
{
[Fact]
public async Task EndpointSendsCommandAndReturnsOk()
{
var mediator = Substitute.For<IMediator>();
mediator.Send(Arg.Any<ChangePasswordCommand>(), Arg.Any<CancellationToken>())
.Returns(Unit.Value);
var endpoint = Factory.Create<ChangePasswordEndpoint>(mediator);
var request = new ChangePasswordRequest
{
OldPassword = "OldPassword1",
NewPassword = "NewPassword2",
};
await endpoint.HandleAsync(request, CancellationToken.None);
await mediator.Received(1).Send(
Arg.Is<ChangePasswordCommand>(command =>
command.OldPassword == request.OldPassword
&& command.NewPassword == request.NewPassword),
Arg.Any<CancellationToken>());
endpoint.HttpContext.Response.StatusCode.Should().Be(200);
}
}