Exemplo n.º 1
0
        public void PlaySiegeHorn()
        {
            var hornCard = new Card
            {
                Id     = 1,
                Types  = GwintType.RowModifier | GwintType.Melee | GwintType.Ranged | GwintType.Siege,
                Effect = GwintEffect.Horn
            };
            var player1HandCards = new List <PlayerCard>
            {
                hornCard.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>();
            var game             = TestGameProvider.CreateGame(player1HandCards, player1CardSlots);
            var command          = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.SiegeModifier
            };

            command.Execute(game);

            var cardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.SiegeModifier, cardSlot.Slot);
            Assert.Equal(hornCard, cardSlot.Card);
        }
Exemplo n.º 2
0
        public void PlaySiegeCreatureCard()
        {
            var card = new Card
            {
                Id    = 1,
                Types = GwintType.Creature | GwintType.Siege
            };
            var player1HandCards = new List <PlayerCard>
            {
                card.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>();
            var game             = TestGameProvider.CreateGame(player1HandCards, player1CardSlots);
            var command          = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Siege
            };

            command.Execute(game);

            var cardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.Siege, cardSlot.Slot);
            Assert.Equal(card, cardSlot.Card);
        }
Exemplo n.º 3
0
        public void PlayMeleeScorchCreatureCardBelowThreshold()
        {
            var meleeScorchCreature = new Card
            {
                Id     = 1,
                Types  = GwintType.Creature | GwintType.Melee,
                Effect = GwintEffect.MeleeScorch
            };
            var meleeCreature = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Melee
            };
            var player1HandCards = new List <PlayerCard>
            {
                meleeScorchCreature.ToPlayerCard()
            };
            var player1CardSlots      = new List <PlayerCardSlot>();
            var player1GraveyardCards = new List <PlayerCard>();
            var player2CardSlots      = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot           = GwintSlot.Melee,
                    Card           = meleeCreature,
                    EffectivePower = Constants.ScorchThresholdMelee - 1
                }
            };
            var player2GraveyardCards = new List <PlayerCard>();
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards,
                player2CardSlots,
                player2GraveyardCards);

            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee
            };

            command.Execute(game);

            var player1CardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.Melee, player1CardSlot.Slot);
            Assert.Equal(meleeScorchCreature, player1CardSlot.Card);

            var player2CardSlot = player2CardSlots.Single();

            Assert.Equal(GwintSlot.Melee, player2CardSlot.Slot);
            Assert.Equal(meleeCreature, player2CardSlot.Card);
        }
Exemplo n.º 4
0
        public async Task PlayCardCommandHandler_ThrowsException_WhenSymbolNotFound()
        {
            // Given
            var command = new PlayCardCommand(this._session.UrlId.StringId, (await this.Context.UserStories.FirstAsync()).Id, -1);
            var handler = new PlayCardCommandHandler(Substitute.For <IMediator>(), this.Context, Substitute.For <ICurrentParticipantService>(), Substitute.For <IMapper>());

            // When
            TestDelegate action = () => handler.Handle(command, CancellationToken.None).GetAwaiter().GetResult();

            // Then
            Assert.That(action, Throws.InstanceOf <NotFoundException>());
        }
Exemplo n.º 5
0
    public static PlayCardCommand Create(
        MoveRequest moveRequest,
        PlayerState playerState,
        CustomerCardState customer,
        IngredientCardData ingredient)
    {
        PlayCardCommand command = new PlayCardCommand();

        command._customer    = customer;
        command._ingredient  = ingredient;
        command._playerState = playerState;
        command._moveRequest = moveRequest;
        return(command);
    }
