public async Task RedeemMatchRewards(MatchCompletedEvent @event)
 {
     using (var scope = _serviceScopeFactory.CreateScope())
     {
         await scope.ServiceProvider.GetRequiredService <IPackService>().RedeemMatchRewards(@event.UserId, @event.Victorious);
     }
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
 public static void PublishMatchCompletedEvent()
 {
     MatchCompletedEvent?.Invoke();
     Instance.EmitSignal(nameof(MatchCompleted));
 }