Пример #1
0
        public void Bet_lost_increases_wagering_completed()
        {
            MakeDeposit(PlayerId);
            PlaceAndLoseBet(27, PlayerId);

            BonusRedemptions.First().Contributions.SingleOrDefault(c => c.Contribution == 27).Should().NotBeNull();
        }
Пример #2
0
        public void All_contribution_are_calculated_as_100_percents_when_no_game_to_rollover_contributions_defined()
        {
            MakeDeposit(PlayerId);
            PlaceAndLoseBet(27, PlayerId);

            BonusRedemptions.First().Contributions.SingleOrDefault(c => c.Contribution == 27).Should().NotBeNull();
        }
Пример #3
0
        public void Qualification_runs_before_rollover_is_issued_for_AfterWager_bonus()
        {
            MakeDeposit(PlayerId);

            var excludedReloadedDeposit = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            excludedReloadedDeposit.Template.Info.TemplateType = BonusType.ReloadDeposit;

            var reloadDepositWithExclude = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            reloadDepositWithExclude.Template.Info.TemplateType     = BonusType.ReloadDeposit;
            reloadDepositWithExclude.Template.Wagering.HasWagering  = true;
            reloadDepositWithExclude.Template.Wagering.IsAfterWager = true;
            reloadDepositWithExclude.Template.Wagering.Multiplier   = 1;
            reloadDepositWithExclude.Template.Availability.ExcludeBonuses.Add(new BonusExclude {
                ExcludedBonusId = excludedReloadedDeposit.Id
            });
            reloadDepositWithExclude.Template.Availability.ExcludeOperation = Operation.Any;

            var depositId = Guid.NewGuid();

            BonusCommands.ApplyForBonus(new DepositBonusApplication
            {
                PlayerId  = PlayerId,
                Amount    = 200,
                DepositId = depositId,
                BonusCode = reloadDepositWithExclude.Code
            });

            MakeDeposit(PlayerId, 200, excludedReloadedDeposit.Code);
            ApproveDeposit(depositId, PlayerId, 200);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Negated);
        }
Пример #4
0
        public bool Status_of_bonus_redemption_is_validated_during_cancellation(RolloverStatus status)
        {
            var bonus = CreateFirstDepositBonus();

            bonus.Template.Wagering.HasWagering = true;
            bonus.Template.Wagering.Multiplier  = 3m;

            MakeDeposit(PlayerId);
            var bonusRedemption = BonusRedemptions.First();

            bonusRedemption.RolloverState = status;

            var validationResult = BonusQueries.GetValidationResult(new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            });

            if (validationResult.IsValid == false)
            {
                validationResult.Errors.Single().ErrorMessage.Should().Be(ValidatorMessages.BonusRedemptionStatusIsIncorrectForCancellation);
            }

            return(validationResult.IsValid);
        }
        public void Fundin_ManualByPlayer_bonus_rollover_is_calculated()
        {
            var bonus         = CreateFirstDepositBonus(mode: IssuanceMode.ManualByPlayer);
            var brandWalletId = bonus.Template.Info.Brand.WalletTemplates.First().Id;

            bonus.Template.Info.TemplateType   = BonusType.FundIn;
            bonus.Template.Rules.FundInWallets = new List <BonusFundInWallet>
            {
                new BonusFundInWallet {
                    WalletId = brandWalletId
                }
            };
            bonus.Template.Wagering.HasWagering = true;
            bonus.Template.Wagering.Method      = WageringMethod.TransferAmount;
            bonus.Template.Wagering.Multiplier  = 2;

            //depositing funds to use them for fund in
            MakeDeposit(PlayerId);
            MakeFundIn(PlayerId, brandWalletId, 100, bonusId: bonus.Id);

            var bonusRedemption = BonusRedemptions.First();

            BonusCommands.ClaimBonusRedemption(new ClaimBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            });

            bonusRedemption.Rollover.Should().Be(200);
        }
