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