public void GivenOrderItemForGood1WithRequiredMarkupPercentage_WhenDerivingPrices_ThenCalculateActualUnitPrice() { this.InstantiateObjects(this.DatabaseSession); var item1 = new SalesOrderItemBuilder(this.DatabaseSession).WithProduct(this.good).WithQuantityOrdered(3).WithRequiredMarkupPercentage(45).Build(); this.order.AddSalesOrderItem(item1); item1.Confirm(); this.DatabaseSession.Derive(true); Assert.AreEqual(10.15M, item1.ActualUnitPrice); Assert.AreEqual(10M, item1.UnitBasePrice); Assert.AreEqual(0, item1.UnitDiscount); Assert.AreEqual(0, item1.UnitSurcharge); Assert.AreEqual(10.15M, item1.CalculatedUnitPrice); Assert.AreEqual(2.13, item1.UnitVat); Assert.AreEqual(30.45M, item1.TotalBasePrice); Assert.AreEqual(0, item1.TotalDiscount); Assert.AreEqual(0, item1.TotalSurcharge); Assert.AreEqual(30.45M, item1.TotalExVat); Assert.AreEqual(6.39M, item1.TotalVat); Assert.AreEqual(36.84M, item1.TotalIncVat); Assert.AreEqual(7, item1.UnitPurchasePrice); Assert.AreEqual(decimal.Round(((item1.UnitBasePrice / this.goodPurchasePrice.Price) - 1) * 100, 2), item1.InitialMarkupPercentage); Assert.AreEqual(decimal.Round(((item1.CalculatedUnitPrice / this.goodPurchasePrice.Price) - 1) * 100, 2), item1.MaintainedMarkupPercentage); Assert.AreEqual(decimal.Round(((item1.UnitBasePrice - this.goodPurchasePrice.Price) / item1.UnitBasePrice) * 100, 2), item1.InitialProfitMargin); Assert.AreEqual(decimal.Round(((item1.CalculatedUnitPrice - this.goodPurchasePrice.Price) / item1.CalculatedUnitPrice) * 100, 2), item1.MaintainedProfitMargin); Assert.AreEqual(30.45M, this.order.TotalBasePrice); Assert.AreEqual(0, this.order.TotalDiscount); Assert.AreEqual(0, this.order.TotalSurcharge); Assert.AreEqual(30.45M, this.order.TotalExVat); Assert.AreEqual(6.39M, this.order.TotalVat); Assert.AreEqual(36.84M, this.order.TotalIncVat); Assert.AreEqual(10.15M, this.order.TotalListPrice); Assert.AreEqual(7, this.order.TotalPurchasePrice); }