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); }
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)); }
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); }
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); }
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); }
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)); }
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); }
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 }); }
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)); }
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); }
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)); }
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); }
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); }
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 } }; }
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); }
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); }
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 }); } }
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 }); }
public ValidationResult GetValidationResult(CreateUpdateTemplate model) { return(new TemplateValidator(_repository, this).Validate(model)); }
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 } } } } }; }
public AddEditTemplateResponse CreateUpdateBonusTemplate(CreateUpdateTemplate request) { return(WebClient.SecurePostAsJson <CreateUpdateTemplate, AddEditTemplateResponse>(Token, _url + AdminApiRoutes.CreateEditBonusTemplate, request)); }
public Task <AddEditTemplateResponse> CreateUpdateBonusTemplateAsync(CreateUpdateTemplate request) { return(SecurePostAsJson <CreateUpdateTemplate, AddEditTemplateResponse>(Routes.CreateEditBonusTemplate, request)); }