public async Task Update_LineItem_price() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(22.33m); var repository = new PurchaseTransactionRepository(fixture.context); var sut = await repository.GetAsync(transactionId); Assert.NotNull(sut.LineItems); Assert.Single(sut.LineItems); Assert.Equal(22.33m, sut.LineItems.FirstOrDefault()?.Price.Amount); var lineItemId = sut.LineItems.FirstOrDefault()?.Id; // Get Product var prod = await ProductHelpers.CreateValidProduct(); var updatedLineItem = LineItemBuilder .LineItem(new Price(33.44m), lineItemId) .WithProduct(prod) .Build(); await UpdateLineItem(transactionId, updatedLineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Single(sut.LineItems); Assert.Equal(33.44m, sut.LineItems.FirstOrDefault()?.Price.Amount); }
public async Task Add_transaction_lineItem() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(); var repository = new PurchaseTransactionRepository(fixture.context); Assert.True(await repository.ExistsAsync(transactionId)); var sut = await repository.GetAsync(transactionId); Assert.Single(sut.LineItems); // Get Product var prod = await ProductHelpers.CreateValidProduct(); var lineItem = LineItemBuilder .LineItem(new Price(2.54m)) .WithProduct(prod) .Build(); await UpdateLineItem(sut.Id, lineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Equal(2, sut.LineItems.Count); }
public async Task Total_price_of_line_items() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(1.23m); var repository = new PurchaseTransactionRepository(fixture.context); Assert.True(await repository.ExistsAsync(transactionId)); var sut = await repository.GetAsync(transactionId); Assert.Single(sut.LineItems); // Get Product var prod = await ProductHelpers.CreateValidProduct(); var secondLineItem = LineItemBuilder .LineItem(new Price(2.54m)) .WithProduct(prod) .Build(); await UpdateLineItem(sut.Id, secondLineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Equal(2, sut.LineItems.Count); var result = decimal.Parse(sut.TotalPrice.Substring(0, sut.TotalPrice.IndexOf(' ', StringComparison.Ordinal))); Assert.Equal(3.77m, result); }
public async Task Update_LineItem_price() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(22.33m); var repository = new PurchaseTransactionRepository(fixture.context); var sut = await repository.GetPurchaseTransactionFullAsync(transactionId); Assert.NotNull(sut.LineItems); Assert.Single(sut.LineItems); Assert.Equal(22.33m, sut.LineItems.FirstOrDefault().Price.Amount); var lineItemId = sut.LineItems.FirstOrDefault().Id; var updatedLineItem = LineItemBuilder .LineItem(new Price(33.44m, Booking.Credit, "EUR", "€", CurrencySymbolPosition.end), lineItemId) .Build(); await UpdateLineItem(transactionId, updatedLineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Single(sut.LineItems); Assert.Equal(33.44m, sut.LineItems.FirstOrDefault().Price.Amount); }
public async Task Total_price_of_line_items_with_debit_item() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(1.23m); var repository = new PurchaseTransactionRepository(fixture.context); Assert.True(await repository.ExistsAsync(transactionId)); var sut = await repository.GetPurchaseTransactionFullAsync(transactionId); Assert.Single(sut.LineItems); var secondLineItem = LineItemBuilder.LineItem(new Price(2.54m, Booking.Credit, "EUR", "€", CurrencySymbolPosition.end)) .Build(); await UpdateLineItem(sut.Id, secondLineItem); var debitLineItem = LineItemBuilder.LineItem(new Price(1.54m, Booking.Debit, "EUR", "€", CurrencySymbolPosition.end)) .Build(); await UpdateLineItem(sut.Id, debitLineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Equal(3, sut.LineItems.Count); Assert.Equal(2, sut.LineItems.Count(i => i.Price.Booking == Booking.Credit)); Assert.Equal(1, sut.LineItems.Count(i => i.Price.Booking == Booking.Debit)); var result = decimal.Parse(sut.TotalPrice.Substring(0, sut.TotalPrice.IndexOf(' ', StringComparison.Ordinal))); Assert.Equal(2.23m, result); }
public async static Task <PurchaseTransaction> ReloadPurchaseTransaction(PurchaseTransactionId id) { var connectionString = ConnectivityService.GetConnectionString("TEMP"); var context = new SplurgeStopDbContext(connectionString); var repository = new PurchaseTransactionRepository(context); return(await repository.GetPurchaseTransactionFullAsync(id)); }
public async Task <PurchaseTransaction> GetPurchaseTransactionFullAsync(PurchaseTransactionId id) { return(await context.Purchases .Include(p => p.Store) .Include(p => p.LineItems) .AsNoTracking() .FirstOrDefaultAsync(p => p.Id == id)); }
private static PurchaseTransaction CreatePurchaseTransaction() { var purchaseTransactionId = new PurchaseTransactionId(SequentialGuid.NewSequentialGuid()); var storeId = new StoreId(SequentialGuid.NewSequentialGuid()); var store = Store.Create(storeId, "Kwik-E-Mart"); return(PurchaseTransaction .CreateFull(purchaseTransactionId, store, new List <LineItemStripped>(), DateTime.Now)); }
public async Task RemoveAsync(PurchaseTransactionId id) { var pt = await _context.Purchases.FindAsync(id); if (pt != null) { _context.Purchases.Remove(pt); } }
public void PurchaseTransaction_created() { var purchaseTransactionId = new PurchaseTransactionId(SequentialGuid.NewSequentialGuid()); var storeId = new StoreId(SequentialGuid.NewSequentialGuid()); var store = Store.Create(storeId, "Kwik-E-Mart"); var sut = PurchaseTransaction.CreateFull(purchaseTransactionId, store, new List <LineItemStripped>(), DateTime.Now); Assert.NotNull(sut); Assert.Contains("Kwik-E-Mart", sut.Store.Name); Assert.NotNull(sut.LineItems); }
public async Task FullPurchase_transaction_inserted_to_database() { PurchaseTransactionId transactionId = await CreateFullValidPurchaseTransaction(); var repository = new PurchaseTransactionRepository(fixture.context); var sut = await repository.GetAsync(transactionId); Assert.True(await repository.ExistsAsync(transactionId)); Assert.Equal(DateTime.Now.Date, sut.PurchaseDate); Assert.NotNull(sut.Store); Assert.Single(sut.LineItems); }
public async Task Add_lineItem_with_notes() { var lineItem = LineItemBuilder.LineItem(new Price(1.00m, Booking.Credit, "EUR", "€", CurrencySymbolPosition.end)) .WithNotes("My Notes!") .Build(); PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(1m, lineItem); var repository = new PurchaseTransactionRepository(fixture.context); var sut = await repository.GetPurchaseTransactionFullAsync(transactionId); Assert.True(await repository.ExistsAsync(transactionId)); Assert.Equal("My Notes!", sut.LineItems.FirstOrDefault().Notes); }
public async static Task UpdateStore(PurchaseTransactionId id, Store store) { var connectionString = ConnectivityService.GetConnectionString("TEMP"); var context = new SplurgeStopDbContext(connectionString); var repository = new PurchaseTransactionRepository(context); var unitOfWork = new EfCoreUnitOfWork(context); var service = new PurchaseTransactionService(repository, unitOfWork); var transactionController = new PurchaseTransactionController(service); var updateCommand = new transaction.Commands.SetPurchaseTransactionStore(); updateCommand.Id = id; updateCommand.StoreId = store.Id; await transactionController.Put(updateCommand); }
public async Task <PurchaseTransaction> GetAsync(PurchaseTransactionId id) { return(await _context.Purchases .Include(p => p.Store) .Include(p => p.LineItems) .ThenInclude(l => l.Product) .ThenInclude(p => p.Brand) .Include(p => p.LineItems) .ThenInclude(l => l.Product) .ThenInclude(p => p.ProductType) .Include(p => p.LineItems) .ThenInclude(l => l.Product) .ThenInclude(p => p.Size) .AsNoTracking() .FirstOrDefaultAsync(p => p.Id == id)); }
public static async Task UpdatePurchaseDate(PurchaseTransactionId id, DateTime date) { var connectionString = ConnectivityService.GetConnectionString("TEMP"); var context = new SplurgeStopDbContext(connectionString); var repository = new PurchaseTransactionRepository(context); var unitOfWork = new EfCoreUnitOfWork(context); var service = new PurchaseTransactionService(repository, unitOfWork); var transactionController = new PurchaseTransactionController(service); var updateCommand = new Commands.SetPurchaseTransactionDate { Id = id, TransactionDate = date }; await transactionController.Put(updateCommand); }
public async Task Update_transaction_date() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(); var repository = new PurchaseTransactionRepository(fixture.context); Assert.True(await repository.ExistsAsync(transactionId)); var sut = await repository.LoadFullPurchaseTransactionAsync(transactionId); Assert.Equal(DateTime.Now.Date, sut.PurchaseDate); await UpdatePurchaseDate(sut.Id, DateTime.Now.AddDays(-1)); await fixture.context.Entry(sut).ReloadAsync(); Assert.Equal(DateTime.Now.AddDays(-1).Date, sut.PurchaseDate); }
public async Task Add_lineItem_with_notes() { var brand = Brand.Create(Guid.NewGuid(), "brand"); var productType = ProductType.Create(Guid.NewGuid(), "product type"); var size = Size.Create(Guid.NewGuid(), "your size"); var product = Product.Create(Guid.NewGuid(), "product", brand, productType, size); var lineItem = LineItemBuilder.LineItem(new Price(1.00m)) .WithNotes("My Notes!") .WithProduct(product) .Build(); PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(1m, lineItem); var repository = new PurchaseTransactionRepository(fixture.context); var sut = await repository.GetAsync(transactionId); Assert.True(await repository.ExistsAsync(transactionId)); Assert.Equal("My Notes!", sut.LineItems.FirstOrDefault()?.Notes); }
public async static Task UpdateLineItem(PurchaseTransactionId id, LineItem lineItem) { var connectionString = ConnectivityService.GetConnectionString("TEMP"); var context = new SplurgeStopDbContext(connectionString); var repository = new PurchaseTransactionRepository(context); var unitOfWork = new EfCoreUnitOfWork(context); var service = new PurchaseTransactionService(repository, unitOfWork); var transactionController = new PurchaseTransactionController(service); var updateCommand = new transaction.Commands.SetPurchaseTransactionLineItem(); updateCommand.Id = id; updateCommand.LineItemId = lineItem.Id; updateCommand.Price = lineItem.Price.Amount; updateCommand.Currency = lineItem.Price.Currency.CurrencyCode; updateCommand.CurrencySymbol = lineItem.Price.Currency.CurrencySymbol; updateCommand.Booking = lineItem.Price.Booking; updateCommand.CurrencySymbolPosition = lineItem.Price.Currency.PositionRelativeToPrice; updateCommand.Notes = lineItem?.Notes; await transactionController.Put(updateCommand); }
public async Task Add_transaction_lineItem() { PurchaseTransactionId transactionId = await CreateValidPurchaseTransaction(); var repository = new PurchaseTransactionRepository(fixture.context); Assert.True(await repository.ExistsAsync(transactionId)); var sut = await repository.GetPurchaseTransactionFullAsync(transactionId); Assert.Single(sut.LineItems); var lineItem = LineItemBuilder .LineItem(new Price(2.54m, Booking.Credit, "EUR", "€", CurrencySymbolPosition.end)) .Build(); await UpdateLineItem(sut.Id, lineItem); sut = await ReloadPurchaseTransaction(sut.Id); Assert.Equal(2, sut.LineItems.Count); }
public async Task <PurchaseTransaction> LoadFullPurchaseTransactionAsync(PurchaseTransactionId id) { return(await _context.Purchases.Include(s => s.Store) .FirstOrDefaultAsync(s => s.Id == id)); }
public async Task <bool> ExistsAsync(PurchaseTransactionId id) { return(await _context.Purchases.FindAsync(id) != null); }
public async Task <PurchaseTransaction> LoadAsync(PurchaseTransactionId id) { return(await _context.Purchases.FindAsync(id)); }
public void PurchaseTransaction_not_created(PurchaseTransactionId purchaseTransactionId, Store store, ICollection <LineItemStripped> lineItems) { Action sut = () => PurchaseTransaction.CreateFull(purchaseTransactionId, store, lineItems, DateTime.Now); Assert.Throws <ArgumentNullException>(sut.Invoke); }