Example #1
0
        public void ShouldNotReturnBaseCurrencies()
        {
            var baseCurencyId = Guid.NewGuid();
            var rateSyncer    = new RateSyncer(new MockFExConfig {
                BaseCurrencyId = baseCurencyId
            },
                                               new Mock <ILoggingService>().Object);

            var currencies = CreateCurrencyCollection(baseCurencyId);

            var rates = new ExchangeRateCollection
            {
                Items = new List <ExchangeRate>
                {
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.GBP, RateNew = 99
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.EUR, RateNew = 1.2M
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.USD, RateNew = 1.4M
                    }
                }
            };

            var result = rateSyncer.Sync(currencies, rates);

            var gbp =
                result.Entities.SingleOrDefault(x => (string)x.Attributes[CurrencyAttribute.CurrencyCode] == CurrencyCode.GBP);

            Assert.That(gbp, Is.Null);
        }
Example #2
0
        public void ShouldUpdateExchangeRatesForPassedCurrencies()
        {
            var baseCurrencyId = Guid.NewGuid();
            var rateSyncer     = new RateSyncer(new MockFExConfig {
                BaseCurrencyId = baseCurrencyId
            },
                                                new Mock <ILoggingService>().Object);
            var currencies = CreateCurrencyCollection(baseCurrencyId);

            var rates = new ExchangeRateCollection
            {
                Items = new List <ExchangeRate>
                {
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.GBP, RateNew = 1
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.EUR, RateNew = 1.2M
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.USD, RateNew = 1.4M
                    }
                }
            };

            var result = rateSyncer.Sync(currencies, rates);

            var eur = result.Entities.Single(x => (string)x.Attributes[CurrencyAttribute.CurrencyCode] == CurrencyCode.EUR);
            var usd = result.Entities.Single(x => (string)x.Attributes[CurrencyAttribute.CurrencyCode] == CurrencyCode.USD);

            Assert.That((decimal)eur.Attributes[CurrencyAttribute.ExchangeRate], Is.EqualTo(1.2M));
            Assert.That((decimal)usd.Attributes[CurrencyAttribute.ExchangeRate], Is.EqualTo(1.4M));
        }
Example #3
0
        public void ShouldNotLogWarning_WhenBaseCurrencyNotSupplied()
        {
            var loggingService = new Mock <ILoggingService>();
            var baseCurencyId  = Guid.NewGuid();
            var rateSyncer     = new RateSyncer(new MockFExConfig {
                BaseCurrencyId = baseCurencyId
            }, loggingService.Object);

            var currencies = CreateCurrencyCollection(baseCurencyId);

            var rates = new ExchangeRateCollection
            {
                Items = new List <ExchangeRate>
                {
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.EUR, RateNew = 1.2M
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.USD, RateNew = 1.4M
                    }
                }
            };

            rateSyncer.Sync(currencies, rates);

            loggingService.Verify(
                x =>
                x.Trace(TraceEventType.Warning, (int)EventId.UnableToFindRateForCurrency,
                        It.IsAny <string>()), Times.Never);
        }
Example #4
0
        public void ShouldLogWarning_WhenRateDataNotAvaliable()
        {
            var loggingService = new Mock <ILoggingService>();
            var baseCurrencyId = Guid.NewGuid();
            var rateSyncer     = new RateSyncer(new MockFExConfig {
                BaseCurrencyId = baseCurrencyId
            }, loggingService.Object);

            var currencies = CreateCurrencyCollection(baseCurrencyId);

            var rates = new ExchangeRateCollection
            {
                Items = new List <ExchangeRate>
                {
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.GBP, RateNew = 1
                    },
                    new ExchangeRate {
                        CurrencyCode = CurrencyCode.USD, RateNew = 1.4M
                    }
                }
            };

            rateSyncer.Sync(currencies, rates);
            loggingService.Verify(
                x =>
                x.Trace(TraceEventType.Warning, (int)EventId.UnableToFindRateForCurrency,
                        It.Is <string>(y => y.Contains(CurrencyCode.EUR))), Times.Once);
        }
Example #5
0
        public void Execute()
        {
            trace.Trace(TraceEventType.Information, (int)EventId.StartingRateSync, "Syncing Rates");

            trace.Trace(TraceEventType.Information, (int)EventId.GettingRatesFromApi, "Getting Rates from API");
            var rates = rateService.GetRates(GetOrganisationUniqueName());

            trace.Trace(TraceEventType.Information, (int)EventId.GettingCurrenciesFromCrm, "Getting Currencies from CRM");
            var currencies = repo.GetCurrencies();

            trace.Trace(TraceEventType.Information, (int)EventId.SyncingCurrencies, "Sync Currencies with Latest Rate Date");
            currencies = rateSyncer.Sync(currencies, rates);

            trace.Trace(TraceEventType.Information, (int)EventId.SavingCurrencies, "Saving updated currencies to CRM");
            repo.SaveCurrencies(currencies);

            new JobCompleter(organisationService, config, trace).Complete(trace.HasWarnings
                                ? RunStatus.Warning
                                : RunStatus.Success);
        }