8.2.1 Defining the Cart Entity; UNIT TEST: TESTING THE CART
parent
2b1fee6172
commit
697f6017dd
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace SportsStore.Domain.Entities
|
namespace SportsStore.Domain.Entities
|
||||||
{
|
{
|
||||||
class Cart
|
public class Cart
|
||||||
{
|
{
|
||||||
private List<CartLine> lineCollection = new List<CartLine>();
|
private List<CartLine> lineCollection = new List<CartLine>();
|
||||||
|
|
||||||
|
@ -35,6 +35,11 @@ namespace SportsStore.Domain.Entities
|
||||||
lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID);
|
lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public decimal ComputeTotalValue()
|
||||||
|
{
|
||||||
|
return lineCollection.Sum(e => e.Product.Price * e.Quantity);
|
||||||
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
lineCollection.Clear();
|
lineCollection.Clear();
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using SportsStore.Domain.Entities;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace SportsStore.UnitTests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class CartTests
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void Can_Add_New_Lines()
|
||||||
|
{
|
||||||
|
// Arrange - create some test products
|
||||||
|
Product p1 = new Product { ProductID = 1, Name = "P1" };
|
||||||
|
Product p2 = new Product { ProductID = 2, Name = "P2" };
|
||||||
|
|
||||||
|
// Arrange - create a new cart
|
||||||
|
Cart target = new Cart();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
target.AddItem(p1, 1);
|
||||||
|
target.AddItem(p2, 1);
|
||||||
|
CartLine[] results = target.Lines.ToArray();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(results.Length, 2);
|
||||||
|
Assert.AreEqual(results[0].Product, p1);
|
||||||
|
Assert.AreEqual(results[1].Product, p2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Can_Add_Quantity_For_Existing_Lines()
|
||||||
|
{
|
||||||
|
// Arrange - create some test products
|
||||||
|
Product p1 = new Product { ProductID = 1, Name = "P1" };
|
||||||
|
Product p2 = new Product { ProductID = 2, Name = "P2" };
|
||||||
|
|
||||||
|
// Arrange - create a new cart
|
||||||
|
Cart target = new Cart();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
target.AddItem(p1, 1);
|
||||||
|
target.AddItem(p2, 1);
|
||||||
|
target.AddItem(p1, 10);
|
||||||
|
CartLine[] results = target.Lines.OrderBy(c => c.Product.ProductID).ToArray();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(results.Length, 2);
|
||||||
|
Assert.AreEqual(results[0].Quantity, 11);
|
||||||
|
Assert.AreEqual(results[1].Quantity, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Can_Remove_Line()
|
||||||
|
{
|
||||||
|
// Arrange - create some test products
|
||||||
|
Product p1 = new Product { ProductID = 1, Name = "P1" };
|
||||||
|
Product p2 = new Product { ProductID = 2, Name = "P2" };
|
||||||
|
Product p3 = new Product { ProductID = 3, Name = "P3" };
|
||||||
|
|
||||||
|
// Arrange - create a new cart
|
||||||
|
Cart target = new Cart();
|
||||||
|
|
||||||
|
// Arrange - add some products to the cart
|
||||||
|
target.AddItem(p1, 1);
|
||||||
|
target.AddItem(p2, 3);
|
||||||
|
target.AddItem(p3, 5);
|
||||||
|
target.AddItem(p2, 1);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
target.RemoveLine(p2);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(target.Lines.Where(c => c.Product == p2).Count(), 0);
|
||||||
|
Assert.AreEqual(target.Lines.Count(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Calculate_Cart_Total()
|
||||||
|
{
|
||||||
|
// Arrange - create some test products
|
||||||
|
Product p1 = new Product { ProductID = 1, Name = "P1", Price = 100M };
|
||||||
|
Product p2 = new Product { ProductID = 2, Name = "P2", Price = 50M };
|
||||||
|
|
||||||
|
// Arrange - create a new cart
|
||||||
|
Cart target = new Cart();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
target.AddItem(p1, 1);
|
||||||
|
target.AddItem(p2, 1);
|
||||||
|
target.AddItem(p1, 3);
|
||||||
|
decimal result = target.ComputeTotalValue();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(result, 450M);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Can_Clear_Contents()
|
||||||
|
{
|
||||||
|
// Arrange - create some test products
|
||||||
|
Product p1 = new Product { ProductID = 1, Name = "P1", Price = 100M };
|
||||||
|
Product p2 = new Product { ProductID = 2, Name = "P2", Price = 50M };
|
||||||
|
|
||||||
|
// Arrange - create a new cart
|
||||||
|
Cart target = new Cart();
|
||||||
|
|
||||||
|
// Arrange - add some items
|
||||||
|
target.AddItem(p1, 1);
|
||||||
|
target.AddItem(p2, 1);
|
||||||
|
|
||||||
|
// Act - reset the cart
|
||||||
|
target.Clear();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.AreEqual(target.Lines.Count(), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -90,6 +90,7 @@
|
||||||
<Compile Include="App_Start\NinjectWebCommon.cs" />
|
<Compile Include="App_Start\NinjectWebCommon.cs" />
|
||||||
<Compile Include="UnitTest1.cs" />
|
<Compile Include="UnitTest1.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="CartTests.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
|
|
Loading…
Reference in New Issue