public void SaleDbDataManager_AddSaleData_AddsWithNoDuplicates() { SaleDataDto saleDataDto = GetSaleData(); var groupedSales = saleDataDto.Sales .GroupBy(sale => new { sale.CustomerName, sale.ProductName, sale.SaleDate }, (key, sales) => new SaleDto() { CustomerName = key.CustomerName, ProductName = key.ProductName, SaleDate = key.SaleDate, TotalSum = sales.Sum(s => s.TotalSum) }); int customersCount = saleDataDto.Sales.Select(s => s.CustomerName).Distinct().Count(); int productsCount = saleDataDto.Sales.Select(s => s.ProductName).Distinct().Count(); int salesCount = groupedSales.Count(); using (ISalesUnitOfWork unitOfWork = DependencyContainer.Container.Resolve <ISalesUnitOfWork>()) using (ISalesDataManager manager = DependencyContainer.Container.Resolve <ISalesDataManager>()) { int initialCustomersCount = unitOfWork.Customers.Get().Count(); int initialProductsCount = unitOfWork.Products.Get().Count(); int initialSalesCount = unitOfWork.Sales.Get().Count(); var res = manager.AddOrUpdateSaleDataAsync(saleDataDto).GetAwaiter().GetResult(); int savedSalesCount = unitOfWork.Sales.Get().Count(); int savedCustomersCount = unitOfWork.Customers.Get().Count(); int savedProductsCount = unitOfWork.Products.Get().Count(); Assert.IsTrue(res.Succeeded); Assert.AreEqual(customersCount + initialCustomersCount, savedCustomersCount); Assert.AreEqual(productsCount + initialProductsCount, savedProductsCount); Assert.AreEqual(salesCount + initialSalesCount, savedSalesCount); // Second time same file saleDataDto = GetSaleData(1); groupedSales = saleDataDto.Sales .GroupBy(sale => new { sale.CustomerName, sale.ProductName, sale.SaleDate }, (key, sales) => new SaleDto() { CustomerName = key.CustomerName, ProductName = key.ProductName, SaleDate = key.SaleDate, TotalSum = sales.Sum(s => s.TotalSum) }); res = manager.AddOrUpdateSaleDataAsync(saleDataDto).GetAwaiter().GetResult(); savedSalesCount = unitOfWork.Sales.Get().Count(); savedCustomersCount = unitOfWork.Customers.Get().Count(); savedProductsCount = unitOfWork.Products.Get().Count(); Assert.IsTrue(res.Succeeded); Assert.AreEqual(customersCount + initialCustomersCount, savedCustomersCount); Assert.AreEqual(productsCount + initialProductsCount, savedProductsCount); Assert.AreEqual(salesCount + initialSalesCount, savedSalesCount); } }