Пример #1
0
        public void HighDeposit_bonus_tier_notification_percenatage_is_converted_to_decimal()
        {
            _model.Info.TemplateType = BonusType.HighDeposit;
            var identifier = _bonusManagementCommands.AddUpdateTemplate(_model);

            _model = new CreateUpdateTemplate
            {
                Id      = identifier.Id,
                Version = identifier.Version,
                Rules   = new CreateUpdateTemplateRules
                {
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier {
                            BonusTiers = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    NotificationPercentThreshold = 44
                                }
                            }
                        }
                    }
                }
            };

            var template = _bonusMapper.MapModelToTemplate(_model);

            template.Rules.RewardTiers.Single()
            .BonusTiers.Single()
            .As <HighDepositTier>()
            .NotificationPercentThreshold.Should()
            .Be(0.44m);
        }
Пример #2
0
        public async Task <Template> CreateTemplate(
            CreateUpdateTemplateInfo info = null,
            CreateUpdateTemplateAvailability availability = null,
            CreateUpdateTemplateRules rules               = null,
            CreateUpdateTemplateWagering wagering         = null,
            CreateUpdateTemplateNotification notification = null
            )
        {
            var brand = _brandQueries.GetBrands().First();
            var model = new CreateUpdateTemplate
            {
                Id   = Guid.Empty,
                Info = info ?? new CreateUpdateTemplateInfo
                {
                    Name             = TestDataGenerator.GetRandomString(),
                    TemplateType     = BonusType.FirstDeposit,
                    BrandId          = brand.Id,
                    WalletTemplateId = brand.WalletTemplates.First().Id,
                    Mode             = IssuanceMode.Automatic
                }
            };
            var response = await _bonusApiProxy.CreateUpdateBonusTemplateAsync(model);

            if (response.Success == false)
            {
                throw new Exception(response.Errors.First().ErrorMessage);
            }

            model = new CreateUpdateTemplate
            {
                Id           = response.Id.Value,
                Version      = response.Version.Value,
                Availability = availability ?? new CreateUpdateTemplateAvailability(),
                Rules        = rules ?? new CreateUpdateTemplateRules
                {
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier
                        {
                            CurrencyCode = "CAD",
                            BonusTiers   = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    Reward = 29
                                }
                            }
                        }
                    }
                },
                Wagering     = wagering ?? new CreateUpdateTemplateWagering(),
                Notification = notification ?? new CreateUpdateTemplateNotification()
            };
            response = await _bonusApiProxy.CreateUpdateBonusTemplateAsync(model);

            if (response.Success == false)
            {
                throw new Exception(response.Errors.First().ErrorMessage);
            }

            return(await _bonusApiProxy.GetTemplateOrNull(response.Id.Value));
        }
Пример #3
0
        public void Reward_is_converted_to_decimal(BonusRewardType type)
        {
            var identifier = _bonusManagementCommands.AddUpdateTemplate(_model);

            _model = new CreateUpdateTemplate
            {
                Id      = identifier.Id,
                Version = identifier.Version,
                Rules   = new CreateUpdateTemplateRules
                {
                    RewardType  = type,
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier {
                            BonusTiers = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    Reward = 69
                                }
                            }
                        }
                    }
                }
            };

            var template = _bonusMapper.MapModelToTemplate(_model);

            template.Rules.RewardTiers.Single()
            .BonusTiers.Single()
            .Reward.Should()
            .Be(0.69m);
        }
Пример #4
0
        public void Template_update_updates_bonus()
        {
            var initialBonus = CreateFirstDepositBonus(false);

            var model = new CreateUpdateTemplate
            {
                Id      = initialBonus.Template.Id,
                Version = initialBonus.Template.Version,
                Rules   = new CreateUpdateTemplateRules
                {
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier
                        {
                            CurrencyCode = "CAD",
                            BonusTiers   = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    Reward = 25
                                }
                            }
                        }
                    },
                    RewardType = BonusRewardType.Percentage
                }
            };

            _bonusManagementCommands.AddUpdateTemplate(model);

            var updatedBonus = BonusRepository.GetCurrentVersionBonuses().Single(bonus => bonus.Id == initialBonus.Id);

            Assert.AreEqual(1, updatedBonus.Version);
            Assert.AreEqual(1, updatedBonus.Template.Version);
        }