Exemplo n.º 6
0
    private void _playCard(
        MoveRequest moveRequest,
        PlayerState playerState,
        CustomerCardState customer,
        IngredientCardData ingredient)
    {
        ICommand command = PlayCardCommand.Create(
            moveRequest,
            playerState,
            customer,
            ingredient);

        _commandFactory.Execute(command);
    }
        public void PlayScorchWithSingleCreature()
        {
            var scorchCard = new Card
            {
                Id     = 1,
                Types  = GwintType.GlobalEffect,
                Effect = GwintEffect.Scorch
            };
            var creatureCard = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Melee
            };
            var player1HandCards = new List <PlayerCard>
            {
                scorchCard.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Melee,
                    Card = creatureCard
                }
            };
            var player1GraveyardCards = new List <PlayerCard>();
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards);
            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee
            };

            command.Execute(game);


            Assert.Empty(player1CardSlots);
            var expectedGraveyardCards = new List <Card>()
            {
                creatureCard,
                scorchCard
            };

            Assert.Equal(expectedGraveyardCards, player1GraveyardCards.Select(g => g.Card));
        }
Exemplo n.º 8
0
        public void PlayAndReplaceSiegeWeatherCard()
        {
            var card1 = new Card
            {
                Id     = 1,
                Types  = GwintType.Weather,
                Effect = GwintEffect.Siege
            };
            var card2 = new Card
            {
                Id     = 2,
                Types  = GwintType.Weather,
                Effect = GwintEffect.Siege
            };
            var player1HandCards = new List <PlayerCard>
            {
                card1.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Weather,
                    Card = card2
                }
            };
            var graveyardCards = new List <PlayerCard>();
            var game           = TestGameProvider.CreateGame(player1HandCards, player1CardSlots, graveyardCards);
            var command        = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Weather
            };

            command.Execute(game);

            var cardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.Weather, cardSlot.Slot);
            Assert.Equal(card1, cardSlot.Card);

            var graveyardCard = graveyardCards.Single();

            Assert.Equal(card2, graveyardCard.Card);
        }
        public void PlayUnsummunDummySpellCard()
        {
            var unsummonDummyCard = new Card
            {
                Id     = 1,
                Types  = GwintType.Spell,
                Effect = GwintEffect.UnsummonDummy
            };
            var targetCard = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Melee
            };
            var player1HandCards = new List <PlayerCard>
            {
                unsummonDummyCard.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Melee,
                    Card = targetCard
                }
            };
            var game    = TestGameProvider.CreateGame(player1HandCards, player1CardSlots);
            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee,
                TargetCardId = 2
            };

            command.Execute(game);

            var cardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.Melee, cardSlot.Slot);
            Assert.Equal(unsummonDummyCard, cardSlot.Card);

            var handCard = player1HandCards.Single();

            Assert.Equal(targetCard, handCard.Card);
        }
Exemplo n.º 10
0
        public void PlaySummonClonesCreatureCard()
        {
            var cloneCard = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Ranged
            };
            var summonClonesCard = new Card
            {
                Id          = 1,
                Types       = GwintType.Creature | GwintType.Melee,
                Effect      = GwintEffect.SummonClones,
                SummonFlags = new List <GwintSummonFlag>
                {
                    new GwintSummonFlag
                    {
                        SummonCard = cloneCard
                    }
                }
            };
            var player1HandCards = new List <PlayerCard>
            {
                summonClonesCard.ToPlayerCard(),
                cloneCard.ToPlayerCard()
            };
            var player1CardSlots      = new List <PlayerCardSlot>();
            var player1GraveyardCards = new List <PlayerCard>();
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards);

            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee
            };

            command.Execute(game);

            Assert.Contains(player1CardSlots, s => s.Slot == GwintSlot.Melee && s.Card == summonClonesCard);
            Assert.Contains(player1CardSlots, s => s.Slot == GwintSlot.Ranged && s.Card == cloneCard);
        }
