Skip to content

Commit

Permalink
OrderFactoryのテストとを追加。
Browse files Browse the repository at this point in the history
  • Loading branch information
fkoyama committed Jan 22, 2025
1 parent 90e70d4 commit 177774d
Showing 1 changed file with 131 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
using Dressca.ApplicationCore.Baskets;
using Dressca.ApplicationCore.Catalog;
using Dressca.ApplicationCore.Ordering;

namespace Dressca.UnitTests.ApplicationCore.Ordering;

public class OrderFactoryTest
{
[Fact]
public void CreateOrder_正しくインスタンスが生成される_basketItemに対応したorderItemが登録される()
{
// Arrange
var basket = new Basket() { BuyerId = "dummyId" };
var basketItem1 = new BasketItem() { CatalogItemId = 1L, UnitPrice = 1000m, Quantity = 1 };
var basketItem2 = new BasketItem() { CatalogItemId = 2L, UnitPrice = 2000m, Quantity = 2 };
basket.AddItem(basketItem1.CatalogItemId, basketItem1.UnitPrice, basketItem1.Quantity);
basket.AddItem(basketItem2.CatalogItemId, basketItem2.UnitPrice, basketItem2.Quantity);

var catalogItems = CreateDefaultCatalogItems();
var shipTo = CreateDefaultShipTo();
var factory = new OrderFactory();

// Act
var result = factory.CreateOrder(basket, catalogItems, shipTo);

// Assert
Assert.Collection(

Check failure on line 27 in samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/Ordering/OrderFactoryTest.cs

View workflow job for this annotation

GitHub Actions / Test results

Dressca.UnitTests.ApplicationCore.Ordering.OrderFactoryTest ► CreateOrder_正しくインスタンスが生成される_basketItemに対応したorderItemが登録される

Failed test found in: samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/TestResults/_fv-az1692-448_2025-01-23_00_36_16.trx Error: Assert.Collection() Failure: Item comparison failure ↓ (pos 0) Collection: [OrderItem { Assets = [], Id = 0, ItemOrdered = CatalogItemOrdered { CatalogItemId = 1, ProductName = クルーネック Tシャツ - ブラック, ProductCode = C000000001 }, Order = (throws InvalidOperationException), OrderId = 0, ··· }, OrderItem { Assets = [], Id = 0, ItemOrdered = CatalogItemOrdered { CatalogItemId = 2, ProductName = 裏起毛 スキニーデニム, ProductCode = C000000002 }, Order = (throws InvalidOperationException), OrderId = 0, ··· }] Error: Assert.Collection() Failure: Mismatched item count Collection: [] Expected count: 1 Actual count: 0 Stack Trace: /home/runner/work/maris/maris/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/Ordering/OrderFactoryTest.cs(39,0): at Dressca.UnitTests.ApplicationCore.Ordering.OrderFactoryTest.<>c__DisplayClass0_0.<CreateOrder_正しくインスタンスが生成される_basketItemに対応したorderItemが登録される>b__0(OrderItem orderItem)
Raw output
Assert.Collection() Failure: Item comparison failure
             ↓ (pos 0)
Collection: [OrderItem { Assets = [], Id = 0, ItemOrdered = CatalogItemOrdered { CatalogItemId = 1, ProductName = クルーネック Tシャツ - ブラック, ProductCode = C000000001 }, Order = (throws InvalidOperationException), OrderId = 0, ··· }, OrderItem { Assets = [], Id = 0, ItemOrdered = CatalogItemOrdered { CatalogItemId = 2, ProductName = 裏起毛 スキニーデニム, ProductCode = C000000002 }, Order = (throws InvalidOperationException), OrderId = 0, ··· }]
Error:      Assert.Collection() Failure: Mismatched item count
            Collection:     []
            Expected count: 1
            Actual count:   0
            Stack Trace:
              /home/runner/work/maris/maris/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/Ordering/OrderFactoryTest.cs(39,0): at Dressca.UnitTests.ApplicationCore.Ordering.OrderFactoryTest.<>c__DisplayClass0_0.<CreateOrder_正しくインスタンスが生成される_basketItemに対応したorderItemが登録される>b__0(OrderItem orderItem)
   at Dressca.UnitTests.ApplicationCore.Ordering.OrderFactoryTest.CreateOrder_正しくインスタンスが生成される_basketItemに対応したorderItemが登録される() in /home/runner/work/maris/maris/samples/Dressca/dressca-backend/tests/Dressca.UnitTests.ApplicationCore/Ordering/OrderFactoryTest.cs:line 27
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
result.OrderItems,
orderItem =>
{
Assert.Equal(basketItem1.Quantity, orderItem.Quantity);
Assert.Equal(basketItem1.UnitPrice, orderItem.UnitPrice);

var catalogItem = catalogItems.First(c => c.Id == basketItem1.CatalogItemId);
Assert.Equal(catalogItem.ProductCode, orderItem.ItemOrdered.ProductCode);
Assert.Equal(catalogItem.Name, orderItem.ItemOrdered.ProductName);
Assert.Equal(catalogItem.Id, orderItem.ItemOrdered.CatalogItemId);

Assert.Collection(catalogItem.Assets, asset =>
{
Assert.Equal(asset.AssetCode, orderItem.Assets.First().AssetCode);
Assert.Equal(orderItem.Id, orderItem.Assets.First().OrderItemId);
});
},
orderItem =>
{
Assert.Equal(basketItem2.Quantity, orderItem.Quantity);
Assert.Equal(basketItem2.UnitPrice, orderItem.UnitPrice);

var catalogItem = catalogItems.First(c => c.Id == basketItem2.CatalogItemId);
Assert.Equal(catalogItem.ProductCode, orderItem.ItemOrdered.ProductCode);
Assert.Equal(catalogItem.Name, orderItem.ItemOrdered.ProductName);
Assert.Equal(catalogItem.Id, orderItem.ItemOrdered.CatalogItemId);
});
}

[Fact]
public void CreateOrder_basketがnullの場合_ArgumentExceptionが発生する()
{
// Arrange
var catalogItems = CreateDefaultCatalogItems();
var shipTo = CreateDefaultShipTo();
var factory = new OrderFactory();

// Act
var action = () => factory.CreateOrder(null!, catalogItems, shipTo);

// Assert
Assert.Throws<ArgumentNullException>(action);
}

[Fact]
public void CreateOrder_catalogItemsがnullの場合_ArgumentExceptionが発生する()
{
// Arrange
var basket = new Basket() { BuyerId = "dummyId" };
basket.AddItem(1L, 1000m, 2);
var shipTo = CreateDefaultShipTo();
var factory = new OrderFactory();

// Act
var action = () => factory.CreateOrder(basket, null!, shipTo);

// Assert
Assert.Throws<ArgumentNullException>(action);
}

[Fact]
public void CreateOrder_shipToAddressがnullの場合_ArgumentExceptionが発生する()
{
// Arrange
var basket = new Basket() { BuyerId = "dummyId" };
basket.AddItem(1L, 1000m, 2);
var catalogItems = CreateDefaultCatalogItems();
var factory = new OrderFactory();

// Act
var action = () => factory.CreateOrder(basket, catalogItems, null!);

// Assert
Assert.Throws<ArgumentNullException>(action);
}

private static Address CreateDefaultAddress()
{
const string defaultPostalCode = "100-8924";
const string defaultTodofuken = "東京都";
const string defaultShikuchoson = "千代田区";
const string defaultAzanaAndOthers = "永田町1-10-1";

return new Address(defaultPostalCode, defaultTodofuken, defaultShikuchoson, defaultAzanaAndOthers);
}

private static ShipTo CreateDefaultShipTo()
{
const string defaultFullName = "国会 太郎";
var address = CreateDefaultAddress();
return new ShipTo(defaultFullName, address);
}

private static IReadOnlyList<CatalogItem> CreateDefaultCatalogItems()
{
var catalog = new List<CatalogItem>()
{
new() { CatalogCategoryId = 1L, CatalogBrandId = 3L, Description = "定番の無地ロングTシャツです。", Name = "クルーネック Tシャツ - ブラック", Price = 1980m, ProductCode = "C000000001", Id = 1L, RowVersion = [255] },
new() { CatalogCategoryId = 1L, CatalogBrandId = 2L, Description = "暖かいのに着膨れしない起毛デニムです。", Name = "裏起毛 スキニーデニム", Price = 4800m, ProductCode = "C000000002", Id = 2L, RowVersion = [255] },
new() { CatalogCategoryId = 1L, CatalogBrandId = 1L, Description = "あたたかく肌ざわりも良いウール100%のロングコートです。", Name = "ウールコート", Price = 49800m, ProductCode = "C000000003", Id = 3L, RowVersion = [255] },
};
return catalog;
}
}

0 comments on commit 177774d

Please sign in to comment.