Пример #5
0
        public void Vips_count_does_not_change_between_template_edits()
        {
            var brandId = new Guid("00000000-0000-0000-0000-000000000138");
            var brand   = BonusRepository.Brands.Include(x => x.WalletTemplates).First(x => x.Id == brandId);

            var model = new CreateUpdateTemplate
            {
                Info = new CreateUpdateTemplateInfo
                {
                    Name             = TestDataGenerator.GetRandomString(),
                    TemplateType     = BonusType.FirstDeposit,
                    BrandId          = brand.Id,
                    WalletTemplateId = brand.WalletTemplates.First().Id
                }
            };
            var identifier = _bonusManagementCommands.AddUpdateTemplate(model);

            model = new CreateUpdateTemplate
            {
                Id           = identifier.Id,
                Version      = identifier.Version,
                Availability = new CreateUpdateTemplateAvailability {
                    VipLevels = new List <string> {
                        "S"
                    }
                }
            };

            identifier = _bonusManagementCommands.AddUpdateTemplate(model);

            var templateFromDb = BonusRepository.Templates.Single(t => t.Id == identifier.Id && t.Version == identifier.Version);

            Assert.AreEqual(1, templateFromDb.Availability.VipLevels.Count);

            model = new CreateUpdateTemplate
            {
                Id      = identifier.Id,
                Version = identifier.Version,
                Rules   = new CreateUpdateTemplateRules
                {
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier
                        {
                            CurrencyCode = "CAD",
                            BonusTiers   = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    Reward = 25
                                }
                            }
                        }
                    },
                    RewardType = BonusRewardType.Amount
                }
            };
            identifier = _bonusManagementCommands.AddUpdateTemplate(model);

            templateFromDb = BonusRepository.Templates.Single(t => t.Id == identifier.Id && t.Version == identifier.Version);
            Assert.AreEqual(1, templateFromDb.Availability.VipLevels.Count);
        }
Пример #6
0
        public void Updated_template_is_correctly_saved_to_DB()
        {
            var baseTemplate = CreateFirstDepositTemplate();

            var model = new CreateUpdateTemplate
            {
                Id       = baseTemplate.Id,
                Version  = baseTemplate.Version,
                Wagering = new CreateUpdateTemplateWagering
                {
                    Threshold         = 1000,
                    GameContributions =
                    {
                        new CreateUpdateGameContribution
                        {
                            GameId       = new Guid("B641B4E9-CA08-4443-8FD3-8D1A43727C3E"),
                            Contribution = 4
                        }
                    }
                }
            };

            _bonusManagementCommands.AddUpdateTemplate(model);
            var updatedTemplate = _bonusQueries.GetCurrentVersionTemplates().Single(a => a.Id == baseTemplate.Id);

            Assert.AreEqual(1, updatedTemplate.Version);
            Assert.AreEqual(1000, updatedTemplate.Wagering.Threshold);
            Assert.AreEqual(0.04, updatedTemplate.Wagering.GameContributions.First().Contribution);
        }
        public async Task <AddEditTemplateResponse> CreateEdit(CreateUpdateTemplate model)
        {
            VerifyPermission(Permissions.Create, Modules.BonusTemplateManager);
            VerifyPermission(Permissions.Update, Modules.BonusTemplateManager);

            var brandId = model.Id == Guid.Empty ?
                          model.Info.BrandId :
                          (await _bonusApiProxy.GetTemplateOrNull(model.Id)).Info.BrandId;

            CheckBrand(brandId.Value);

            return(await _bonusApiProxy.CreateUpdateBonusTemplateAsync(model));
        }