Exemplo n.º 11
0
        public void PlayNurseCreatureCard()
        {
            var nurseCreature = new Card
            {
                Id     = 1,
                Types  = GwintType.Creature | GwintType.Melee,
                Effect = GwintEffect.Nurse
            };
            var rangedCreature = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Ranged
            };
            var player1HandCards = new List <PlayerCard>
            {
                nurseCreature.ToPlayerCard()
            };
            var player1CardSlots      = new List <PlayerCardSlot>();
            var player1GraveyardCards = new List <PlayerCard>
            {
                rangedCreature.ToPlayerCard()
            };
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards);

            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee,
                TargetCardId = 2
            };

            command.Execute(game);

            Assert.Contains(player1CardSlots, s => s.Slot == GwintSlot.Melee && s.Card == nurseCreature);
            Assert.Contains(player1CardSlots, s => s.Slot == GwintSlot.Ranged && s.Card == rangedCreature);
        }
Exemplo n.º 12
0
        public void PlaySpyCreatureCard()
        {
            var spyCreature = new Card
            {
                Id     = 1,
                Types  = GwintType.Creature | GwintType.Melee | GwintType.Spy,
                Effect = GwintEffect.Draw2
            };
            var player1HandCards = new List <PlayerCard>
            {
                spyCreature.ToPlayerCard()
            };
            var player1CardSlots      = new List <PlayerCardSlot>();
            var player1GraveyardCards = new List <PlayerCard>();
            var player2CardSlots      = new List <PlayerCardSlot>();
            var player2GraveyardCards = new List <PlayerCard>();
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards,
                player2CardSlots,
                player2GraveyardCards);

            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee
            };

            command.Execute(game);

            Assert.Empty(player1CardSlots);

            var player2CardSlot = player2CardSlots.Single();

            Assert.Equal(GwintSlot.Melee, player2CardSlot.Slot);
            Assert.Equal(spyCreature, player2CardSlot.Card);
        }
Exemplo n.º 13
0
        public async Task PlayCardCommandHandler_ThrowsException_ForEstimationInWrongSymbolSet()
        {
            // Given
            var mediator = Substitute.For <IMediator>();
            var currentParticipantService = Substitute.For <ICurrentParticipantService>();

            currentParticipantService.GetParticipant().
            Returns(new ValueTask <CurrentParticipantModel>(
                        new CurrentParticipantModel(this._participantId, null, null, false)
                        ));

            Symbol symbol = this.Context.Symbols.Add(new Symbol {
                Type          = SymbolType.Number,
                ValueAsNumber = 1,
                SymbolSet     = new SymbolSet {
                    Name = "wrong "
                }
            }).Entity;

            await this.Context.SaveChangesAsync();

            var command = new PlayCardCommand(
                this._session.UrlId.StringId,
                (await this.Context.UserStories.FirstAsync()).Id,
                symbol.Id
                );

            var handler = new PlayCardCommandHandler(mediator,
                                                     this.Context,
                                                     currentParticipantService,
                                                     Substitute.For <IMapper>());

            // When
            TestDelegate action = () => handler.Handle(command, CancellationToken.None).GetAwaiter().GetResult();

            // Then
            Assert.That(action, Throws.InstanceOf <InvalidOperationException>());
        }
Exemplo n.º 14
0
        public async Task PlayCardCommandHandler_AddsEstimationAndBroadcast_ForNewEstimation()
        {
            // Given
            var mediator = Substitute.For <IMediator>();
            var currentParticipantService = Substitute.For <ICurrentParticipantService>();

            currentParticipantService.GetParticipant().
            Returns(new ValueTask <CurrentParticipantModel>(
                        new CurrentParticipantModel(this._participantId, null, null, false)
                        ));

            var command = new PlayCardCommand(
                this._session.UrlId.StringId,
                (await this.Context.UserStories.FirstAsync()).Id,
                (await this.Context.Symbols.Where(x => x.SymbolSetId == this._session.SymbolSetId).FirstAsync()).Id
                );
            var handler = new PlayCardCommandHandler(mediator,
                                                     this.Context,
                                                     currentParticipantService,
                                                     Substitute.For <IMapper>());

            // When
            await handler.Handle(command, CancellationToken.None);

            // Then
            await currentParticipantService.ReceivedWithAnyArgs(Quantity.Exactly(1))
            .GetParticipant();

            UserStory checkUserStory = await this.Context.UserStories.
                                       Include(x => x.Estimations).
                                       LastOrDefaultAsync();

            Assert.That(checkUserStory.Estimations.Select(x => x.Symbol.Id), Is.EquivalentTo(new[] { command.SymbolId }));

            await mediator.Received().
            Publish(Arg.Any <EstimationGivenNotification>(), Arg.Any <CancellationToken>());
        }
