Esempio n. 1
0
        public void Can_log_Brand_Currencies_Assigned()
        {
            var @event = new BrandCurrenciesAssigned();

            _serviceBus.PublishMessage(@event);
            AssertAdminActivityLog(@event, AdminActivityLogCategory.Brand);
        }
Esempio n. 2
0
        public void Handle(BrandCurrenciesAssigned @event)
        {
            var bonusRepository = _container.Resolve <IBonusRepository>();

            var brand = bonusRepository.Brands.SingleOrDefault(b => b.Id == @event.BrandId);

            if (brand == null)
            {
                throw new RegoException(string.Format(NoBrandFormat, @event.BrandId));
            }

            brand.Currencies.Clear();
            foreach (var currency in @event.Currencies)
            {
                brand.Currencies.Add(new Currency {
                    Code = currency
                });
            }
            bonusRepository.SaveChanges();
        }
Esempio n. 3
0
        public void Can_remove_CurrencyExchanges_after_change_BaseCurrency()
        {
            const string newBaseCurrency = "UAH";
            var          brand           = Container.Resolve <BrandTestHelper>().CreateBrand(isActive: true);
            var          @event          = new BrandCurrenciesAssigned
            {
                BrandId         = brand.Id,
                Currencies      = new[] { newBaseCurrency },
                DefaultCurrency = newBaseCurrency,
                BaseCurrency    = newBaseCurrency
            };

            _eventBus.Publish(@event);

            var currencyExchanges = _paymentRepository.CurrencyExchanges.ToArray();
            var currencies        = _paymentRepository.BrandCurrencies.ToArray();

            Assert.AreEqual(1, currencyExchanges.Count());
            Assert.AreEqual(newBaseCurrency, currencyExchanges[0].CurrencyToCode);
            Assert.AreEqual(1, currencyExchanges[0].CurrentRate);
        }
Esempio n. 4
0
        public void Can_add_and_remove_BrandCurrencies_and_No_Duplicates()
        {
            var brand = Container.Resolve <BrandTestHelper>().CreateBrand(isActive: true);
            var brandDefaultCurrency = brand.DefaultCurrency;
            var brandBaseCurrency    = brand.BaseCurrency;
            var brandCurrencies      = _paymentRepository.BrandCurrencies.Select(x => x.CurrencyCode).ToList();

            var newBrandCurrencies = brandCurrencies.ToList();

            newBrandCurrencies.Add("UAH");

            var @event = new BrandCurrenciesAssigned
            {
                BrandId         = brand.Id,
                Currencies      = newBrandCurrencies.ToArray(),
                DefaultCurrency = brandDefaultCurrency,
                BaseCurrency    = brandBaseCurrency
            };

            _eventBus.Publish(@event);

            Assert.AreEqual(brandCurrencies.Count() + 1, _paymentRepository.BrandCurrencies.Count());

            newBrandCurrencies.Remove("UAH");

            @event = new BrandCurrenciesAssigned
            {
                BrandId         = brand.Id,
                Currencies      = newBrandCurrencies.ToArray(),
                DefaultCurrency = brandDefaultCurrency,
                BaseCurrency    = brandBaseCurrency
            };

            _eventBus.Publish(@event);

            Assert.AreEqual(brandCurrencies.Count(), _paymentRepository.BrandCurrencies.Count());
        }
Esempio n. 5
0
        public void Consume(BrandCurrenciesAssigned message)
        {
            var paymentRepository = _container.Resolve <IPaymentRepository>();

            //reassign Base currency
            var paymentBrand        = paymentRepository.Brands.Single(x => x.Id == message.BrandId);
            var oldBaseCurrencyCode = paymentBrand.BaseCurrencyCode;

            if (oldBaseCurrencyCode != message.BaseCurrency)
            {
                //remove old Currency Exchanges
                var oldCurrencyExchanges = paymentRepository.CurrencyExchanges
                                           .Where(x => x.BrandId == message.BrandId)
                                           .ToArray();

                foreach (var oldCurrencyExchange in oldCurrencyExchanges)
                {
                    paymentRepository.CurrencyExchanges.Remove(oldCurrencyExchange);
                }

                paymentRepository.SaveChanges();

                //remove old Currencies
                var oldCurrencies = paymentRepository.BrandCurrencies
                                    .Where(x => x.BrandId == message.BrandId)
                                    .ToArray();

                foreach (var oldCurrency in oldCurrencies)
                {
                    paymentRepository.BrandCurrencies.Remove(oldCurrency);
                }

                paymentRepository.SaveChanges();

                //add new currencies
                foreach (var newCurrency in message.Currencies)
                {
                    var brandCurrency = new Data.BrandCurrency {
                        BrandId = message.BrandId, CurrencyCode = newCurrency
                    };

                    paymentRepository.BrandCurrencies.AddOrUpdate(brandCurrency);
                }

                paymentRepository.SaveChanges();

                //Set Base Currency
                paymentBrand.BaseCurrencyCode = message.BaseCurrency;
                paymentRepository.SaveChanges();

                //add new base currency exchange
                var baseCurrencyExchange = new Data.CurrencyExchange
                {
                    BrandId        = message.BrandId,
                    CurrencyToCode = message.BaseCurrency,
                    IsBaseCurrency = true,
                    CurrentRate    = 1,
                    //todo: need to update
                    CreatedBy   = "System",
                    DateCreated = DateTimeOffset.Now.ToBrandOffset(paymentBrand.TimezoneId),
                };

                paymentRepository.CurrencyExchanges.AddOrUpdate(baseCurrencyExchange);
                paymentRepository.SaveChanges();

                return;
            }

            //remove not exist Currency Exchanges
            var notExistCurrencyExchanges = paymentRepository.CurrencyExchanges
                                            .Where(x => x.BrandId == message.BrandId &&
                                                   !message.Currencies.Contains(x.CurrencyToCode))
                                            .ToArray();

            foreach (var oldCurrencyExchange in notExistCurrencyExchanges)
            {
                paymentRepository.CurrencyExchanges.Remove(oldCurrencyExchange);
            }

            paymentRepository.SaveChanges();

            //remove not exist Currencies
            var notExistCurrencies = paymentRepository.BrandCurrencies
                                     .Where(x => x.BrandId == message.BrandId &&
                                            !message.Currencies.Contains(x.CurrencyCode))
                                     .ToArray();

            foreach (var oldCurrency in notExistCurrencies)
            {
                paymentRepository.BrandCurrencies.Remove(oldCurrency);
            }

            paymentRepository.SaveChanges();

            //add new currencies
            var existingCurrencies = paymentRepository.BrandCurrencies
                                     .Where(x => x.BrandId == message.BrandId).Select(c => c.CurrencyCode).ToArray();

            var newCurrencies =
                message.Currencies.Where(c =>
                                         !existingCurrencies.Contains(c)).ToArray();

            foreach (var newCurrency in newCurrencies)
            {
                var brandCurrency = new Data.BrandCurrency {
                    BrandId = message.BrandId, CurrencyCode = newCurrency
                };

                paymentRepository.BrandCurrencies.AddOrUpdate(brandCurrency);
            }

            paymentRepository.SaveChanges();
        }
 public void Consume(BrandCurrenciesAssigned message)
 {
     _eventHandlers.Handle(message);
 }
Esempio n. 7
0
 public void Consume(BrandCurrenciesAssigned message)
 {
     _brandSubscriber.Handle(message);
 }
Esempio n. 8
0
 public void Handle(BrandCurrenciesAssigned @event)
 {
     AddActivityLog(AdminActivityLogCategory.Brand, @event);
 }