/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Infrastructure.Authentication.Local.Tests/Controllers/AuthControllerTests.cs
136 строк
5 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using FluentAssertions; using Gridient.Infrastructure.Authentication.Local.Controllers; using Gridient.Infrastructure.Authentication.Local.Features.Auth.Commands; using Gridient.Infrastructure.Authentication.Local.Models; using Gridient.Infrastructure.Authentication.Local.Tests.Helpers.TestDataBuilders; using MediatR; using Microsoft.AspNetCore.Mvc; using Moq; using Xunit; namespace Gridient.Infrastructure.Authentication.Local.Tests.Controllers { public class AuthControllerTests { private readonly Mock<IMediator> _mediatorMock; private readonly AuthController _controller; public AuthControllerTests() { _mediatorMock = new Mock<IMediator>(); _controller = new AuthController(_mediatorMock.Object); } #region Login /// <summary> /// Проверяет, что Login возвращает Unauthorized, если сервис вернул null. /// </summary> [Fact] public async Task Login_WhenServiceReturnsNull_ShouldReturnUnauthorized() { var cancellationToken = CancellationToken.None; var model = new AuthModel { Username = "u1", Password = "p1" }; _mediatorMock .Setup(x => x.Send(It.Is<LoginCommand>(c => c.Username == "u1" && c.Password == "p1"), cancellationToken)) .ReturnsAsync((AuthResponseModel?)null); var result = await _controller.Login(model, cancellationToken); result.Should().BeOfType<UnauthorizedResult>(); _mediatorMock.Verify(x => x.Send(It.Is<LoginCommand>(c => c.Username == "u1" && c.Password == "p1"), cancellationToken), Times.Once); } /// <summary> /// Проверяет, что Login возвращает Ok с результатом, если сервис вернул токены. /// </summary> [Fact] public async Task Login_WhenServiceReturnsResponse_ShouldReturnOkWithResponse() { var cancellationToken = CancellationToken.None; var model = new AuthModel { Username = "u1", Password = "p1" }; var expected = AuthResponseModelTestDataBuilder.CreateAuthResponseModel(); _mediatorMock .Setup(x => x.Send(It.Is<LoginCommand>(c => c.Username == "u1" && c.Password == "p1"), cancellationToken)) .ReturnsAsync(expected); var result = await _controller.Login(model, cancellationToken); result.Should().BeOfType<OkObjectResult>(); var ok = (OkObjectResult)result; ok.Value.Should().BeEquivalentTo(expected); } #endregion #region Refresh /// <summary> /// Проверяет, что Refresh возвращает Unauthorized, если сервис вернул null. /// </summary> [Fact] public async Task Refresh_WhenServiceReturnsNull_ShouldReturnUnauthorized() { var cancellationToken = CancellationToken.None; var model = new RefreshModel { RefreshToken = "rt" }; _mediatorMock .Setup(x => x.Send(It.Is<RefreshTokenCommand>(c => c.RefreshToken == "rt"), cancellationToken)) .ReturnsAsync((AuthResponseModel?)null); var result = await _controller.Refresh(model, cancellationToken); result.Should().BeOfType<UnauthorizedResult>(); _mediatorMock.Verify(x => x.Send(It.Is<RefreshTokenCommand>(c => c.RefreshToken == "rt"), cancellationToken), Times.Once); } /// <summary> /// Проверяет, что Refresh возвращает Ok с результатом, если сервис вернул токены. /// </summary> [Fact] public async Task Refresh_WhenServiceReturnsResponse_ShouldReturnOkWithResponse() { var cancellationToken = CancellationToken.None; var model = new RefreshModel { RefreshToken = "rt" }; var expected = AuthResponseModelTestDataBuilder.CreateAuthResponseModel(); _mediatorMock .Setup(x => x.Send(It.Is<RefreshTokenCommand>(c => c.RefreshToken == "rt"), cancellationToken)) .ReturnsAsync(expected); var result = await _controller.Refresh(model, cancellationToken); result.Should().BeOfType<OkObjectResult>(); var ok = (OkObjectResult)result; ok.Value.Should().BeEquivalentTo(expected); } #endregion #region Logout /// <summary> /// Проверяет, что Logout вызывает сервис и возвращает Ok с сообщением. /// </summary> [Fact] public async Task Logout_ShouldCallServiceAndReturnOkMessage() { var cancellationToken = CancellationToken.None; var model = new RefreshModel { RefreshToken = "rt" }; _mediatorMock .Setup(x => x.Send(It.Is<LogoutCommand>(c => c.RefreshToken == "rt"), cancellationToken)) .Returns(Task.CompletedTask); var result = await _controller.Logout(model, cancellationToken); result.Should().BeOfType<OkObjectResult>(); ((OkObjectResult)result).Value.Should().Be("Выход успешно произведён"); _mediatorMock.Verify(x => x.Send(It.Is<LogoutCommand>(c => c.RefreshToken == "rt"), cancellationToken), Times.Once); } #endregion } }