using FluentAssertions; using MyWarehouse.Application.Transactions.GetTransactionsList; using MyWarehouse.Domain; using MyWarehouse.Domain.Products; using NUnit.Framework; using System.Linq; using System.Threading.Tasks; namespace MyWarehouse.Application.IntegrationTests.Transactions { public class GetTransactionsListTests : TestBase { [Test] public async Task WhenEmpty_ShouldReturnEmptyList() { var list = await TestFramework.SendAsync(new GetTransactionListQuery()); list.Should().NotBeNull(); list.RowCount.Should().Be(0); list.Results.Should().BeEmpty(); } [Test] public async Task WhenAllTransactionsRequested_ShouldReturnPagedTransactions() { var numberOfTransactions = 25; var partner = (await TestFramework.DataFactory.AddPartners(1)).First(); for (int i = 0; i < numberOfTransactions; i++) { await TestFramework.DataFactory.CreateProcurementTransaction(1, partner); } var list = await TestFramework.SendAsync(new GetTransactionListQuery()); list.Should().NotBeNull(); list.RowCount.Should().Be(numberOfTransactions); list.PageIndex.Should().Be(1); list.Results.Should().HaveCount(list.PageSize) .And.OnlyHaveUniqueItems(); } [Test] public async Task WhenProcurementsRequested_ShouldReturnOnlyProcurements() { var numberOfProcurements = 6; var partner = (await TestFramework.DataFactory.AddPartners(1)).First(); for (int i = 0; i < numberOfProcurements; i++) { await TestFramework.DataFactory.CreateProcurementTransaction(1, partner, createNewProducts: true); } var products = await TestFramework.Data.GetAllAsync<Product>(); for (int i = 0; i < 3; i++) { await TestFramework.DataFactory.CreateSalesTransaction(partner, products.Skip(i).Take(1)); } var list = await TestFramework.SendAsync(new GetTransactionListQuery() { Type = TransactionType.Procurement }); list.Should().NotBeNull(); list.RowCount.Should().Be(numberOfProcurements); list.Results.Should().HaveCount(numberOfProcurements) .And.OnlyHaveUniqueItems() .And.OnlyContain(x => x.TransactionType == (int)TransactionType.Procurement); } [Test] public async Task WhenSalesRequested_ShouldReturnOnlySales() { var partner = (await TestFramework.DataFactory.AddPartners(1)).First(); for (int i = 0; i < 6; i++) { await TestFramework.DataFactory.CreateProcurementTransaction(1, partner, createNewProducts: true); } var numberOfSales = 3; var products = await TestFramework.Data.GetAllAsync<Product>(); for (int i = 0; i < numberOfSales; i++) { await TestFramework.DataFactory.CreateSalesTransaction(partner, products.Skip(i).Take(1)); } var list = await TestFramework.SendAsync(new GetTransactionListQuery() { Type = TransactionType.Sales }); list.Should().NotBeNull(); list.RowCount.Should().Be(numberOfSales); list.Results.Should().HaveCount(numberOfSales) .And.OnlyHaveUniqueItems() .And.OnlyContain(x => x.TransactionType == (int)TransactionType.Sales); } } }