Пример #8
0
        public void Mapper_assigns_brand_to_existing_template()
        {
            var identifier = _bonusManagementCommands.AddUpdateTemplate(_model);

            _model = new CreateUpdateTemplate
            {
                Id           = identifier.Id,
                Version      = identifier.Version,
                Availability = new CreateUpdateTemplateAvailability()
            };

            var template = _bonusMapper.MapModelToTemplate(_model);

            template.Info.Brand.Id.Should().Be(_brand.Id);
        }
Пример #9
0
        public AddEditTemplateResponse CreateEdit(CreateUpdateTemplate model)
        {
            var validationResult = _bonusQueries.GetValidationResult(model);

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

            var identifier = _bonusCommands.AddUpdateTemplate(model);

            return(new AddEditTemplateResponse {
                Success = true, Id = identifier.Id, Version = identifier.Version
            });
        }
Пример #10
0
        public void Can_not_edit_template_if_there_are_active_bonuses_using_it()
        {
            BonusRepository.Bonuses.Add(new Core.Data.Bonus {
                Template = _template, IsActive = true
            });
            var model = new CreateUpdateTemplate
            {
                Id           = _template.Id,
                Version      = _template.Version,
                Notification = new CreateUpdateTemplateNotification()
            };

            var validationResult = BonusQueries.GetValidationResult(model);

            Assert.AreEqual(1, validationResult.Errors.Count(e => e.ErrorMessage == ValidatorMessages.AllBonusesShouldBeInactive));
        }
Пример #11
0
        public Template MapModelToTemplate(CreateUpdateTemplate model)
        {
            Template template;

            if (model.Id == Guid.Empty)
            {
                template            = Mapper.Map <Template>(model);
                template.Info.Brand = _bonusRepository.Brands.Single(p => p.Id == model.Info.BrandId.Value);
            }
            else
            {
                template = _bonusQueries.GetCurrentVersionTemplates().Single(t => t.Id == model.Id && t.Version == model.Version);
                template = Mapper.Map(model, template);
            }

            return(template);
        }
Пример #12
0
        public Template CreateTemplate(
            CreateUpdateTemplateInfo info = null,
            CreateUpdateTemplateAvailability availability = null,
            CreateUpdateTemplateRules rules               = null,
            CreateUpdateTemplateWagering wagering         = null,
            CreateUpdateTemplateNotification notification = null
            )
        {
            var model = new CreateUpdateTemplate
            {
                Id   = Guid.Empty,
                Info = info ?? CreateTemplateInfo(BonusType.FirstDeposit)
            };
            var identifier = BonusManagementCommands.AddUpdateTemplate(model);

            model = new CreateUpdateTemplate
            {
                Id           = identifier.Id,
                Version      = identifier.Version,
                Availability = availability ?? new CreateUpdateTemplateAvailability(),
                Rules        = rules ?? new CreateUpdateTemplateRules
                {
                    RewardTiers = new List <CreateUpdateRewardTier>
                    {
                        new CreateUpdateRewardTier
                        {
                            CurrencyCode = "CAD",
                            BonusTiers   = new List <CreateUpdateTemplateTier> {
                                new CreateUpdateTemplateTier {
                                    Reward = 27
                                }
                            }
                        }
                    }
                },
                Wagering     = wagering ?? new CreateUpdateTemplateWagering(),
                Notification = notification ?? new CreateUpdateTemplateNotification()
            };
            identifier = BonusManagementCommands.AddUpdateTemplate(model);

            return(BonusRepository.Templates.Single(t => t.Id == identifier.Id && t.Version == identifier.Version));
        }
Пример #13
0
        public void Unknown_brandId_isnt_valid()
        {
            var model = new CreateUpdateTemplate
            {
                Id   = Guid.Empty,
                Info = new CreateUpdateTemplateInfo
                {
                    Name             = TestDataGenerator.GetRandomString(),
                    BrandId          = Guid.NewGuid(),
                    WalletTemplateId = Guid.NewGuid(),
                    TemplateType     = BonusType.FirstDeposit,
                    Mode             = IssuanceMode.Automatic
                }
            };

            var validationResult = BonusQueries.GetValidationResult(model);
            var message          = validationResult.Errors.Single().ErrorMessage;

            Assert.AreEqual(ValidatorMessages.TemplateBrandDoesNotExist, message);
        }