Exemplo n.º 15
0
        public async Task <ActionResult> PlayCard(PlayCardCommand command)
        {
            await _mediator.Send(command);

            return(Ok());
        }
        public void PlayScorchWithTwoDifferentPowerCreatures()
        {
            var scorchCard = new Card
            {
                Id     = 1,
                Types  = GwintType.GlobalEffect,
                Effect = GwintEffect.Scorch
            };
            var creatureCard1 = new Card
            {
                Id    = 2,
                Types = GwintType.Creature | GwintType.Melee
            };
            var creatureCard2 = new Card
            {
                Id    = 3,
                Types = GwintType.Creature | GwintType.Melee
            };
            var player1HandCards = new List <PlayerCard>
            {
                scorchCard.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot           = GwintSlot.Melee,
                    Card           = creatureCard1,
                    EffectivePower = 1
                },
                new PlayerCardSlot
                {
                    Slot           = GwintSlot.Melee,
                    Card           = creatureCard2,
                    EffectivePower = 2
                }
            };
            var player1GraveyardCards = new List <PlayerCard>();
            var game = TestGameProvider.CreateGame(
                player1HandCards,
                player1CardSlots,
                player1GraveyardCards);
            var command = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Melee
            };

            command.Execute(game);


            var cardSlot = player1CardSlots.Single();

            Assert.Equal(GwintSlot.Melee, cardSlot.Slot);
            Assert.Equal(creatureCard1, cardSlot.Card);
            var expectedGraveyardCards = new List <Card>()
            {
                creatureCard2,
                scorchCard
            };

            Assert.Equal(expectedGraveyardCards, player1GraveyardCards.Select(g => g.Card));
        }
Exemplo n.º 17
0
        public void PlayClearSkyWeatherCard()
        {
            var clearSkyCard = new Card
            {
                Id     = 1,
                Types  = GwintType.Weather,
                Effect = GwintEffect.ClearSky
            };
            var weatherCard1 = new Card
            {
                Id     = 2,
                Types  = GwintType.Weather,
                Effect = GwintEffect.Melee
            };
            var weatherCard2 = new Card
            {
                Id     = 3,
                Types  = GwintType.Weather,
                Effect = GwintEffect.Ranged
            };
            var weatherCard3 = new Card
            {
                Id     = 4,
                Types  = GwintType.Weather,
                Effect = GwintEffect.Siege
            };
            var player1HandCards = new List <PlayerCard>
            {
                clearSkyCard.ToPlayerCard()
            };
            var player1CardSlots = new List <PlayerCardSlot>
            {
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Weather,
                    Card = weatherCard1
                },
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Weather,
                    Card = weatherCard2
                },
                new PlayerCardSlot
                {
                    Slot = GwintSlot.Weather,
                    Card = weatherCard3
                },
            };
            var graveyardCards = new List <PlayerCard>();
            var game           = TestGameProvider.CreateGame(player1HandCards, player1CardSlots, graveyardCards);
            var command        = new PlayCardCommand
            {
                SenderUserId = 1,
                CardId       = 1,
                Slot         = GwintSlot.Weather
            };

            command.Execute(game);

            Assert.Empty(player1CardSlots);

            var expectedGraveyardCards = new List <Card>()
            {
                weatherCard1,
                weatherCard2,
                weatherCard3,
                clearSkyCard,
            };

            Assert.Equal(expectedGraveyardCards, graveyardCards.Select(g => g.Card), EqualityComparer <Card> .Default);
        }