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));
        }
Ejemplo n.º 2
0
        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);
        }