Пример #14
0
        public bool IssuanceMode_with_template_type_compartability_validation_works(BonusType bonusType)
        {
            var model = new CreateUpdateTemplate
            {
                Info = _info
            };

            model.Info.TemplateType = bonusType;
            model.Info.Mode         = IssuanceMode.AutomaticWithCode;

            var validationResult = BonusQueries.GetValidationResult(model);

            if (validationResult.IsValid == false)
            {
                var message = validationResult.Errors.Single().ErrorMessage;
                Assert.AreEqual(ValidatorMessages.TemplateModeIsIncorrect, message);
            }

            return(validationResult.IsValid);
        }
Пример #15
0
        public override void BeforeEach()
        {
            base.BeforeEach();

            _bonusManagementCommands = Container.Resolve <BonusManagementCommands>();
            _bonusMapper             = Container.Resolve <BonusMapper>();

            _brand = BonusRepository.Brands.First();
            _model = new CreateUpdateTemplate
            {
                Id   = Guid.Empty,
                Info = new CreateUpdateTemplateInfo
                {
                    Name             = TestDataGenerator.GetRandomString(),
                    TemplateType     = BonusType.FirstDeposit,
                    BrandId          = _brand.Id,
                    WalletTemplateId = _brand.WalletTemplates.First().Id,
                    Mode             = IssuanceMode.Automatic
                }
            };
        }
Пример #16
0
        public void Player_registration_dates_are_mapped()
        {
            var identifier = _bonusManagementCommands.AddUpdateTemplate(_model);

            _model = new CreateUpdateTemplate
            {
                Id           = identifier.Id,
                Version      = identifier.Version,
                Availability = new CreateUpdateTemplateAvailability
                {
                    PlayerRegistrationDateFrom = DateTimeOffset.Now.Date,
                    PlayerRegistrationDateTo   = DateTimeOffset.Now.AddDays(1).Date,
                }
            };

            var template = _bonusMapper.MapModelToTemplate(_model);

            template.Availability.PlayerRegistrationDateFrom.Value.DateTime.Should()
            .Be(_model.Availability.PlayerRegistrationDateFrom.Value);

            template.Availability.PlayerRegistrationDateTo.Value.DateTime.Should()
            .Be(_model.Availability.PlayerRegistrationDateTo.Value);
        }
Пример #17
0
        public void Wagering_game_contribution_percentage_turns_into_decimal_representation()
        {
            var identifier = _bonusManagementCommands.AddUpdateTemplate(_model);

            _model = new CreateUpdateTemplate
            {
                Id       = identifier.Id,
                Version  = identifier.Version,
                Wagering = new CreateUpdateTemplateWagering
                {
                    HasWagering       = true,
                    Multiplier        = 1,
                    GameContributions = new List <CreateUpdateGameContribution> {
                        new CreateUpdateGameContribution {
                            Contribution = 45
                        }
                    }
                }
            };

            var template = _bonusMapper.MapModelToTemplate(_model);

            template.Wagering.GameContributions.Single().Contribution.Should().Be(0.45m);
        }
