Beispiel #1
0
        public async Task <SkipRoundResult> Handle(SkipRound request, CancellationToken cancellationToken)
        {
            using (var transaction = repositoryTransactionsFactory.CreateTransaction())
            {
                var validatorResult = await validator.Validate(request);

                if (!validatorResult.IsSuccessful)
                {
                    return(new SkipRoundResult(validatorResult.Error));
                }

                var skipped = await gameRoundsRepository
                              .SkipRound(request.GameRoundId);

                if (!skipped)
                {
                    return(new SkipRoundResult(GameErrors.GameRoundCouldNotBeSkipped));
                }

                var createNewRoundResult = await gameRoundCreator
                                           .CreateRound(request.GameId, request.GameRoundId);

                if (!createNewRoundResult.IsSuccessful)
                {
                    return(new SkipRoundResult(createNewRoundResult.Error));
                }

                var createCardsResult = await playerCardsCreator
                                        .CreateCards(request.GameId);

                if (!createCardsResult.IsSuccessful)
                {
                    return(new SkipRoundResult(createCardsResult.Error));
                }

                var checkpoint = await gameCheckpointUpdater.Update(request.GameId, nameof(SkipRound));

                transaction.CommitTransaction();

                return(new SkipRoundResult());
            }
        }
        public async Task ReturnFailureForInactiveRound()
        {
            var baseMock          = BaseGameRequestsValidatorMock.CreateMock();
            var gameRoundRepoMock = GameRoundsRepositoryMock.Create(
                isRoundActive: false);
            var gameOwnerRuleMock = GameOrRoundOwnerRuleMock.Create <SkipRound>();

            var validator = new SkipRoundValidator(baseMock.Object, gameRoundRepoMock.Object, gameOwnerRuleMock.Object);

            var request = new SkipRound
            {
                GameId      = 1,
                UserId      = 1,
                GameRoundId = 1
            };

            var result = await validator.Validate(request);

            Assert.NotNull(result);
            Assert.False(result.IsSuccessful);
            Assert.Equal(ValidatorErrors.Games.InvalidGameRoundStatus, result.Error);
        }
        public async Task ReturnSuccessForValidData(GameRoundStatusEnum gameRoundStatus)
        {
            var baseMock          = BaseGameRequestsValidatorMock.CreateMock();
            var gameRoundRepoMock = GameRoundsRepositoryMock.Create(
                status: gameRoundStatus);
            var gameOwnerRuleMock = GameOrRoundOwnerRuleMock.Create <SkipRound>();

            var validator = new SkipRoundValidator(baseMock.Object, gameRoundRepoMock.Object, gameOwnerRuleMock.Object);

            var request = new SkipRound
            {
                GameId      = 1,
                UserId      = 1,
                GameRoundId = 1
            };

            var result = await validator.Validate(request);

            Assert.True(result.IsSuccessful);
            baseMock.Verify(x => x.Validate(request));
            gameOwnerRuleMock.Verify(x => x.Validate(request));
        }