public async Task RedeemMatchRewards(MatchCompletedEvent @event) { using (var scope = _serviceScopeFactory.CreateScope()) { await scope.ServiceProvider.GetRequiredService <IPackService>().RedeemMatchRewards(@event.UserId, @event.Victorious); } }
public async Task RedeemMatchRewards_CallsRedeemMatchRewardsOnce() { // Arrange var stubEvent = new MatchCompletedEvent() { Victorious = false, UserId = Guid.NewGuid() }; var mockBus = new Mock <IBus>(); var mockPackService = new Mock <IPackService>(); var mockServiceProvider = new Mock <IServiceProvider>(); mockServiceProvider.Setup(x => x.GetService(typeof(IPackService))).Returns(mockPackService.Object); var mockServiceScope = new Mock <IServiceScope>(); mockServiceScope.SetupGet(x => x.ServiceProvider).Returns(mockServiceProvider.Object); var mockServiceScopeFactory = new Mock <IServiceScopeFactory>(); mockServiceScopeFactory.Setup(x => x.CreateScope()).Returns(mockServiceScope.Object); // Act var subscriber = new MatchCompletedEventSubscriber(mockBus.Object, mockServiceScopeFactory.Object); await subscriber.RedeemMatchRewards(stubEvent); // Assert mockPackService.Verify(x => x.RedeemMatchRewards(stubEvent.UserId, stubEvent.Victorious), Times.Once); }
public async Task ClaimingMatchReward_AsHomeTeam_ShouldMarkMatchAsClaimedByHomeTeam() { var mockMatchmakingService = new Mock <IMatchmakingService>(); var mockMatchRepository = new Mock <IMatchRepository>(); var userId = Guid.NewGuid(); var unclaimedMatch = new ApplicationCore.Models.Match { HomeTeam = new TeamDetails { UserId = userId, Squad = new Squad { Id = Guid.NewGuid() } }, AwayTeam = new TeamDetails { UserId = Guid.NewGuid(), Squad = new Squad { Id = Guid.NewGuid() } } }; ApplicationCore.Models.Match updatedMatch = null; MatchCompletedEvent publishedEvent = null; mockMatchRepository.Setup(x => x.GetUnclaimedAsync(userId)).Returns( Task.FromResult((IEnumerable <ApplicationCore.Models.Match>) new List <ApplicationCore.Models.Match> { unclaimedMatch })); mockMatchRepository.Setup(x => x.UpdateAsync(It.IsAny <ApplicationCore.Models.Match>())) .Callback <ApplicationCore.Models.Match>(r => updatedMatch = r); var stubMatchEngine = new Mock <IMatchEngine>(); var mockBus = new Mock <IBus>(); mockBus.Setup(x => x.PublishAsync(It.IsAny <MatchCompletedEvent>())) .Callback <MatchCompletedEvent>(r => publishedEvent = r); _matchService = new MatchService(mockMatchmakingService.Object, stubMatchEngine.Object, mockMatchRepository.Object, mockBus.Object); //Act await _matchService.ClaimAsync(userId); //Assert Assert.True(updatedMatch.HomeTeam.HasClaimedRewards); Assert.NotNull(publishedEvent); }
private void OnStateSet(MatchState old, MatchState value) { coundownTimerController.Instance.StopTimer(); dragCardController.Instance.IsActive = false; UpdateCounter(); switch (value) { case MatchState.PlayerWaiting: dragCardController.Instance.IsActive = true; if (old != value) { //coundownTimerController.Instance.RunTimer(); coundownTimerController.Instance.TimeElapsedEvent = (_, __) => { if (this.CurrentState == MatchState.PlayerWaiting) { Log("Player loss by timer elapsed"); this.CurrentState = MatchState.DisplayLoss; } return; }; } break; case MatchState.PlayerChosen: this.CurrentState = MatchState.OpponentWaiting; Log("Player chose: " + playerCard.ToString()); switch (playerCard) { case CardType.Paper: Player.Hand.Cards.PaperCount -= 1; break; case CardType.Scissors: Player.Hand.Cards.ScissorsCount -= 1; break; case CardType.Rock: Player.Hand.Cards.RockCount -= 1; break; } break; case MatchState.OpponentWaiting: Log("Waiting on opponent"); AiManagerController.Instance.SelectRandom(); break; case MatchState.OpponentChosen: Log("Opponent chose: " + opponentCard.ToString()); switch (opponentCard) { case CardType.Paper: Opponent.Hand.Cards.PaperCount -= 1; break; case CardType.Scissors: Opponent.Hand.Cards.ScissorsCount -= 1; break; case CardType.Rock: Opponent.Hand.Cards.RockCount -= 1; break; } Log("Determining round result"); this.DetermineRound(); break; case MatchState.DisplayWin: Log("Player victory"); prefabs.InfoText.gameObject.SetActive(true); prefabs.InfoText.text = "You Win!"; Player.Hand.Stars += 1; Opponent.Hand.Stars -= 1; break; case MatchState.DisplayLoss: Log("Player loss"); prefabs.InfoText.gameObject.SetActive(true); prefabs.InfoText.text = "You Lose!"; Player.Hand.Stars -= 1; Opponent.Hand.Stars += 1; break; case MatchState.DisplayDraw: Log("Match draw"); prefabs.InfoText.gameObject.SetActive(true); prefabs.InfoText.text = "It's a Draw!"; break; case MatchState.MatchEndedVictory: Log("Match ended - Player Victory"); MatchCompletedEvent?.Invoke(this, this); break; case MatchState.MatchEndedDefeat: Log("Match ended - Player Defeat"); MatchCompletedEvent?.Invoke(this, this); break; case MatchState.MatchEndedDraw: Log("Match ended - Draw"); MatchCompletedEvent?.Invoke(this, this); break; } switch (CurrentState) { case MatchState.DisplayWin: case MatchState.DisplayLoss: case MatchState.PlayerWaiting: case MatchState.MatchNew: this.Player.GenerateStars(prefabs.PlayerStarRootObject, new Vector3(-3.15f, -0.5f, 0f)); this.Opponent.GenerateStars(prefabs.OpponentStarRootObject, new Vector3(3.25f, -0.5f, 0f)); break; } }
public static void PublishMatchCompletedEvent() { MatchCompletedEvent?.Invoke(); Instance.EmitSignal(nameof(MatchCompleted)); }