/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core.Tests/Controllers/ValuesControllerTests.cs
286 строк
11 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using FluentAssertions; using Gridient.Core.Controllers; using Gridient.Core.Features.FieldValues.Commands; using Gridient.Core.Features.FieldValues.Queries; using Gridient.Core.Models; using Gridient.Core.Models.ListItem; using Gridient.Core.Tests.Controllers; using Gridient.Core.Tests.Helpers.TestDataBuilders; using MediatR; using Microsoft.AspNetCore.Mvc; using Moq; using Xunit; namespace Gridient.Core.Tests.Controllers { public class ValuesControllerTests : ControllerTestBase { private readonly Mock<IMediator> _mediatorMock; private readonly ValuesController _controller; public ValuesControllerTests() { _mediatorMock = new Mock<IMediator>(); _controller = new ValuesController(_mediatorMock.Object); SetupControllerContext(_controller, "testuser"); } #region GetElements /// <summary> /// Проверяет, что метод GetElements возвращает элементы списка. /// </summary> [Fact] public async Task GetElements_WithValidRequest_ShouldReturnOkWithElements() { // Arrange var listId = 1; var request = FieldValuesServiceTestDataBuilder.CreateGetElementsRequest(listId: listId); var cancellationToken = CancellationToken.None; var expectedResponse = new ElementsResponse<ViewFieldValue> { Values = [ new ViewFieldValue { FieldId = 1, FieldName = "Field1", Value = "Value1" }, new ViewFieldValue { FieldId = 2, FieldName = "Field2", Value = "Value2" } ], Total = 2 }; _mediatorMock .Setup(x => x.Send(It.Is<GetElementsQuery>(q => q.UserLogin == "testuser" && q.Request.ListId == listId), cancellationToken)) .ReturnsAsync(expectedResponse); // Act var result = await _controller.GetElements(listId, request, cancellationToken); // Assert result.Should().BeOfType<OkObjectResult>(); var okResult = result as OkObjectResult; okResult!.Value.Should().BeEquivalentTo(expectedResponse); _mediatorMock.Verify(x => x.Send(It.Is<GetElementsQuery>(q => q.UserLogin == "testuser" && q.Request.ListId == listId), cancellationToken), Times.Once); } #endregion #region GetValuesById /// <summary> /// Проверяет, что метод GetValuesById возвращает значения полей элемента. /// Проверка IsDeleted и системной авторизации для удаленных элементов выполняется в GetValuesByIdQueryHandler. /// </summary> [Fact] public async Task GetValuesById_WithValidRequest_ShouldReturnOkWithValues() { // Arrange var listId = 1; var itemId = 1; var cancellationToken = CancellationToken.None; var expectedValues = FieldValuesServiceTestDataBuilder.CreateFieldValues(2); _mediatorMock .Setup(x => x.Send(It.Is<GetValuesByIdQuery>(q => q.ListId == listId && q.ItemId == itemId), cancellationToken)) .ReturnsAsync(expectedValues); // Act var result = await _controller.GetValuesById(listId, itemId, cancellationToken); // Assert result.Should().BeOfType<OkObjectResult>(); var okResult = result as OkObjectResult; okResult!.Value.Should().BeEquivalentTo(expectedValues); _mediatorMock.Verify(x => x.Send(It.Is<GetValuesByIdQuery>(q => q.ListId == listId && q.ItemId == itemId), cancellationToken), Times.Once); } #endregion #region GetViewValuesById /// <summary> /// Проверяет, что метод GetViewValuesById возвращает значения полей для представления. /// </summary> [Fact] public async Task GetViewValuesById_WithValidRequest_ShouldReturnOkWithViewValues() { // Arrange var listId = 1; var itemId = 1; var cancellationToken = CancellationToken.None; var expectedViewValues = new[] { new ViewFieldValue { FieldId = 1, FieldName = "Field1", Value = "Value1" }, new ViewFieldValue { FieldId = 2, FieldName = "Field2", Value = "Value2" } }; _mediatorMock .Setup(x => x.Send(It.Is<GetViewValuesByIdQuery>(q => q.ListId == listId && q.ItemId == itemId), cancellationToken)) .ReturnsAsync(expectedViewValues); // Act var result = await _controller.GetViewValuesById(listId, itemId, cancellationToken); // Assert result.Should().BeOfType<OkObjectResult>(); var okResult = result as OkObjectResult; okResult!.Value.Should().BeEquivalentTo(expectedViewValues); _mediatorMock.Verify(x => x.Send(It.Is<GetViewValuesByIdQuery>(q => q.ListId == listId && q.ItemId == itemId), cancellationToken), Times.Once); } #endregion #region CreateElement /// <summary> /// Проверяет, что метод CreateElement успешно создает элемент и возвращает Ok. /// </summary> [Fact] public async Task CreateElement_WithValidRequest_ShouldReturnOk() { // Arrange var request = new CreateListItemRequest { ListId = 1, FieldValues = FieldValuesServiceTestDataBuilder.CreateFieldValues(2) }; var cancellationToken = CancellationToken.None; _mediatorMock .Setup(x => x.Send(It.Is<CreateElementCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId), cancellationToken)) .Returns(Task.CompletedTask); // Act var result = await _controller.CreateElement(request.ListId, request, cancellationToken); // Assert result.Should().BeOfType<OkResult>(); _mediatorMock.Verify(x => x.Send(It.Is<CreateElementCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId), cancellationToken), Times.Once); } #endregion #region UpdateElement /// <summary> /// Проверяет, что метод UpdateElement успешно обновляет элемент и возвращает Ok. /// </summary> [Fact] public async Task UpdateElement_WithValidRequest_ShouldReturnOk() { // Arrange var request = new UpdateListItemRequest { ListId = 1, ItemId = 1, FieldValues = FieldValuesServiceTestDataBuilder.CreateFieldValues(2) }; var cancellationToken = CancellationToken.None; _mediatorMock .Setup(x => x.Send(It.Is<UpdateElementCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId && c.ItemId == request.ItemId), cancellationToken)) .Returns(Task.CompletedTask); // Act var result = await _controller.UpdateElement(request.ListId, request.ItemId, request, cancellationToken); // Assert result.Should().BeOfType<OkResult>(); _mediatorMock.Verify(x => x.Send(It.Is<UpdateElementCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId && c.ItemId == request.ItemId), cancellationToken), Times.Once); } #endregion #region Delete /// <summary> /// Проверяет, что метод Delete успешно удаляет элемент и возвращает Ok. /// </summary> [Fact] public async Task Delete_WithValidRequest_ShouldReturnOk() { // Arrange var listId = 1; var itemId = 1; var cancellationToken = CancellationToken.None; _mediatorMock .Setup(x => x.Send(It.Is<DeleteElementCommand>(c => c.UserLogin == "testuser" && c.ListId == listId && c.ItemId == itemId), cancellationToken)) .Returns(Task.CompletedTask); // Act var result = await _controller.Delete(listId, itemId, cancellationToken); // Assert result.Should().BeOfType<OkResult>(); _mediatorMock.Verify(x => x.Send(It.Is<DeleteElementCommand>(c => c.UserLogin == "testuser" && c.ListId == listId && c.ItemId == itemId), cancellationToken), Times.Once); } #endregion #region GetLookupValues /// <summary> /// Проверяет, что метод GetLookupValues возвращает значения для lookup-поля. /// </summary> [Fact] public async Task GetLookupValues_WithValidFieldId_ShouldReturnOkWithLookupValues() { // Arrange var listId = 1; var fieldId = 1; var cancellationToken = CancellationToken.None; var expectedLookupValues = new[] { new LookupValue { Id = 1, Value = "Value1" }, new LookupValue { Id = 2, Value = "Value2" } }; _mediatorMock .Setup(x => x.Send(It.Is<GetLookupValuesQuery>(q => q.ListId == listId && q.LookupFieldId == fieldId), cancellationToken)) .ReturnsAsync(expectedLookupValues); // Act var result = await _controller.GetLookupValues(listId, fieldId, cancellationToken); // Assert result.Should().BeOfType<OkObjectResult>(); var okResult = result as OkObjectResult; okResult!.Value.Should().BeEquivalentTo(expectedLookupValues); _mediatorMock.Verify(x => x.Send(It.Is<GetLookupValuesQuery>(q => q.ListId == listId && q.LookupFieldId == fieldId), cancellationToken), Times.Once); } #endregion #region SetVersionValues /// <summary> /// Проверяет, что метод SetVersionValues успешно восстанавливает версию и возвращает Ok. /// </summary> [Fact] public async Task SetVersionValues_WithValidRequest_ShouldReturnOk() { // Arrange var request = new SetVersionValuesRequest { Id = 1, ListId = 1, ItemId = 1 }; var cancellationToken = CancellationToken.None; _mediatorMock .Setup(x => x.Send(It.Is<RestoreVersionCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId && c.ItemId == request.ItemId && c.VersionId == request.Id), cancellationToken)) .Returns(Task.CompletedTask); // Act var result = await _controller.SetVersionValues(request.ListId, request.ItemId, request.Id, cancellationToken); // Assert result.Should().BeOfType<OkResult>(); _mediatorMock.Verify(x => x.Send(It.Is<RestoreVersionCommand>(c => c.UserLogin == "testuser" && c.ListId == request.ListId && c.ItemId == request.ItemId && c.VersionId == request.Id), cancellationToken), Times.Once); } #endregion } }