public static async Task CreateAsync_CatalogueItemSavedToDb(
            [Frozen] ApplicationDbContext context,
            [Frozen] Mock <ICreateOrderItemValidator> orderItemValidator,
            [Frozen] Mock <IServiceRecipientService> serviceRecipientService,
            Order order,
            CatalogueItemId catalogueItemId,
            CreateOrderItemModel model,
            CreateOrderItemService service)
        {
            context.Order.Add(order);
            await context.SaveChangesAsync();

            var aggregateValidationResult = new AggregateValidationResult();

            aggregateValidationResult.AddValidationResult(new ValidationResult(), 0);

            var catalogueItemType = Enum.Parse <CatalogueItemType>(model.CatalogueItemType, true);

            var serviceRecipients = model.ServiceRecipients.Select(r => new ServiceRecipient(r.OdsCode, r.Name));

            orderItemValidator.Setup(o => o.Validate(order, model, catalogueItemType)).Returns(aggregateValidationResult);
            serviceRecipientService.Setup(r => r.AddOrUpdateServiceRecipients(It.IsAny <IEnumerable <ServiceRecipient> >()))
            .ReturnsAsync(serviceRecipients.ToDictionary(r => r.OdsCode));

            await service.CreateAsync(order, catalogueItemId, model);

            var expectedOrderItem = context.Set <OrderItem>().First(o => o.CatalogueItem.Id.Equals(catalogueItemId));

            expectedOrderItem.CatalogueItem.Name.Should().Be(model.CatalogueItemName);
        }
        public static async Task CreateAsync_RemovesDefaultDeliveryDate(
            [Frozen] ApplicationDbContext context,
            [Frozen] Mock <ICreateOrderItemValidator> orderItemValidator,
            [Frozen] Mock <IServiceRecipientService> serviceRecipientService,
            Order order,
            CatalogueItemId catalogueItemId,
            CreateOrderItemModel model,
            CreateOrderItemService service)
        {
            order.SetDefaultDeliveryDate(catalogueItemId, DateTime.Now.AddDays(10));
            context.Order.Add(order);
            await context.SaveChangesAsync();

            order.DefaultDeliveryDates.Should().NotBeEmpty();

            var aggregateValidationResult = new AggregateValidationResult();

            aggregateValidationResult.AddValidationResult(new ValidationResult(), 0);

            var catalogueItemType = Enum.Parse <CatalogueItemType>(model.CatalogueItemType, true);

            var serviceRecipients = model.ServiceRecipients.Select(r => new ServiceRecipient(r.OdsCode, r.Name));

            orderItemValidator.Setup(o => o.Validate(order, model, catalogueItemType)).Returns(aggregateValidationResult);
            serviceRecipientService.Setup(r => r.AddOrUpdateServiceRecipients(It.IsAny <IEnumerable <ServiceRecipient> >()))
            .ReturnsAsync(serviceRecipients.ToDictionary(r => r.OdsCode));

            await service.CreateAsync(order, catalogueItemId, model);

            var defaultDeliveryDateResult = context.Set <DefaultDeliveryDate>().FirstOrDefault(d => d.OrderId.Equals(order.Id));

            defaultDeliveryDateResult.Should().BeNull();
        }
        public static async Task CreateAsync_ValidAggregateValidation_SuccessIsTrue(
            [Frozen] Mock <ICreateOrderItemValidator> orderItemValidator,
            Order order,
            CatalogueItemId catalogueItemId,
            CreateOrderItemModel model,
            CreateOrderItemService service)
        {
            var aggregateValidationResult = new AggregateValidationResult();

            aggregateValidationResult.AddValidationResult(new ValidationResult(), 0);

            var catalogueItemType = Enum.Parse <CatalogueItemType>(model.CatalogueItemType, true);

            orderItemValidator.Setup(o => o.Validate(order, model, catalogueItemType)).Returns(aggregateValidationResult);

            var result = await service.CreateAsync(order, catalogueItemId, model);

            result.Success.Should().BeTrue();
        }
 public static void Constructor_NullServiceRecipient_ThrowsArgumentNullException(
     ApplicationDbContext context,
     OrderItemValidator orderItemValidator)
 {
     Assert.Throws <ArgumentNullException>(() => _ = new CreateOrderItemService(context, orderItemValidator, null));
 }
 public static void Constructor_NullDbContext_ThrowsArgumentNullException(
     OrderItemValidator orderItemValidator,
     ServiceRecipientService serviceRecipientService)
 {
     Assert.Throws <ArgumentNullException>(() => _ = new CreateOrderItemService(null, orderItemValidator, serviceRecipientService));
 }