Пример #6
0
        public void Placing_a_bet_does_not_change_wagering_completed()
        {
            MakeDeposit(PlayerId);
            PlaceBet(27, PlayerId, Guid.NewGuid(), Guid.NewGuid());

            BonusRedemptions.First().Contributions.Should().BeEmpty();
        }
Пример #7
0
        public void Qualification_runs_after_rollover_fulfillment_for_AfterWager_bonus()
        {
            var reloadBonus = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            reloadBonus.Template.Info.TemplateType = BonusType.ReloadDeposit;

            var firstDeposit = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            firstDeposit.Template.Info.TemplateType     = BonusType.FirstDeposit;
            firstDeposit.Template.Wagering.HasWagering  = true;
            firstDeposit.Template.Wagering.IsAfterWager = true;
            firstDeposit.Template.Wagering.Multiplier   = 1;
            firstDeposit.Template.Availability.ExcludeBonuses.Add(new BonusExclude {
                ExcludedBonusId = reloadBonus.Id
            });
            firstDeposit.Template.Availability.ExcludeOperation = Operation.Any;

            MakeDeposit(PlayerId, 200, firstDeposit.Code);
            MakeDeposit(PlayerId, 200, reloadBonus.Code);

            var walletQueriesMock = new Mock <IBrandOperations>();

            walletQueriesMock.Setup(queries => queries.GetPlayerBalance(It.IsAny <Guid>(), It.IsAny <string>())).Returns(10m);
            Container.RegisterInstance(walletQueriesMock.Object);
            PlaceAndWinBet(50, 100, PlayerId);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Negated);
        }
Пример #8
0
        public void Bonus_redemption_without_rollover_has_None_rollover_status_after_activation()
        {
            _bonus.Template.Wagering.HasWagering = false;

            MakeDeposit(PlayerId);

            Assert.AreEqual(RolloverStatus.None, BonusRedemptions.First().RolloverState);
        }
Пример #9
0
        public void System_activates_Automatic_mode_bonus_redemption()
        {
            CreateFirstDepositBonus();

            MakeDeposit(PlayerId);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Activated);
        }
Пример #10
0
        public void System_activates_AutomaticWithBonusCode_mode_bonus_redemption()
        {
            var bonus = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            MakeDeposit(PlayerId, bonusCode: bonus.Code);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Activated);
        }
Пример #11
0
        public void Player_redeems_ManualByPlayer_deposit_bonus()
        {
            var bonus = CreateFirstDepositBonus(mode: IssuanceMode.ManualByPlayer);

            MakeDeposit(PlayerId, bonusId: bonus.Id);

            BonusRedemptions.Count.Should().Be(1);
            BonusRedemptions.First().Bonus.Id.Should().Be(bonus.Id);
        }
Пример #12
0
        public void Player_redeems_AutomaticWithBonusCode_deposit_bonus()
        {
            var bonus = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            MakeDeposit(PlayerId, bonusCode: bonus.Code);

            BonusRedemptions.Count.Should().Be(1);
            BonusRedemptions.First().Bonus.Id.Should().Be(bonus.Id);
        }
        public void Cancel_of_deposit_negates_related_bonus_redemption()
        {
            CreateFirstDepositBonus();

            var depositId = SubmitDeposit(PlayerId, 100);

            UnverifyDeposit(depositId, PlayerId);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Negated);
        }
Пример #14
0
        public void Can_receive_flat_amount_fund_in_bonus()
        {
            //depositing funds to use them for fund in
            MakeDeposit(PlayerId);
            MakeFundIn(PlayerId, _brandWalletId, 100);

            var bonusRedemption = BonusRedemptions.First();

            Assert.AreEqual(ActivationStatus.Activated, bonusRedemption.ActivationState);
            Assert.AreEqual(_bonus.Template.Rules.RewardTiers.Single().BonusTiers.Single().Reward, bonusRedemption.Amount);
        }
Пример #15
0
        public decimal Deposit_bonus_lock_amount_is_correct(bool isAfterWager)
        {
            var bonus = CreateFirstDepositBonus();

            bonus.Template.Info.TemplateType     = BonusType.FirstDeposit;
            bonus.Template.Wagering.HasWagering  = true;
            bonus.Template.Wagering.IsAfterWager = isAfterWager;

            MakeDeposit(PlayerId);

            return(BonusRedemptions.First().LockedAmount);
        }
