using After; using static BeforeAfter.Tests.TestData.ClientBuilder; using static BeforeAfter.Tests.TestData.OrderBuilder; namespace BeforeAfter.Tests; /// /// EXERCISE 2 — the domain gained OrderLines; persistence still stores one /// flat row per order. (This is the solution participants arrive at from the /// stub in EXERCISE2.md.) /// public class OrderLinesEvolutionTests { [Fact] // EXERCISE STEP 3a public void A_reloaded_order_can_be_discounted() { var db = new DbContext(); var order = ValidOrder().WithDescription("big order").WithTotal(150_00).Build(); var client = ValidClient().WithName("Acme").WithOrder(order).Build(); db.Save(client); db.Save(order); var loaded = db.LoadOrder(order.Id)!; // The discount works off the computed total of the RELOADED order: var discounted = DiscountCalculator.CalculateDiscount( loaded, discountBarrierCents: 100_00, discountPercentage: 10); Assert.Equal(135_00, discounted.DiscountedTotalInCents); Assert.Equal(10, discounted.DiscountPercentage); } [Fact] // EXERCISE STEP 3b — the accepted loss public void A_multi_line_order_flattens_to_a_single_line_when_stored() { var db = new DbContext(); var order = ValidOrder().WithDescription("mixed order").Build(); order.Lines.Add(new OrderLine("first item", 100_00)); order.Lines.Add(new OrderLine("second item", 50_00)); db.Save(order); var loaded = db.LoadOrder(order.Id)!; // Storage flattened the order: one line, the flat total, and the // order-level description. Documented, not hidden. var line = Assert.Single(loaded.Lines); Assert.Equal(150_00, line.AmountInCents); Assert.Equal("mixed order", line.Description); } }