public async Task itemItemsAreValidated() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var headerValidator = new OrderHeaderValidator(fakeClock) as IMessageValidator <OrderHeader>; var itemValidator = new itemItemValidator() as IMessageValidator <ItemAsset>; var validator = new ItemOutValidator(itemValidator); var header = new OrderHeader { OrderId = "ABC123", OrderDate = currentInstant.ToDateTimeUtc() }; var item = new List <ItemAsset>(); item.Add(new ItemAsset { Name = "Item", Location = null }); var target = new LineItem { Assets = item }; var result = await validator.ValidateAsync(target); var failurePath = $"{ nameof(LineItem.Assets) }[0].{ nameof(ItemAsset.Location) }"; result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => error.MemberPath == failurePath, "because the item item value was not set"); }
public async Task OrderIdIsRequired() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var validator = new OrderHeaderValidator(fakeClock); var target = new OrderHeader { OrderId = null, OrderDate = currentInstant.ToDateTimeUtc() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => ((error.MemberPath == nameof(OrderHeader.OrderId)) && (error.Code == ErrorCode.ValueIsRequired.ToString())), "because the order id was not provided"); }
public async Task OrderDateIsNotRequired() { var orderId = new String('1', OrderHeaderValidator.OrderIdMaxLength - 1); var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var validator = new OrderHeaderValidator(fakeClock); var target = new OrderHeader { OrderId = orderId, OrderDate = null }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().HaveCount(0, "because a null order date is allowed"); }
public async Task OrderIdLengthIsEnforced() { var orderId = new String('j', OrderHeaderValidator.OrderIdMaxLength + 1); var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var validator = new OrderHeaderValidator(fakeClock); var target = new OrderHeader { OrderId = orderId, OrderDate = currentInstant.ToDateTimeUtc() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => ((error.MemberPath == nameof(OrderHeader.OrderId)) && (error.Code == ErrorCode.LengthIsInvalid.ToString())), "because the order id was too long"); }
public async Task OrderDateIsValidated() { var orderId = new String('5', OrderHeaderValidator.OrderIdMaxLength - 1); var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var laterInstant = currentInstant.Plus(Duration.FromHours(1)); var fakeClock = new FakeClock(currentInstant); var validator = new OrderHeaderValidator(fakeClock); var target = new OrderHeader { OrderId = orderId, OrderDate = laterInstant.ToDateTimeUtc() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => (error.MemberPath == nameof(OrderHeader.OrderDate)), "because the order date was in the future"); }
public async Task RequestHeaderIsRequired() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var headerValidator = new OrderHeaderValidator(fakeClock) as IMessageValidator <OrderHeader>; var itemValidator = new itemItemValidator() as IMessageValidator <ItemAsset>; var itemOutValidator = new ItemOutValidator(itemValidator) as IMessageValidator <LineItem>; var validator = new OrderFulfillmentMessageValidator(headerValidator, itemOutValidator); var target = new OrderFulfillmentMessage { OrderRequestHeader = null, LineItems = new List <LineItem>() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => ((error.MemberPath == nameof(OrderFulfillmentMessage.OrderRequestHeader)) && (error.Code == ErrorCode.ValueIsRequired.ToString())), "because the order header was not provided"); }
public async Task RequestHeaderIsValidated() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var headerValidator = new OrderHeaderValidator(fakeClock) as IMessageValidator <OrderHeader>; var itemValidator = new itemItemValidator() as IMessageValidator <ItemAsset>; var itemOutValidator = new ItemOutValidator(itemValidator) as IMessageValidator <LineItem>; var validator = new OrderFulfillmentMessageValidator(headerValidator, itemOutValidator); var header = new OrderHeader { OrderId = null, OrderDate = currentInstant.ToDateTimeUtc() }; var target = new OrderFulfillmentMessage { OrderRequestHeader = header, LineItems = new List <LineItem>() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => (error.MemberPath == $"{ nameof(OrderFulfillmentMessage.OrderRequestHeader) }.{ nameof(OrderHeader.OrderId) }"), "because the order id was not provided in the header"); }
public async Task EmptyItemOutIsValid() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var headerValidator = new OrderHeaderValidator(fakeClock) as IMessageValidator <OrderHeader>; var itemValidator = new itemItemValidator() as IMessageValidator <ItemAsset>; var itemOutValidator = new ItemOutValidator(itemValidator) as IMessageValidator <LineItem>; var validator = new OrderFulfillmentMessageValidator(headerValidator, itemOutValidator); var header = new OrderHeader { OrderId = "ABC123", OrderDate = currentInstant.ToDateTimeUtc() }; var target = new OrderFulfillmentMessage { OrderRequestHeader = header, LineItems = new List <LineItem>() }; var result = await validator.ValidateAsync(target); result.Should().NotBeNull("because a validation result should have been returned"); result.Should().BeEmpty("because an empty itemout set is allowed"); }
public async Task ItemOutsAreValidated() { var currentInstant = Instant.FromUtc(2017, 08, 17, 12, 0, 0); var fakeClock = new FakeClock(currentInstant); var headerValidator = new OrderHeaderValidator(fakeClock) as IMessageValidator <OrderHeader>; var itemValidator = new itemItemValidator() as IMessageValidator <ItemAsset>; var itemOutValidator = new ItemOutValidator(itemValidator) as IMessageValidator <LineItem>; var validator = new OrderFulfillmentMessageValidator(headerValidator, itemOutValidator); var header = new OrderHeader { OrderId = "ABC123", OrderDate = currentInstant.ToDateTimeUtc() }; var itemOuts = new List <LineItem> { new LineItem { Assets = new List <ItemAsset> { new ItemAsset(), new ItemAsset() } } }; var target = new OrderFulfillmentMessage { OrderRequestHeader = header, LineItems = itemOuts }; var result = await validator.ValidateAsync(target); var failurePath = $"{ nameof(OrderFulfillmentMessage.LineItems) }[0].{ nameof(LineItem.Assets) }"; result.Should().NotBeNull("because a validation result should have been returned"); result.Should().ContainSingle(error => error.MemberPath == failurePath, "because the itemout violated a rule"); }