Пример #16
0
        public void Contribution_is_calculated_as_100_percents_for_game_that_is_not_on_GameContributions_list()
        {
            _bonus.Template.Wagering.GameContributions.Add(new GameContribution
            {
                Contribution = 0.5m,
                GameId       = Guid.NewGuid()
            });
            MakeDeposit(PlayerId);
            PlaceAndLoseBet(27, PlayerId);

            BonusRedemptions.First().Contributions.SingleOrDefault(c => c.Contribution == 27).Should().NotBeNull();
        }
Пример #17
0
        public void Pending_deposit_bonus_redemption_is_negated_if_deposit_amount_became_unqualified()
        {
            var bonus = CreateFirstDepositBonus();

            bonus.Template.Rules.RewardTiers.Single().BonusTiers.Single().From = 150;

            var depositId = SubmitDeposit(PlayerId, 200);

            ApproveDeposit(depositId, PlayerId, 100);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Negated);
        }
Пример #18
0
        public void Percentage_bonus_reward_is_limited_by_transaction_limit()
        {
            const decimal limit = 50m;
            var           bonus = CreateFirstDepositBonus();

            bonus.Template.Rules.RewardType = BonusRewardType.Percentage;
            bonus.Template.Rules.RewardTiers.Single().Tiers.Single().Reward = 0.5m;
            bonus.Template.Rules.RewardTiers.Single().Tiers.Single().MaxAmount = limit;

            MakeDeposit(PlayerId, 1000);

            Assert.AreEqual(limit, BonusRedemptions.First().Amount);
        }
        public decimal Bonus_rollover_is_calculated_correctly(WageringMethod method)
        {
            var bonus = CreateFirstDepositBonus();

            bonus.Template.Info.IsWithdrawable  = true;
            bonus.Template.Wagering.HasWagering = true;
            bonus.Template.Wagering.Method      = method;
            bonus.Template.Wagering.Multiplier  = 2;

            MakeDeposit(PlayerId);

            return(BonusRedemptions.First().Rollover);
        }
Пример #20
0
        public void Bonus_cancellation_sets_rollover_status_to_None()
        {
            MakeDeposit(PlayerId);
            var bonusRedemption = BonusRedemptions.First();
            var model           = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            };

            BonusCommands.CancelBonusRedemption(model);

            Assert.AreEqual(RolloverStatus.None, bonusRedemption.RolloverState);
        }
Пример #21
0
        public void Meeting_wagering_threshold_completes_wagering()
        {
            _bonus.Template.Wagering.Threshold = 200;
            MakeDeposit(PlayerId);
            PlaceAndLoseBet(100, PlayerId);

            var bonusRedemption = BonusRedemptions.First();

            bonusRedemption.RolloverState.Should().Be(RolloverStatus.ZeroedOut);
            var thresholdContribution = bonusRedemption.Contributions.ElementAt(1);

            thresholdContribution.Type.Should().Be(ContributionType.Threshold);
            thresholdContribution.Contribution.Should().Be(200);
        }
        public void Can_redeem_deposit_bonus_with_matched_fixed_amount_specific_rules(int depositAmount,
                                                                                      int expectedRedemptionAmount)
        {
            var bonus = CreateBonusWithBonusTiers(BonusRewardType.TieredAmount);

            MakeDeposit(PlayerId, depositAmount);

            var bonusRedemption = BonusRedemptions.First();

            Assert.AreEqual(PlayerId, bonusRedemption.Player.Id);
            Assert.AreEqual(bonus.Id, bonusRedemption.Bonus.Id);
            Assert.AreEqual(ActivationStatus.Activated, bonusRedemption.ActivationState);
            Assert.AreEqual(expectedRedemptionAmount, bonusRedemption.Amount);
        }
