/
azarayaos
/
OrderHub
Обзор
Документация
Войти
/
azarayaos
/
OrderHub
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
OrderHub.Tests/UnitTests/OrderRepositoryTests.cs
158 строк
5 KB
Azaray AOS
Создания начального проекта с базовым функицоналом
29 июн 2026, 22:47
29 июн 2026, 22:47
213f989
Код
Авторство
О чём код?
using Microsoft.EntityFrameworkCore; using OrderHub.Core.Models; using OrderHub.Infrastructure.Data; using OrderHub.Infrastructure.Repositories; namespace OrderHub.Tests.UnitTests; /// <summary> /// Модульные тесты репозитория заказов. /// </summary> public class OrderRepositoryTests { /// <summary> /// Создаёт контекст InMemory базы данных для тестирования. /// </summary> private static OrderDbContext CreateContext() { var options = new DbContextOptionsBuilder<OrderDbContext>() .UseInMemoryDatabase(Guid.NewGuid().ToString()) .Options; return new OrderDbContext(options); } /// <summary> /// Добавление заказа должно сохранять его в базу данных. /// </summary> [Fact] public async Task AddAsync_ShouldSaveOrder() { var context = CreateContext(); var repository = new OrderRepository(context); var order = new Order { Id = Guid.NewGuid(), Name = "Тестовый заказ", Status = OrderStatus.Created, CreatedAt = DateTime.UtcNow }; await repository.AddAsync(order); await repository.SaveChangesAsync(); var saved = await context.Orders.FindAsync(order.Id); Assert.NotNull(saved); Assert.Equal("Тестовый заказ", saved!.Name); Assert.Equal(OrderStatus.Created, saved.Status); } /// <summary> /// Получение заказа по идентификатору должно возвращать корректный заказ. /// </summary> [Fact] public async Task GetByIdAsync_ShouldReturnOrder_WhenExists() { var context = CreateContext(); var repository = new OrderRepository(context); var order = new Order { Id = Guid.NewGuid(), Name = "Заказ 1", Status = OrderStatus.Confirmed }; context.Orders.Add(order); await context.SaveChangesAsync(); var result = await repository.GetByIdAsync(order.Id); Assert.NotNull(result); Assert.Equal(order.Id, result!.Id); Assert.Equal("Заказ 1", result.Name); } /// <summary> /// Получение несуществующего заказа должно возвращать null. /// </summary> [Fact] public async Task GetByIdAsync_ShouldReturnNull_WhenNotExists() { var context = CreateContext(); var repository = new OrderRepository(context); var result = await repository.GetByIdAsync(Guid.NewGuid()); Assert.Null(result); } /// <summary> /// Получение списка заказов должно возвращать данные с пагинацией. /// </summary> [Fact] public async Task GetOrdersAsync_ShouldReturnPaginatedOrders() { var context = CreateContext(); var repository = new OrderRepository(context); for (var i = 0; i < 25; i++) { context.Orders.Add(new Order { Id = Guid.NewGuid(), Name = $"Заказ {i}", Status = OrderStatus.Created, CreatedAt = DateTime.UtcNow.AddMinutes(-i) }); } await context.SaveChangesAsync(); var (orders, totalCount) = await repository.GetOrdersAsync(0, 10); Assert.Equal(25, totalCount); Assert.Equal(10, orders.Count); } /// <summary> /// Фильтрация по статусу должна возвращать только заказы с указанным статусом. /// </summary> [Fact] public async Task GetOrdersAsync_ShouldFilterByStatus() { var context = CreateContext(); var repository = new OrderRepository(context); context.Orders.Add(new Order { Id = Guid.NewGuid(), Name = "A", Status = OrderStatus.Created, CreatedAt = DateTime.UtcNow }); context.Orders.Add(new Order { Id = Guid.NewGuid(), Name = "B", Status = OrderStatus.Delivered, CreatedAt = DateTime.UtcNow }); context.Orders.Add(new Order { Id = Guid.NewGuid(), Name = "C", Status = OrderStatus.Delivered, CreatedAt = DateTime.UtcNow }); await context.SaveChangesAsync(); var (orders, totalCount) = await repository.GetOrdersAsync(0, 10, OrderStatus.Delivered); Assert.Equal(2, totalCount); Assert.All(orders, o => Assert.Equal(OrderStatus.Delivered, o.Status)); } /// <summary> /// Обновление заказа должно изменять его данные в базе. /// </summary> [Fact] public async Task UpdateAsync_ShouldModifyOrder() { var context = CreateContext(); var repository = new OrderRepository(context); var order = new Order { Id = Guid.NewGuid(), Name = "До обновления", Status = OrderStatus.Created }; context.Orders.Add(order); await context.SaveChangesAsync(); order.Status = OrderStatus.Shipped; order.UpdatedAt = DateTime.UtcNow; await repository.UpdateAsync(order); await repository.SaveChangesAsync(); var updated = await context.Orders.FindAsync(order.Id); Assert.Equal(OrderStatus.Shipped, updated!.Status); Assert.NotNull(updated.UpdatedAt); } }