From 89b17e88676fcfb680499c8c056ae30f147666d1 Mon Sep 17 00:00:00 2001 From: Fumika Koyama Date: Wed, 29 Jan 2025 10:35:03 +0900 Subject: [PATCH] =?UTF-8?q?Order.OrderItems=E3=82=92=E6=A4=9C=E8=A8=8E?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShoppingApplicationServiceTest.cs | 75 ++++++++++++++++++- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/ApplicationService/ShoppingApplicationServiceTest.cs b/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/ApplicationService/ShoppingApplicationServiceTest.cs index b10d0b830..397bc319c 100644 --- a/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/ApplicationService/ShoppingApplicationServiceTest.cs +++ b/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/ApplicationService/ShoppingApplicationServiceTest.cs @@ -441,9 +441,17 @@ public async Task AddItemToBasketAsync_カタログリポジトリに存在す It.Is(b => b.Items.Count == 1), AnyToken), Times.Once); basketRepo.Verify( - r => r.UpdateAsync( - It.Is(b => b.Items.ToList().Exists(item => (item.CatalogItemId == catalogItem.Id) && (item.Quantity == 5) && (item.UnitPrice == catalogItem.Price))), AnyToken), - Times.Once); + r => r.UpdateAsync( + It.Is(b => b.Items.First().CatalogItemId == catalogItem.Id), AnyToken), + Times.Once); + basketRepo.Verify( + r => r.UpdateAsync( + It.Is(b => b.Items.First().Quantity == 5), AnyToken), + Times.Once); + basketRepo.Verify( + r => r.UpdateAsync( + It.Is(b => b.Items.First().UnitPrice == catalogItem.Price), AnyToken), + Times.Once); } [Theory] @@ -660,6 +668,67 @@ public async Task CheckoutAsync_買い物かごにアイテムが存在する_ Times.Once); } + [Fact] + public async Task CheckoutAsync_買い物かごにアイテムが存在する_注文リポジトリのAddAsyncの引数に注文アイテムが正しく設定されている() + { + // Arrange + var dummyBuyerId = "dummyId"; + var dummyBasket = new Basket { BuyerId = dummyBuyerId }; + dummyBasket.AddItem(10L, 1000); + var shipTo = CreateDefaultShipTo(); + var catalogItems = new List + { + new() { CatalogCategoryId = 100L, CatalogBrandId = 110L, Description = "説明1", Name = "ダミー商品1", Price = 1000m, ProductCode = "C000000001", Id = 10L }, + }; + var order = new Order(CreateDefaultOrderItems()) { BuyerId = dummyBuyerId, ShipToAddress = shipTo }; + + var basketRepo = new Mock(); + basketRepo + .Setup(r => r.GetWithBasketItemsAsync(dummyBuyerId, AnyToken)) + .ReturnsAsync(dummyBasket); + basketRepo + .Setup(r => r.RemoveAsync(dummyBasket, AnyToken)) + .Returns(Task.CompletedTask); + var orderRepo = new Mock(); + orderRepo + .Setup(r => r.AddAsync(order, AnyToken)) + .ReturnsAsync(order); + var orderFactory = new Mock(); + orderFactory + .Setup(f => f.CreateOrder(dummyBasket, catalogItems, shipTo)) + .Returns(order); + var catalogRepo = new Mock(); + catalogRepo + .Setup(r => r.FindAsync(It.IsAny>>(), AnyToken)) + .ReturnsAsync(catalogItems.AsReadOnly()); + var catalogDomainService = Mock.Of(); + var logger = this.CreateTestLogger(); + var service = new ShoppingApplicationService(basketRepo.Object, orderRepo.Object, orderFactory.Object, catalogRepo.Object, catalogDomainService, logger); + + // Act + await service.CheckoutAsync(dummyBuyerId, shipTo); + + // Assert + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.Count == 1), AnyToken), + Times.Once); + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.First().Quantity == 1), AnyToken), + Times.Once); + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.First().UnitPrice == 1000m), AnyToken), + Times.Once); + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.First().ItemOrdered.ProductName == "ダミー商品1"), AnyToken), + Times.Once); + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.First().ItemOrdered.ProductCode == "C000000001"), AnyToken), + Times.Once); + orderRepo.Verify( + r => r.AddAsync(It.Is(o => o.OrderItems.First().ItemOrdered.CatalogItemId == 1), AnyToken), + Times.Once); + } + [Fact] public async Task CheckoutAsync_買い物かごにアイテムが存在する_買い物かごリポジトリのRemoveAsyncを1度だけ呼び出す() {