Пример #23
0
        public void Bonus_cancellation_sets_activation_status_to_Cancelled()
        {
            MakeDeposit(PlayerId);
            var bonusRedemption = BonusRedemptions.First();
            var model           = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            };

            BonusCommands.CancelBonusRedemption(model);

            Assert.AreEqual(ActivationStatus.Canceled, bonusRedemption.ActivationState);
        }
        public void Bonus_redemtion_amount_is_recalculated_if_deposit_amount_changes()
        {
            var bonus = CreateFirstDepositBonus();

            bonus.Template.Rules.RewardType = BonusRewardType.Percentage;
            bonus.Template.Rules.RewardTiers.Single().BonusTiers.Single().Reward = 0.5m;

            var depositId = SubmitDeposit(PlayerId);

            ApproveDeposit(depositId, PlayerId, 100);

            BonusRedemptions.First().Amount.Should().Be(50);
            bonus.Statistic.TotalRedeemedAmount.Should().Be(50);
        }
Пример #25
0
        public void System_redeems_Automatic_mode_deposit_bonus()
        {
            var bonus1 = CreateFirstDepositBonus();

            //bonus #2
            CreateFirstDepositBonus(mode: IssuanceMode.ManualByPlayer);
            //bonus #3
            CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            MakeDeposit(PlayerId);

            BonusRedemptions.Count.Should().Be(1);
            BonusRedemptions.First().Bonus.Id.Should().Be(bonus1.Id);
        }
Пример #26
0
        public void Wagering_completed_sets_rollover_status_to_Completed()
        {
            _bonus.IsActive = false;
            var bonus = CreateFirstDepositBonus(mode: IssuanceMode.AutomaticWithCode);

            bonus.Template.Info.IsWithdrawable  = true;
            bonus.Template.Wagering.HasWagering = true;
            bonus.Template.Wagering.Method      = WageringMethod.Bonus;
            bonus.Template.Wagering.Multiplier  = 1;

            MakeDeposit(PlayerId, bonusCode: bonus.Code);
            PlaceAndLoseBet(27, PlayerId);

            Assert.AreEqual(RolloverStatus.Completed, BonusRedemptions.First(br => br.Rollover == 27).RolloverState);
        }
Пример #27
0
        public void Bonus_cancellation_releases_bonus_lock()
        {
            MakeDeposit(PlayerId, 300);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.First().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            _wallet.Locks.Count(tr => tr.UnlockedOn.HasValue)
            .Should()
            .Be(2, "Unlock of deposit, bonus amount");
        }
Пример #28
0
        public void Per_player_bonus_issuance_limit_qualification_is_processed_during_activation()
        {
            MakeDeposit(PlayerId);

            var bonus = CreateFirstDepositBonus();

            bonus.Template.Availability.PlayerRedemptionsLimit = 1;
            bonus.Template.Info.TemplateType = BonusType.ReloadDeposit;

            var depositId = SubmitDeposit(PlayerId);

            MakeDeposit(PlayerId);
            ApproveDeposit(depositId, PlayerId, 200);

            BonusRedemptions.First().ActivationState.Should().Be(ActivationStatus.Negated);
        }
Пример #29
0
        public void Player_should_activate_ManualByPlayer_mode_bonus_redemption()
        {
            var bonus = CreateFirstDepositBonus(mode: IssuanceMode.ManualByPlayer);

            MakeDeposit(PlayerId, bonusId: bonus.Id);

            var bonusRedemption = BonusRedemptions.First();

            BonusCommands.ClaimBonusRedemption(new ClaimBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            });

            bonusRedemption.ActivationState.Should().Be(ActivationStatus.Activated);
        }
Пример #30
0
        public void FreeBet_increases_wagering_completed()
        {
            MakeDeposit(PlayerId);
            var gameId  = Guid.NewGuid();
            var roundId = Guid.NewGuid();

            ServiceBus.PublishMessage(new BetPlacedFree
            {
                PlayerId = PlayerId,
                Amount   = 27,
                GameId   = gameId,
                RoundId  = roundId,
                Turnover = 27
            });

            BonusRedemptions.First().Contributions.SingleOrDefault(c => c.Contribution == 27).Should().NotBeNull();
        }