public void ProductFulfillmentServiceTests_Tests() { // Arrange var supplierService = new SupplierService(); var supplierShippingCostCalculator = new SupplierShippingCostCalculator(); var stockCalculatorService = new StockCalculatorService(); var purchaseOrderFulfillmentService = new PurchaseOrderFulfillmentService(stockCalculatorService); var productFulfillmentService = new ProductFulfillmentService(supplierService, supplierShippingCostCalculator, purchaseOrderFulfillmentService); // Act var result = productFulfillmentService.GetPurchaseOrderItems(new TestData().Create()); // Assert Assert.NotEmpty(result); Assert.All(result, item => Assert.False(item.SelfFulfillment)); }
static void Main(string[] args) { // Our data store var purchaseRequirements = new TestData().Create(); // Dependencies at top of composition root var supplierService = new SupplierService(); var supplierShippingCostCalculator = new SupplierShippingCostCalculator(); var stockCalculatorService = new StockCalculatorService(); var purchaseOrderFulfillmentService = new PurchaseOrderFulfillmentService(stockCalculatorService); var productFulfillmentService = new ProductFulfillmentService(supplierService, supplierShippingCostCalculator, purchaseOrderFulfillmentService); var serviceTypeFulfillmentService = new ServiceTypeFulfillmentService(); // Optimize and generate purchase orders for suppliers to fulfill var purchaseOptimizer = new PurchaseOptimizer(new List <IFulfillmentService>() { serviceTypeFulfillmentService, productFulfillmentService }); purchaseOptimizer.Optimize(purchaseRequirements); Console.Read(); }
public void Test_Supplier_Shipping_Calculator(Supplier supplier) { // Arrange var supplierShippingCostCalculator = new SupplierShippingCostCalculator(); var quantityRequestedOverMax = supplier.ShippingCostMaxOrderValue + 1m; var resultOverMax = supplierShippingCostCalculator.CalculateShippingCost(supplier, quantityRequestedOverMax); var quantityRequestedUnderMin = supplier.ShippingCostMinOrderValue - 1m; var resultUnderMin = supplierShippingCostCalculator.CalculateShippingCost(supplier, quantityRequestedUnderMin); var random = new Random(); var minRandomValue = supplier.ShippingCostMinOrderValue == 0 ? 0 : supplier.ShippingCostMinOrderValue + 1m; var maxRandomValue = supplier.ShippingCostMaxOrderValue == 0 ? 0 : supplier.ShippingCostMaxOrderValue - 1m; var randomQuantityBetweenMinAndMax = random.Next((int)minRandomValue, (int)maxRandomValue); // Act var resultBetweenRange = supplierShippingCostCalculator.CalculateShippingCost(supplier, randomQuantityBetweenMinAndMax); // Assert Assert.Equal(0m, resultOverMax); Assert.Equal(0m, resultUnderMin); Assert.Equal(supplier.ShippingCost, resultBetweenRange); }