public DefaultRateEvaluator(RateEvaluatorOptions options, ILogger <DefaultRateEvaluator> logger,
                                    INotificationManager notificationManager, IRates rateFatcher, IDataStore dataStore)
        {
            _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
            NotificationManager = notificationManager ?? throw new ArgumentNullException(nameof(notificationManager));
            _rateFatcher        = rateFatcher ?? throw new ArgumentNullException(nameof(rateFatcher));
            _dataStore          = dataStore ?? throw new ArgumentNullException(nameof(dataStore));
            _options            = options ?? throw new ArgumentNullException(nameof(options));

            _options.CloseUIUrl += (_options.CloseUIUrl.Contains("?") ? "&" : "?");
        }
        public void Should_return_the_same_amount_when_target_currency_is_same()
        {
            Currency  eurCurrency = new Currency("EUR");
            Amount    eurAmount   = new Amount(10, eurCurrency);
            IRates    rates       = Substitute.For <IRates>();
            Converter converter   = new Converter(rates);

            Amount convertedAmount = converter.Convert(eurAmount, eurCurrency);

            Amount expectedAmount = new Amount(10, eurCurrency);

            Check.That(convertedAmount).IsEqualTo(expectedAmount);
        }
        public void Should_convert_the_amount_when_target_currency_is_different_triangulation()
        {
            Currency cadCurrency = new Currency("CAD");
            Currency eurCurrency = new Currency("EUR");
            Amount   eurAmount   = new Amount(10, eurCurrency);
            IRates   rates       = Substitute.For <IRates>();
            Rate     eurCadRate  = new Rate(1.5m);

            rates.GetRateOf(cadCurrency).Returns(eurCadRate);
            Converter converter = new Converter(rates);

            Amount convertedAmount = converter.Convert(eurAmount, cadCurrency);

            Amount expectedAmount = new Amount(15, cadCurrency);

            Check.That(convertedAmount).IsEqualTo(expectedAmount);
        }
        public void Should_convert_the_amount_when_target_currency_is_different()
        {
            Currency usdCurrency = new Currency("USD");
            Currency eurCurrency = new Currency("EUR");
            Amount   eurAmount   = new Amount(10, eurCurrency);
            IRates   rates       = Substitute.For <IRates>();
            var      eurUsdRate  = new Rate(1.14m);

            rates.GetRateOf(usdCurrency).Returns(eurUsdRate);
            Converter converter = new Converter(rates);

            Amount convertedAmount = converter.Convert(eurAmount, usdCurrency);

            Amount expectedAmount = new Amount(11.4m, usdCurrency);

            Check.That(convertedAmount).IsEqualTo(expectedAmount);
        }
예제 #5
0
        public void Setup()
        {
            _options = new RateEvaluatorOptions
            {
                CloseOffsetPercentage = 0.26f,
                NotificationTarget    = TargetEmail,
                OpenAmount            = 10,
                OpenHour = DateTime.UtcNow.Hour
            };
            var logger = Substitute.For <ILogger <DefaultRateEvaluator> >();

            _notificationManager = Substitute.For <INotificationManager>();
            _rateFetcher         = Substitute.For <IRates>();
            _rateFetcher.GetRateAsync(Currency.EUR, Currency.USD).Returns(Task.FromResult(2f));

            _position = Substitute.For <IPosition>();

            var store = Substitute.For <IDataStore>();

            store.Position.Returns(_position);

            _underTest = new DefaultRateEvaluator(_options, logger, _notificationManager, _rateFetcher, store);
        }
예제 #6
0
 public RatesController(IRates rates)
 {
     _rates = rates;
 }
 /// <summary>
 /// Add Rates object to the Rates IEnumerable
 /// </summary>
 /// <param name="r"></param>
 /// <returns></returns>
 public ShipmentFluent <T> AddRates(IRates r)
 {
     _shipment.AddRates(r);
     return(this);
 }
예제 #8
0
 public RatesList(IRates Irate)
 {
     rates = Irate.rates();
 }
예제 #9
0
 /// <summary>
 /// Add Rates object to the Rates IEnumerable
 /// </summary>
 /// <param name="r"></param>
 /// <returns></returns>
 virtual public IRates AddRates(IRates r)
 {
     return(ModelHelper.AddToEnumerable <IRates, Rates>(r, () => Rates, (x) => Rates = x));
 }
예제 #10
0
 public Converter(IRates rates)
 {
     _rates = rates;
 }
예제 #11
0
        public static decimal CalculateFare(int minutesAbove6, decimal milesBelow6, DateTime startTime, IRates rates)
        {
            decimal fare = rates.InitialEntry + rates.StateTaxSurcharge;

            DateTime endTime = startTime.AddMinutes(minutesAbove6);

            if (DateTimeHelper.TimeIsInBetween(startTime, rates.NightStartHours, rates.NightEndHours))
            {
                fare += rates.NightSurcharge;
            }
            else if (DateTimeHelper.TimeIsInBetween(endTime, rates.NightStartHours, rates.NightEndHours) ||
                     DateTimeHelper.WillTimeBeReached(endTime, minutesAbove6, rates.NightStartHours))
            {
                fare += rates.NightSurcharge;
            }

            if (!startTime.IsWeekend() && DateTimeHelper.TimeIsInBetween(startTime, rates.PeakStartHours, rates.PeakEndHours))
            {
                fare += rates.PeakWeekdaySurcharge;
            }
            else if (!endTime.IsWeekend() &&
                     (DateTimeHelper.TimeIsInBetween(endTime, rates.PeakStartHours, rates.PeakEndHours) ||
                      DateTimeHelper.WillTimeBeReached(endTime, minutesAbove6, rates.PeakStartHours)))
            {
                fare += rates.PeakWeekdaySurcharge;
            }

            decimal distanceUnits = milesBelow6 / DistanceUnitsOfMile;

            fare += (distanceUnits + minutesAbove6) * rates.BaseUnitRate;
            return(fare);
        }
예제 #12
0
 /// <summary>
 /// Create the default requests
 /// </summary>
 /// <param name="path">The path we want to watch</param>
 /// <param name="recursive">Recursively watch or not.</param>
 /// <param name="rates">The various refresh rates</param>
 public Request(string path, bool recursive, IRates rates)
 {
     Path      = path ?? throw new ArgumentNullException(nameof(path));
     Recursive = recursive;
     Rates     = rates ?? throw new ArgumentNullException(nameof(rates));
 }
 public ContreValoCalculator(IRates rates)
 {
     this.rates = rates;
 }