public async Task Handle_ValidReceiptId_ShouldReturnItems() { var receipt = await CreateReceipt(); var createReceiptItem = new CreateReceiptItemCommand { ItemGroup = 0, Count = 10, Name = "hey", Price = 1235, ReceiptId = receipt, UserIds = new List <string> { User.Id } }; var itemId = await SendAsync(createReceiptItem); var query = new GetReceiptItemByReceiptIdQuery { ReceiptId = receipt }; var entities = await SendAsync(query); entities.Should().NotBeNull(); entities.Count.Should().Be(1); entities.First().Id.Should().Be(itemId); }
public async Task <IActionResult> EditReceiptPost(CreateReceiptModel model) { //update receipt var command = new UpdateReceiptCommand { Id = model.ReceiptDto.Id, Location = model.ReceiptDto.Location, DateVisited = model.ReceiptDto.DateVisited, Note = model.ReceiptDto.Note }; await Mediator.Send(command); //get already existing receipt items var itemQuery = new GetReceiptItemByReceiptIdQuery { ReceiptId = model.ReceiptDto.Id }; var alreadyExistingItems = await Mediator.Send(itemQuery); #region Delete //delete receipt item - own request var receiptItemsToDelete = alreadyExistingItems .Where(x => model.ReceiptDto.Items .All(y => y.Id != x.Id)) .ToList(); foreach (var itemDto in receiptItemsToDelete) { var deleteCommand = new DeleteReceiptItemCommand { Id = itemDto.Id !, FinancialProjectId = model.FinancialProjectId }; await Mediator.Send(deleteCommand); } #endregion #region Create //Create receipt item var receiptItemToBeCreated = model.ReceiptDto.Items .Where(x => alreadyExistingItems .All(y => y.Id != x.Id)) .ToList(); foreach (var receiptItemDto in receiptItemToBeCreated) { var createCommand = new CreateReceiptItemCommand { Name = "", Count = receiptItemDto.Count, Price = receiptItemDto.Price, ItemGroup = receiptItemDto.ItemGroup.Value, ReceiptId = model.ReceiptDto.Id, UserIds = receiptItemDto.Users.Select(x => x.Id).ToList() ! }; await Mediator.Send(createCommand); } #endregion #region Update //update receipt item - own request var receiptItemsToUpdate = model.ReceiptDto.Items .Where(x => receiptItemsToDelete .All(y => y.Id != x.Id) && receiptItemToBeCreated.All(q => q.Id != x.Id)) .ToList(); foreach (var receiptItemDto in receiptItemsToUpdate) { var updateCommand = new UpdateReceiptItemCommand { Id = receiptItemDto.Id ?? "", Count = receiptItemDto.Count, ItemGroup = receiptItemDto.ItemGroup.Value, Price = receiptItemDto.Price, UserDtos = receiptItemDto.Users.ToList(), FinancialProjectId = model.FinancialProjectId }; await Mediator.Send(updateCommand); } #endregion return(Json(new { result = "Redirect", url = Url.Action("Index", "Project", new { id = model.FinancialProjectId }) })); }