Esempio n. 1
0
        public void RedemptionCanceled_is_saved_in_event_store()
        {
            _bonus.Template.Rules.RewardTiers.Single().BonusTiers.Single().Reward = 100;
            _bonus.Template.Wagering.HasWagering = true;
            _bonus.Template.Wagering.Multiplier  = 3m;

            MakeDeposit(PlayerId, 100);

            var bonusRedemption = BonusRedemptions.Single();

            PlaceAndWinBet(20, 40, PlayerId);
            PlaceAndLoseBet(50, PlayerId);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            };

            BonusCommands.CancelBonusRedemption(model);

            var theEvent = _eventRepository.Events.Single(e => e.DataType == typeof(RedemptionCanceled).Name);
            var data     = JsonConvert.DeserializeObject <RedemptionCanceled>(theEvent.Data);

            data.AggregateId.Should().Be(bonusRedemption.Id);
            data.MainBalanceAdjustment.Should().Be(40);
            data.BonusBalanceAdjustment.Should().Be(-40);
            data.NonTransferableAdjustment.Should().Be(-100);
            data.UnlockedAmount.Should().Be(bonusRedemption.LockedAmount);
        }
Esempio n. 2
0
        public Task <CancelBonusResponse> Cancel(CancelBonusRedemption model)
        {
            var player = _playerQueries.GetPlayer(model.PlayerId);

            CheckBrand(player.BrandId);

            return(_bonusApiProxy.CancelBonusRedemptionAsync(model));
        }
Esempio n. 3
0
        public CancelBonusResponse Cancel(CancelBonusRedemption model)
        {
            var validationResult = _bonusQueries.GetValidationResult(model);

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

            _bonusCommands.CancelBonusRedemption(model);
            return(new CancelBonusResponse {
                Success = true
            });
        }
Esempio n. 4
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);
        }
Esempio n. 5
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);
        }
Esempio n. 6
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");
        }
Esempio n. 7
0
        public void Bonus_cancellation_creates_Cancellation_wagering_contribution_record()
        {
            MakeDeposit(PlayerId, 300);

            var bonusRedemption = BonusRedemptions.First();
            var model           = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = bonusRedemption.Id
            };

            BonusCommands.CancelBonusRedemption(model);

            bonusRedemption.Contributions.SingleOrDefault(c => c.Type == ContributionType.Cancellation)
            .Should()
            .NotBeNull();
        }
Esempio n. 8
0
        public void Bonus_cancellation_discards_applied_bonus_statistics_changes()
        {
            MakeDeposit(PlayerId);

            Assert.AreEqual(100, _bonus.Statistic.TotalRedeemedAmount);
            Assert.AreEqual(1, _bonus.Statistic.TotalRedemptionCount);

            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.First().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            Assert.AreEqual(0, _bonus.Statistic.TotalRedeemedAmount);
            Assert.AreEqual(0, _bonus.Statistic.TotalRedemptionCount);
        }
Esempio n. 9
0
        public void NotWithrawable_bonus_cancellation_decreases_NonTransferableBonus()
        {
            _bonus.Template.Rules.RewardTiers.Single().BonusTiers.Single().Reward = 100;
            _bonus.Template.Info.IsWithdrawable  = false;
            _bonus.Template.Wagering.HasWagering = true;
            _bonus.Template.Wagering.Multiplier  = 3m;

            MakeDeposit(PlayerId, 100);

            PlaceAndWinBet(20, 40, PlayerId);
            PlaceAndLoseBet(50, PlayerId);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.First().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            _bonusWallet.NonTransferableBonus.Should().Be(0);
        }
Esempio n. 10
0
        public void Can_cancel_a_bonus_that_has_no_wagering_contributions()
        {
            MakeDeposit(PlayerId, 300);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.First().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            _wallet.Main.Should().Be(300);
            _wallet.Bonus.Should().Be(0);
            _wallet.NonTransferableBonus.Should().Be(0);
            var transaction = _wallet.Transactions.SingleOrDefault(tr => tr.Type == TransactionType.BonusCancelled);

            transaction.Should().NotBeNull();
            transaction.MainBalanceAmount.Should().Be(0);
            transaction.BonusBalanceAmount.Should().Be(0);
            transaction.NonTransferableAmount.Should().Be(-100);
        }
