Example #1
0
        public static IEnumerable <ProductQuantity> CreateProductsForHalfPriceDiscounts()
        {
            var productBuilder = new ProductBuilder();

            return(new List <ProductQuantity>
            {
                new ProductQuantity
                {
                    Product = productBuilder.Create("Apples")
                              .WithProductId(1)
                              .WithUnitPrice(0.33m),
                    Quantity = 1
                },
                new ProductQuantity
                {
                    Product = productBuilder.Create("Beans")
                              .WithProductId(2)
                              .WithUnitPrice(0.65m),
                    Quantity = 4
                },
                new ProductQuantity
                {
                    Product = productBuilder.Create("Bread")
                              .WithProductId(3)
                              .WithUnitPrice(0.80m),
                    Quantity = 2
                }
            });
        }
Example #2
0
        // This discounts list would be read from a configuration file or database as not to change the code
        // everytime a discount was added/amended/removed
        public static IEnumerable <IDiscount> CreateDiscounts()
        {
            var productBuilder = new ProductBuilder();

            return(new List <IDiscount>
            {
                new PercentageDiscount(
                    new DiscountedProduct
                {
                    ProductId = 1,
                    Name = "Apples"
                }
                    ,
                    0.10m),

                new HalfPriceDiscount(
                    new ProductQuantity
                {
                    Product = productBuilder.Create("Beans")
                              .WithProductId(2),
                    Quantity = 2
                },
                    new DiscountedProduct()
                {
                    ProductId = 3,
                    Name = "Bread"
                })
            });
        }
Example #3
0
        public async Task Orders_can_be_created()
        {
            // arrange
            var user    = UserBuilder.Create().WithRole(UserRole.Customer).WithEmail("*****@*****.**").WithRole(UserRole.Customer).Active().Build(ArrangeRepositoryContext);
            var company = CompanyBuilder.Create().WithName("test company").WithUsers(user).Build(ArrangeRepositoryContext);
            var product = ProductBuilder.Create().WithName("test Prod").Active().Build(ArrangeRepositoryContext);

            var amount = 2;

            var request = new CreateOrder.Command
            {
                DeliveryDate  = DateTime.Now.AddDays(1),
                UserId        = user.Id,
                OrderProducts = new List <OrderItemDto> {
                    new OrderItemDto()
                    {
                        ProductId = product.Id,
                        Amount    = amount
                    }
                }
            };
            var controller = new OrdersController(Mediator);

            controller.SetUserId(user.Id);

            // act
            var result = await controller.CreateAsync(request);

            // assert
            result.Should().NotBeNullOrWhiteSpace();

            var subject = AssertRepositoryContext.Orders
                          .Include(x => x.OrderProducts)
                          .ThenInclude(x => x.Product)
                          .FirstOrDefault();

            subject.Should().NotBeNull();
            subject.DeliveryDate.Should().Be(request.DeliveryDate);
            subject.UserId.Should().Be(request.UserId);
            subject.DestinationCompanyId.Should().Be(company.Id);

            subject.OrderProducts.Count.Should().Be(1);
            subject.OrderProducts.First().ProductId.Should().Be(product.Id);
            subject.OrderProducts.First().Amount.Should().Be(amount);
        }
Example #4
0
        public static IEnumerable <ProductQuantity> CreateProducts(int numberOfProductsToCreate)
        {
            var products = new List <ProductQuantity>();

            var productBuilder = new ProductBuilder();

            for (int i = 0; i < numberOfProductsToCreate; i++)
            {
                products.Add(new ProductQuantity
                {
                    Product = productBuilder.Create("TestProduct")
                              .WithProductId(i)
                              .WithUnitPrice(1.00m),
                    Quantity = 1
                });
            }

            return(products);
        }
Example #5
0
        public async Task Can_not_create_order_in_unavailability_duration()
        {
            // arrange
            var user    = UserBuilder.Create().WithRole(UserRole.Customer).WithEmail("*****@*****.**").WithRole(UserRole.Customer).Active().Build(ArrangeRepositoryContext);
            var company = CompanyBuilder.Create().WithName("test company").WithUsers(user).Removed().Build(ArrangeRepositoryContext);

            var product = ProductBuilder.Create().WithName("test Prod").Active().Build(ArrangeRepositoryContext);

            var unavailability = UnavailabilityBuilder.Create().From(DateTime.Now).To(DateTime.Now.AddDays(3)).WithReason(UnavailabilityReason.Sick).Build(ArrangeRepositoryContext);

            var request = new CreateOrder.Command
            {
                DeliveryDate  = DateTime.Now.AddDays(1),
                UserId        = user.Id,
                OrderProducts = new List <OrderItemDto> {
                    new OrderItemDto()
                    {
                        ProductId = product.Id,
                        Amount    = 1
                    }
                }
            };

            var controller = new OrdersController(Mediator);

            controller.SetUserId(user.Id);

            // act
            Func <Task> act       = () => controller.CreateAsync(request);
            var         exception = await Assert.ThrowsAsync <BadRequestException>(act);

            //assert
            exception.Message.Should().Be("Can not create order in unavailability duration");

            // assert
            var subject = AssertRepositoryContext.Orders.ToList();

            subject.Count.Should().Be(0);
        }