Esempio n. 1
0
        public void ThenIAmForbiddenToAssignCurrencyToTheBrand()
        {
            ScenarioContext.Current.Should().ContainKey("brandId");
            var brandId = ScenarioContext.Current.Get <Guid>("brandId");

            var data = new AssignBrandCurrencyRequest
            {
                Brand = brandId
            };

            var ex = Assert.Throws <HttpException>(() => AdminApiProxy.AssignBrandCurrency(data));

            Assert.That(ex.GetHttpCode(), Is.EqualTo((int)HttpStatusCode.Forbidden));
        }
        public AssignBrandCurrencyResponse Assign(AssignBrandCurrencyRequest request)
        {
            VerifyPermission(Permissions.Create, Modules.SupportedCurrencies);
            CheckBrand(request.Brand);

            var validationResult = _brandCommands.ValidateThatBrandCurrencyCanBeAssigned(request);

            if (!validationResult.IsValid)
            {
                return(ValidationErrorResponse <AssignBrandCurrencyResponse>(validationResult));
            }

            _brandCommands.AssignBrandCurrency(request);

            return(new AssignBrandCurrencyResponse {
                Success = true
            });
        }
Esempio n. 3
0
        public void ThenBrandCurrencyIsSuccessfullyAdded()
        {
            ScenarioContext.Current.Should().ContainKey("licenseeId");
            var licenseeId = ScenarioContext.Current.Get <Guid>("licenseeId");

            BrandTestHelper.AssignLicenseeCurrency(licenseeId, "CAD");
            BrandTestHelper.AssignLicenseeCurrency(licenseeId, "USD");

            ScenarioContext.Current.Should().ContainKey("brandId");
            var brandId = ScenarioContext.Current.Get <Guid>("brandId");

            var data = new AssignBrandCurrencyRequest
            {
                Brand           = brandId,
                Currencies      = new[] { "USD", "CAD" },
                BaseCurrency    = "CAD",
                DefaultCurrency = "CAD"
            };

            var result = AdminApiProxy.AssignBrandCurrency(data);

            result.Should().NotBeNull();
            result.Success.Should().BeTrue();
        }
Esempio n. 4
0
        public void AssignBrandCurrency(AssignBrandCurrencyRequest assignBrandCurrencyRequest)
        {
            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var validationResult = ValidateThatBrandCurrencyCanBeAssigned(assignBrandCurrencyRequest);

                if (!validationResult.IsValid)
                {
                    throw new RegoValidationException(validationResult);
                }

                var brand = _repository.Brands
                            .Include(x => x.BrandCurrencies)
                            .Single(x => x.Id == assignBrandCurrencyRequest.Brand);

                if (brand.BrandCurrencies.Count == 0)
                {
                    brand.CurrencySetCreated   = DateTime.Now;
                    brand.CurrencySetCreatedBy = Thread.CurrentPrincipal.Identity.Name;
                }
                else
                {
                    var oldCurrencies = brand.BrandCurrencies
                                        .Where(x => !assignBrandCurrencyRequest.Currencies.Contains(x.CurrencyCode))
                                        .ToArray();

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

                    brand.CurrencySetUpdated   = DateTime.Now;
                    brand.CurrencySetUpdatedBy = Thread.CurrentPrincipal.Identity.Name;
                }

                brand.DefaultCurrency = assignBrandCurrencyRequest.DefaultCurrency;
                brand.BaseCurrency    = assignBrandCurrencyRequest.BaseCurrency;

                var newCurrencies =
                    assignBrandCurrencyRequest.Currencies.Where(x => brand.BrandCurrencies.All(y => y.CurrencyCode != x));

                foreach (var currency in newCurrencies
                         .Select(newCurrency => _repository.Currencies.Single(c => c.Code == newCurrency)))
                {
                    brand.BrandCurrencies.Add(new BrandCurrency
                    {
                        BrandId      = brand.Id,
                        Brand        = brand,
                        CurrencyCode = currency.Code,
                        Currency     = currency,
                        DateAdded    = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                        AddedBy      = _actorInfoProvider.Actor.UserName
                    });
                }

                brand.DateUpdated = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId);
                brand.UpdatedBy   = _actorInfoProvider.Actor.UserName;

                _repository.SaveChanges();
                _eventBus.Publish(new BrandCurrenciesAssigned
                {
                    BrandId         = brand.Id,
                    Currencies      = brand.BrandCurrencies.Select(bc => bc.CurrencyCode).ToArray(),
                    DefaultCurrency = brand.DefaultCurrency,
                    BaseCurrency    = brand.BaseCurrency,
                    EventCreated    = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                });

                scope.Complete();
            }
        }
Esempio n. 5
0
        public ValidationResult ValidateThatBrandCurrencyCanBeAssigned(AssignBrandCurrencyRequest request)
        {
            var validator = new AssignBrandCurrencyValidator(_repository);

            return(validator.Validate(request));
        }
Esempio n. 6
0
 public AssignBrandCurrencyResponse AssignBrandCurrency(AssignBrandCurrencyRequest request)
 {
     return(WebClient.SecurePostAsJson <AssignBrandCurrencyRequest, AssignBrandCurrencyResponse>(Token, _url + AdminApiRoutes.AssignBrandCurrency, request));
 }