Пример #18
0
        public void AddBonus(
            BonusType bonusType,
            string templateName,
            IssuanceMode mode,
            BonusRewardType rewardType,
            decimal depositAmountFrom,
            decimal bonusAmount,
            decimal maxBonus,
            string bonusName,
            string bonusCode,
            string description)
        {
            var  brand = _bonusRepository.Brands.Single(b => b.Id == new Guid("00000000-0000-0000-0000-000000000138"));
            Guid templateId;
            var  template = _bonusRepository.Templates.SingleOrDefault(t => t.Info.Name == templateName);

            if (template == null)
            {
                var model = new CreateUpdateTemplate
                {
                    Id   = Guid.Empty,
                    Info = new CreateUpdateTemplateInfo
                    {
                        Name             = templateName,
                        TemplateType     = bonusType,
                        BrandId          = brand.Id,
                        WalletTemplateId = brand.WalletTemplates.First().Id,
                        Mode             = mode
                    }
                };
                var identifier = _bonusManagementCommands.AddUpdateTemplate(model);
                templateId = identifier.Id;

                model = new CreateUpdateTemplate
                {
                    Id           = identifier.Id,
                    Version      = identifier.Version,
                    Availability = new CreateUpdateTemplateAvailability(),
                    Rules        = new CreateUpdateTemplateRules
                    {
                        RewardType  = rewardType,
                        RewardTiers = new List <CreateUpdateRewardTier>
                        {
                            new CreateUpdateRewardTier
                            {
                                CurrencyCode = "RMB",
                                BonusTiers   = new List <CreateUpdateTemplateTier> {
                                    new CreateUpdateTemplateTier
                                    {
                                        From   = depositAmountFrom,
                                        Reward = bonusAmount
                                    }
                                },
                                RewardAmountLimit = maxBonus
                            }
                        }
                    },
                    Wagering = new CreateUpdateTemplateWagering
                    {
                        HasWagering = true,
                        Method      = WageringMethod.Bonus,
                        Multiplier  = 2
                    },
                    Notification = new CreateUpdateTemplateNotification()
                };
                _bonusManagementCommands.AddUpdateTemplate(model);
            }
            else
            {
                templateId = template.Id;
            }

            var bonus = _bonusRepository.Bonuses.SingleOrDefault(b => b.Name == bonusName);

            if (bonus == null)
            {
                var startDate = new DateTime(2016, 4, 26, 0, 0, 0);
                var endDate   = new DateTime(2016, 12, 31, 0, 0, 0);
                var bonusId   = _bonusManagementCommands.AddUpdateBonus(new CreateUpdateBonus
                {
                    Id            = Guid.Empty,
                    Name          = bonusName,
                    Code          = bonusCode,
                    Description   = description,
                    TemplateId    = templateId,
                    ActiveFrom    = startDate,
                    ActiveTo      = endDate,
                    DurationStart = startDate,
                    DurationEnd   = endDate
                });

                if (bonusType == BonusType.FirstDeposit && mode == IssuanceMode.Automatic)
                {
                    return;
                }

                _bonusManagementCommands.ChangeBonusStatus(new ToggleBonusStatus
                {
                    Id       = bonusId,
                    IsActive = true
                });
            }
        }
Пример #19
0
        public TemplateIdentifier AddUpdateTemplate(CreateUpdateTemplate model)
        {
            var validationResult = _bonusQueries.GetValidationResult(model);

            if (validationResult.IsValid == false)
            {
                throw new RegoException(string.Join("/n", validationResult.Errors.Select(failure => failure.ErrorMessage)));
            }

            var template = _bonusMapper.MapModelToTemplate(model);

            template.Info.Brand = _repository.Brands.Single(brand => brand.Id == template.Info.Brand.Id);

            if (template.Id == Guid.Empty)
            {
                template.Id        = Guid.NewGuid();
                template.CreatedOn = DateTimeOffset.Now.ToBrandOffset(template.Info.Brand.TimezoneId);
                template.CreatedBy = _actorInfoProvider.Actor.UserName;

                _repository.Templates.Add(template);
                _repository.SaveChanges();
            }
            else
            {
                var firstTemplateVersion = _repository.Templates.Where(t => t.Id == template.Id).Single(t => t.Version == 0);
                template.CreatedOn = firstTemplateVersion.CreatedOn;
                template.CreatedBy = firstTemplateVersion.CreatedBy;
                template.UpdatedOn = DateTimeOffset.Now.ToBrandOffset(template.Info.Brand.TimezoneId);
                template.UpdatedBy = _actorInfoProvider.Actor.UserName;
                if (template.Status == TemplateStatus.Complete)
                {
                    var bonusesUsingThisTemplate = _bonusQueries.GetBonusesUsingTemplate(template).ToList();

                    template.Version++;
                    _eventBus.Publish(new BonusTemplateUpdated
                    {
                        AggregateId  = template.Id,
                        Description  = template.Info.Description,
                        EventCreated = template.UpdatedOn.Value
                    });

                    _repository.Templates.Add(template);
                    _repository.SaveChanges();

                    foreach (var bonus in bonusesUsingThisTemplate)
                    {
                        bonus.Template = template;
                        UpdateBonus(bonus);
                    }
                }
                else
                {
                    if (template.Notification != null)
                    {
                        template.Status = TemplateStatus.Complete;
                        _eventBus.Publish(new BonusTemplateCreated
                        {
                            AggregateId  = template.Id,
                            Description  = template.Info.Description,
                            EventCreated = template.CreatedOn
                        });
                    }
                    _repository.Templates.Remove(firstTemplateVersion);

                    _repository.Templates.Add(template);
                    _repository.SaveChanges();
                }
            }

            return(new TemplateIdentifier
            {
                Id = template.Id,
                Version = template.Version
            });
        }
