public void ShouldPassOrdersIfCarrierIsSame() { CarrierRule carrierRule = new CarrierRule(); var result = carrierRule.IsCarrierSame(_orderData.InputOrders.Take(2)); Assert.True(result); }
public void ShouldNotPassOrdersIfCarrierAreDifferent() { CarrierRule carrierRule = new CarrierRule(); var result = carrierRule.IsCarrierSame(_orderData.InputOrders); Assert.False(result); }
/// <summary> /// Check the carrier, and then the service rules for the shipment. /// </summary> /// <param name="carrierRule"></param> public void Visit(CarrierRule carrierRule) { if (_rate.Carrier != carrierRule.Carrier) { _state = ValidationState.INVALID; Reason = string.Format("Carrier {0} is not contained in rules", _rate.Carrier); return; } if (Shipment.ToAddress.CountryCode != carrierRule.DestinationCountry) { _state = ValidationState.INVALID; Reason = string.Format("Destination country {0} is not contained in rules", Shipment.ToAddress.CountryCode); return; } if (Shipment.FromAddress.CountryCode != carrierRule.OriginCountry) { _state = ValidationState.INVALID; Reason = string.Format("Origin country {0} is not contained in rules", Shipment.FromAddress.CountryCode); return; } if (!carrierRule.ServiceRules.ContainsKey((Services)_rate.ServiceId)) { _state = ValidationState.INVALID; Reason = string.Format("Carrier {0} does not support format {1}", _rate.Carrier, _rate.ServiceId); return; } foreach (var rule in carrierRule.ServiceRules[(Services)_rate.ServiceId]) { if (_state == ValidationState.PROCESSING) { rule.Accept(this); } } if (_state == ValidationState.PROCESSING) { _state = ValidationState.VALID; Reason = "Valid"; } }
/// <summary> /// Validate a shipment with a rule set. /// </summary> /// <param name="shipment"></param> /// <param name="rules"></param> /// <returns></returns> public bool Validate(IShipment shipment, CarrierRule rules) { Shipment = shipment; Visit(rules); return(IsValid); }
public static RatesArrayFluent <T> RateFromRule <T>(this RatesArrayFluent <T> f, CarrierRule carrierRule, ServiceRule serviceRule, ParcelTypeRule parcelTypeRule) where T : class, IRates, new() { return(f .Carrier(carrierRule.Carrier) .ParcelType(parcelTypeRule.ParcelType) .Service(serviceRule.ServiceId)); }