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)); }