示例#1
0
        public void ShouldPassOrdersIfCarrierIsSame()
        {
            CarrierRule carrierRule = new CarrierRule();
            var         result      = carrierRule.IsCarrierSame(_orderData.InputOrders.Take(2));

            Assert.True(result);
        }
示例#2
0
        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);
 }
示例#5
0
 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));
 }