public async Task Should_Success_Update_Data() { //Arrange var dbContext = GetDbContext(GetCurrentAsyncMethod()); var serviceProviderMock = GetServiceProvider(); var httpClientService = new Mock <IHttpClientService>(); serviceProviderMock .Setup(serviceProvider => serviceProvider.GetService(typeof(IHttpClientService))) .Returns(httpClientService.Object); serviceProviderMock .Setup(serviceProvider => serviceProvider.GetService(typeof(FinanceDbContext))) .Returns(dbContext); var service = new BankCashReceiptService(serviceProviderMock.Object); var model = await _dataUtil(service, GetCurrentAsyncMethod()).GetTestData(); var model2 = await _dataUtil(service, GetCurrentAsyncMethod()).GetTestData(); BankCashReceiptModel newModel2 = new BankCashReceiptModel(); newModel2.Id = model2.Id; //Act var newModel = await service.ReadByIdAsync(model.Id); var Response1 = await service.UpdateAsync(newModel.Id, newModel); Assert.NotEqual(0, Response1); newModel2.Items = new List <BankCashReceiptItemModel> { model2.Items.First() }; var Response = await service.UpdateAsync(model2.Id, newModel2); Assert.NotEqual(0, Response); BankCashReceiptItemModel newItem = new BankCashReceiptItemModel { BankCashReceiptId = 1, C1A = 1, C1B = 1, C2A = 1, C2B = 1, C2C = 1, }; newModel2.Items.Add(newItem); var Response3 = await service.UpdateAsync(model2.Id, newModel2); Assert.NotEqual(0, Response); }
public async Task <int> UpdateAsync(int id, BankCashReceiptModel model) { BankCashReceiptModel exist = _dbContext.GarmentFinanceBankCashReceipts .Include(d => d.Items) .Single(dispo => dispo.Id == id && !dispo.IsDeleted); exist.Remarks = model.Remarks; exist.BuyerCode = model.BuyerCode; exist.BuyerId = model.BuyerId; exist.BuyerName = model.BuyerName; foreach (var item in exist.Items) { BankCashReceiptItemModel itemModel = model.Items.FirstOrDefault(prop => prop.Id.Equals(item.Id)); if (itemModel == null) { EntityExtension.FlagForDelete(item, _identityService.Username, UserAgent, true); } else { item.Amount = itemModel.Amount; item.Summary = itemModel.Summary; item.NoteNumber = itemModel.NoteNumber; item.Remarks = itemModel.Remarks; EntityExtension.FlagForUpdate(item, _identityService.Username, UserAgent); } } foreach (var newItem in model.Items) { if (newItem.Id == 0) { exist.Items.Add(newItem); EntityExtension.FlagForCreate(newItem, _identityService.Username, UserAgent); } } decimal totalAmount = 0; foreach (var item in exist.Items) { if (model.CurrencyCode == "IDR") { totalAmount += item.Summary; } else { totalAmount += item.Amount; } } if (totalAmount != exist.Amount) { exist.Amount = totalAmount; } EntityExtension.FlagForUpdate(exist, _identityService.Username, UserAgent); return(await _dbContext.SaveChangesAsync()); }