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); }
public Task <CancelBonusResponse> Cancel(CancelBonusRedemption model) { var player = _playerQueries.GetPlayer(model.PlayerId); CheckBrand(player.BrandId); return(_bonusApiProxy.CancelBonusRedemptionAsync(model)); }
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 }); }
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); }
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_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"); }
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(); }
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); }
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); }
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); }
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(); }
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(); } }
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); }
public CancelBonusResponse CancelBonusRedemption(CancelBonusRedemption request) { return(WebClient.SecurePostAsJson <CancelBonusRedemption, CancelBonusResponse>(Token, _url + AdminApiRoutes.CancelBonusRedemption, request)); }
public Task <CancelBonusResponse> CancelBonusRedemptionAsync(CancelBonusRedemption request) { return(SecurePostAsJson <CancelBonusRedemption, CancelBonusResponse>(Routes.CancelBonusRedemption, request)); }
public ValidationResult GetValidationResult(CancelBonusRedemption model) { return(new CancelBonusValidator(_repository).Validate(model)); }