Ejemplo n.º 1
0
        public void Good_request_should_not_throw(CardSelect.Request request)
        {
            var         subject = new CardSelect.Validator();
            Func <Task> action  = async() => await subject.Process(request, default);

            action.Should().NotThrow <ValidationException>();
        }
Ejemplo n.º 2
0
        public async Task Should_not_queue_game_start_notification()
        {
            var backgroundTaskQueue = new Mock <IBackgroundTaskQueue>();

            backgroundTaskQueue
            .Setup(x => x.QueueBackgroundTask(
                       It.IsAny <object>()));

            var subject = new CardSelect.BackgroundEnqueuer(
                backgroundTaskQueue.Object);

            var request = new CardSelect.Request
            {
                GameId   = GameId,
                PlayerId = PlayerId
            };

            var response = new CardSelect.Response
            {
                GameId = GameId
            };

            response.SetQueueTask(false);

            await subject.Process(request, response);

            backgroundTaskQueue.Verify(
                x => x.QueueBackgroundTask(It.IsAny <object>()),
                Times.Never);
        }
Ejemplo n.º 3
0
        public async Task Should_return_cards()
        {
            var context = DbContextFactory.CreateTripleTriadContext();
            var game    = CreateGame();

            await context.Players.AddAsync(CreatePlayer(true));

            await context.Players.AddAsync(CreatePlayer(false));

            await context.Games.AddAsync(game);

            await context.SaveChangesAsync();

            var request = new CardSelect.Request()
            {
                GameId   = GameId,
                PlayerId = HostId
            };

            var selectCardsHandler = new Mock <IStepHandler <SelectCardsStep> >();

            selectCardsHandler
            .Setup(x => x.Run(It.IsAny <SelectCardsStep>()))
            .Returns(new GameData
            {
                HostCards = Cards
            });

            var subject = new CardSelect.RequestHandler(context, selectCardsHandler.Object);

            var response = await subject.Handle(request, default);

            response.Cards.Should().BeEquivalentTo(Cards);
        }
Ejemplo n.º 4
0
        public async Task Should_throw_GameInvalidPlayerException()
        {
            var context = DbContextFactory.CreateTripleTriadContext();
            var game    = CreateGame();

            await context.Games.AddAsync(game);

            await context.SaveChangesAsync();

            var playerId = Guid.NewGuid();

            var command = new CardSelect.Request()
            {
                GameId   = GameId,
                PlayerId = playerId
            };

            var selectCardsHandler = new Mock <IStepHandler <SelectCardsStep> >();

            var subject = new CardSelect.RequestHandler(context, selectCardsHandler.Object);

            Func <Task> act = async() => await subject.Handle(command, default);

            act.Should()
            .Throw <GameInvalidPlayerException>()
            .Where(x => x.GameId == GameId &&
                   x.PlayerId == playerId);
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> SelectCards(int gameId, [FromBody] IEnumerable <string> cards)
        {
            var playerId = base.HttpContext.GetPlayerId();
            var request  = new CardSelect.Request()
            {
                GameId   = gameId,
                PlayerId = playerId,
                Cards    = cards
            };
            var response = await this.mediator.Send(request, default);

            return(base.Json(new { GameId = response.GameId, Cards = response.Cards }));
        }
Ejemplo n.º 6
0
        public void Should_throw_GameNotFoundException()
        {
            var context = DbContextFactory.CreateTripleTriadContext();

            var command = new CardSelect.Request()
            {
                GameId   = GameId,
                PlayerId = HostId
            };

            var selectCardsHandler = new Mock <IStepHandler <SelectCardsStep> >();

            var subject = new CardSelect.RequestHandler(context, selectCardsHandler.Object);

            Func <Task> act = async() => await subject.Handle(command, default);

            act.Should()
            .Throw <GameNotFoundException>()
            .Where(e => e.GameId == GameId);
        }
Ejemplo n.º 7
0
        public async Task Should_return_correct_queue_task(
            bool isHost,
            IEnumerable <Card> opponentCards,
            bool queueTask)
        {
            var context = DbContextFactory.CreateTripleTriadContext();
            var game    = CreateGame();

            await context.Players.AddAsync(CreatePlayer(true));

            await context.Players.AddAsync(CreatePlayer(false));

            await context.Games.AddAsync(game);

            await context.SaveChangesAsync();

            var request = new CardSelect.Request()
            {
                GameId   = GameId,
                PlayerId = isHost ? HostId : ChallengerId
            };

            var selectCardsHandler = new Mock <IStepHandler <SelectCardsStep> >();

            selectCardsHandler
            .Setup(x => x.Run(It.IsAny <SelectCardsStep>()))
            .Returns(new GameData
            {
                HostCards       = isHost ? Cards : opponentCards,
                ChallengerCards = isHost ? opponentCards : Cards
            });

            var subject = new CardSelect.RequestHandler(context, selectCardsHandler.Object);

            var response = await subject.Handle(request, default);

            ((ISendNotificationResponse)response).QueueTask.Should().Be(queueTask);
        }
Ejemplo n.º 8
0
        public async Task Should_throw_inner_exception_CardsAlreadySelectedException(bool isHost)
        {
            var context = DbContextFactory.CreateTripleTriadContext();
            var game    = CreateGame();

            await context.Players.AddAsync(CreatePlayer(true));

            await context.Players.AddAsync(CreatePlayer(false));

            await context.Games.AddAsync(game);

            await context.SaveChangesAsync();

            var playerId = isHost ? HostId : ChallengerId;

            var command = new CardSelect.Request()
            {
                GameId   = GameId,
                PlayerId = playerId
            };

            var selectCardsHandler = new Mock <IStepHandler <SelectCardsStep> >();

            selectCardsHandler
            .Setup(x => x.ValidateAndThrow(It.IsAny <SelectCardsStep>()))
            .Throws(new CardsAlreadySelectedException(new GameData(), isHost));

            var subject = new CardSelect.RequestHandler(context, selectCardsHandler.Object);

            Func <Task> act = async() => await subject.Handle(command, default);

            act.Should()
            .Throw <GameDataInvalidException>()
            .Where(x => x.GameId == GameId)
            .WithInnerException <CardsAlreadySelectedException>();
        }