Add project reference for TeleWave.Infrastructure: include TeleWave.Infrastructure.csproj in TeleWave.Application.Tests project to support additional testing capabilities.

This commit is contained in:
Leonid Pershin
2026-07-25 20:12:04 +03:00
parent ed240ef73c
commit 4611f90d11
18 changed files with 2027 additions and 0 deletions
@@ -0,0 +1,157 @@
using NSubstitute;
using TeleWave.Application.Admin.Roles;
using TeleWave.Application.Admin.Roles.CreateRole;
using TeleWave.Application.Admin.Roles.DeleteRole;
using TeleWave.Application.Admin.Roles.ListRoles;
using TeleWave.Application.Admin.Roles.UpdateRole;
using TeleWave.Application.Admin.Users;
using TeleWave.Application.Admin.Users.DeleteUser;
using TeleWave.Application.Admin.Users.ResetPassword;
using TeleWave.Application.Admin.Users.UnblockUser;
using TeleWave.Application.Auth;
using TeleWave.Application.Auth.ChangePassword;
using TeleWave.Application.Common.Interfaces;
using TeleWave.Application.Common.Models;
using Xunit;
namespace TeleWave.Application.Tests.Admin;
public class DelegatingHandlersTests
{
private readonly IRoleService _roles = Substitute.For<IRoleService>();
private readonly IIdentityService _identity = Substitute.For<IIdentityService>();
private readonly ICurrentUser _currentUser = Substitute.For<ICurrentUser>();
[Fact]
public async Task Roles_HandlersDelegateToService()
{
var id = Guid.NewGuid();
var dto = new RoleDto(id, "editor", false);
_roles.CreateRoleAsync("editor", Arg.Any<CancellationToken>()).Returns(Result.Success(dto));
_roles
.UpdateRoleAsync(id, "editor", Arg.Any<CancellationToken>())
.Returns(Result.Success(dto));
_roles.DeleteRoleAsync(id, Arg.Any<CancellationToken>()).Returns(Result.Success());
_roles.ListRolesAsync(Arg.Any<CancellationToken>()).Returns(new List<RoleDto> { dto });
Assert.True(
(
await new CreateRoleCommandHandler(_roles).Handle(
new CreateRoleCommand("editor"),
default
)
).IsSuccess
);
Assert.True(
(
await new UpdateRoleCommandHandler(_roles).Handle(
new UpdateRoleCommand(id, "editor"),
default
)
).IsSuccess
);
Assert.True(
(
await new DeleteRoleCommandHandler(_roles).Handle(
new DeleteRoleCommand(id),
default
)
).IsSuccess
);
Assert.Single(
await new ListRolesQueryHandler(_roles).Handle(new ListRolesQuery(), default)
);
}
[Fact]
public async Task UnblockUser_And_ResetPassword_Delegate()
{
var id = Guid.NewGuid();
_identity.UnblockUserAsync(id, Arg.Any<CancellationToken>()).Returns(Result.Success());
_identity
.ResetPasswordAsync(id, "Password1", Arg.Any<CancellationToken>())
.Returns(Result.Success());
Assert.True(
(
await new UnblockUserCommandHandler(_identity).Handle(
new UnblockUserCommand(id),
default
)
).IsSuccess
);
Assert.True(
(
await new ResetUserPasswordCommandHandler(_identity).Handle(
new ResetUserPasswordCommand(id, "Password1"),
default
)
).IsSuccess
);
await _identity
.Received(1)
.ResetPasswordAsync(id, "Password1", Arg.Any<CancellationToken>());
}
[Fact]
public async Task DeleteUser_CannotDeleteSelf()
{
var me = Guid.NewGuid();
_currentUser.UserId.Returns(me);
var result = await new DeleteUserCommandHandler(_identity, _currentUser).Handle(
new DeleteUserCommand(me),
default
);
Assert.Equal(UserErrors.CannotDeleteSelf, result.Error);
await _identity
.DidNotReceive()
.DeleteUserAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>());
}
[Fact]
public async Task DeleteUser_OtherUser_Delegates()
{
_currentUser.UserId.Returns(Guid.NewGuid());
var target = Guid.NewGuid();
_identity.DeleteUserAsync(target, Arg.Any<CancellationToken>()).Returns(Result.Success());
var result = await new DeleteUserCommandHandler(_identity, _currentUser).Handle(
new DeleteUserCommand(target),
default
);
Assert.True(result.IsSuccess);
}
[Fact]
public async Task ChangePassword_Unauthorized_WhenNoCurrentUser()
{
_currentUser.UserId.Returns((Guid?)null);
var result = await new ChangePasswordCommandHandler(_identity, _currentUser).Handle(
new ChangePasswordCommand("old", "New12345"),
default
);
Assert.Equal(AuthErrors.Unauthorized, result.Error);
}
[Fact]
public async Task ChangePassword_Delegates_WhenAuthenticated()
{
var me = Guid.NewGuid();
_currentUser.UserId.Returns(me);
_identity
.ChangePasswordAsync(me, "old", "New12345", Arg.Any<CancellationToken>())
.Returns(Result.Success());
var result = await new ChangePasswordCommandHandler(_identity, _currentUser).Handle(
new ChangePasswordCommand("old", "New12345"),
default
);
Assert.True(result.IsSuccess);
}
}