Пример #20
0
 public ValidationResult GetValidationResult(CreateUpdateTemplate model)
 {
     return(new TemplateValidator(_repository, this).Validate(model));
 }
Пример #21
0
        public override void BeforeEach()
        {
            base.BeforeEach();

            var brand = BonusRepository.Brands.First();

            _template = new Template
            {
                Status = TemplateStatus.Complete,
                Info   = new TemplateInfo
                {
                    TemplateType     = BonusType.FirstDeposit,
                    Name             = TestDataGenerator.GetRandomString(),
                    Brand            = brand,
                    WalletTemplateId = brand.WalletTemplates.First().Id
                },
                Availability = new TemplateAvailability(),
                Rules        = new TemplateRules
                {
                    RewardTiers = new List <RewardTier>
                    {
                        new RewardTier
                        {
                            CurrencyCode = brand.Currencies.First().Code,
                            BonusTiers   = new List <TierBase>
                            {
                                new TierBase {
                                    Reward = 100
                                }
                            }
                        }
                    }
                },
                Wagering     = new TemplateWagering(),
                Notification = new TemplateNotification()
            };

            BonusRepository.Templates.Add(_template);

            _model = new CreateUpdateTemplate
            {
                Id      = _template.Id,
                Version = _template.Version
            };
            _info = new CreateUpdateTemplateInfo
            {
                Name             = TestDataGenerator.GetRandomString(),
                BrandId          = _template.Info.Brand.Id,
                WalletTemplateId = _template.Info.Brand.WalletTemplates.First().Id,
                TemplateType     = BonusType.FirstDeposit,
                Mode             = IssuanceMode.Automatic
            };
            _rules = new CreateUpdateTemplateRules
            {
                RewardTiers = new List <CreateUpdateRewardTier>
                {
                    new CreateUpdateRewardTier
                    {
                        CurrencyCode = "CAD",
                        BonusTiers   = new List <CreateUpdateTemplateTier>
                        {
                            new CreateUpdateTemplateTier {
                                Reward = 25
                            }
                        }
                    }
                }
            };
        }
Пример #22
0
 public AddEditTemplateResponse CreateUpdateBonusTemplate(CreateUpdateTemplate request)
 {
     return(WebClient.SecurePostAsJson <CreateUpdateTemplate, AddEditTemplateResponse>(Token, _url + AdminApiRoutes.CreateEditBonusTemplate, request));
 }
Пример #23
0
 public Task <AddEditTemplateResponse> CreateUpdateBonusTemplateAsync(CreateUpdateTemplate request)
 {
     return(SecurePostAsJson <CreateUpdateTemplate, AddEditTemplateResponse>(Routes.CreateEditBonusTemplate, request));
 }