Esempio n. 11
0
        public void Lock_is_released_from_correct_wallets_when_bonus_is_canceled()
        {
            var player        = BonusRepository.Players.Single(p => p.Id == PlayerId);
            var productWallet = player.Wallets.Single(a => a.Template.IsMain == false);
            var bonus         = CreateFirstDepositBonus();

            bonus.Template.Info.TemplateType   = BonusType.FundIn;
            bonus.Template.Rules.FundInWallets = new List <BonusFundInWallet>
            {
                new BonusFundInWallet {
                    WalletId = productWallet.Template.Id
                }
            };
            bonus.Template.Wagering.HasWagering  = true;
            bonus.Template.Wagering.Multiplier   = 0.1m;
            bonus.Template.Info.WalletTemplateId = _mainWallet.Template.Id;

            MakeDeposit(PlayerId, 100);
            MakeFundIn(PlayerId, productWallet.Template.Id, 100);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.Single().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            _mainWallet.BonusLock.Should().Be(0);
            _mainWallet.Locks
            .Single(tr => tr.Amount == 27)
            .UnlockedOn
            .Should()
            .HaveValue();
            productWallet.BonusLock.Should().Be(0);
            productWallet.Locks
            .Single(tr => tr.Amount == 100)
            .UnlockedOn
            .Should()
            .HaveValue();
        }
Esempio n. 12
0
        public void CancelBonusRedemption(CancelBonusRedemption model)
        {
            var playerId = model.PlayerId;

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var validationResult = _bonusQueries.GetValidationResult(model);
                if (validationResult.IsValid == false)
                {
                    throw new RegoException(validationResult.Errors.First().ErrorMessage);
                }

                var redemption  = _repository.GetBonusRedemption(playerId, model.RedemptionId);
                var transaction = redemption.Cancel();

                _brandOperations.FundOut(playerId, transaction.TotalAmount, redemption.Data.Player.CurrencyCode, transaction.Id.ToString());

                _repository.SaveChanges();

                redemption.Events.ForEach(_eventBus.Publish);
                scope.Complete();
            }
        }
Esempio n. 13
0
        public void Bonus_cancellation_after_net_win()
        {
            MakeDeposit(PlayerId, 300);
            PlaceAndWinBet(200, 300, PlayerId);
            PlaceAndLoseBet(50, PlayerId);
            var model = new CancelBonusRedemption
            {
                PlayerId     = PlayerId,
                RedemptionId = BonusRedemptions.First().Id
            };

            BonusCommands.CancelBonusRedemption(model);

            _wallet.Main.Should().Be(300);
            _wallet.Bonus.Should().Be(0);
            _wallet.NonTransferableBonus.Should().Be(0);
            var transaction = _wallet.Transactions.SingleOrDefault(tr => tr.Type == TransactionType.BonusCancelled);

            transaction.Should().NotBeNull();
            transaction.MainBalanceAmount.Should().Be(250);
            transaction.BonusBalanceAmount.Should().Be(-300);
            transaction.NonTransferableAmount.Should().Be(-100);
        }
Esempio n. 14
0
 public CancelBonusResponse CancelBonusRedemption(CancelBonusRedemption request)
 {
     return(WebClient.SecurePostAsJson <CancelBonusRedemption, CancelBonusResponse>(Token, _url + AdminApiRoutes.CancelBonusRedemption, request));
 }
Esempio n. 15
0
 public Task <CancelBonusResponse> CancelBonusRedemptionAsync(CancelBonusRedemption request)
 {
     return(SecurePostAsJson <CancelBonusRedemption, CancelBonusResponse>(Routes.CancelBonusRedemption, request));
 }
Esempio n. 16
0
 public ValidationResult GetValidationResult(CancelBonusRedemption model)
 {
     return(new CancelBonusValidator(_repository).Validate(model));
 }