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 } }); }
// 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" }) }); }
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); }
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); }
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); }