using DominionBase; using DominionBase.Cards; using DominionBase.Cards.Adventures; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; namespace DominionBaseUnitTest.Cards { [TestClass] public class UnitTestAdventures : UnitTestCards { [TestMethod] public void Test_Amulet_Basic() { using (var card = new Amulet()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Duration, card.Category); } } [TestMethod] public void Test_Artificer_Basic() { using (var card = new Artificer()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(new Currency(1), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_BridgeTroll_Basic() { using (var card = new BridgeTroll()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(1, card.DurationBenefit.Buys); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack | Categories.Duration, card.Category); } } [TestMethod] public void Test_CaravanGuard_Basic() { using (var card = new CaravanGuard()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(new Currency(1), card.DurationBenefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reaction | Categories.Duration, card.Category); } } [TestMethod] public void Test_CoinOfTheRealm_Basic() { using (var card = new CoinOfTheRealm()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(new Currency(1), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Treasure | Categories.Reserve, card.Category); } } [TestMethod] public void Test_DistantLands_Basic() { using (var card = new DistantLands()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve | Categories.Victory, card.Category); } } [TestMethod] public void Test_Dungeon_Basic() { using (var card = new Dungeon()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Duration, card.Category); } } [TestMethod] public void Test_Duplicate_Basic() { using (var card = new Duplicate()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_Gear_Basic() { using (var card = new Gear()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(2, card.Benefit.Cards); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Duration, card.Category); } } [TestMethod] public void Test_Giant_Basic() { using (var card = new Giant()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack, card.Category); } } [TestMethod] public void Test_Guide_Basic() { using (var card = new Guide()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_HauntedWoods_Basic() { using (var card = new HauntedWoods()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(3, card.DurationBenefit.Cards); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack | Categories.Duration, card.Category); } } [TestMethod] public void Test_Hireling_Basic() { using (var card = new Hireling()) { Assert.AreEqual(new Cost(6), card.BaseCost); Assert.AreEqual(1, card.DurationBenefit.Cards); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Duration, card.Category); } } [TestMethod] public void Test_LostCity_Basic() { using (var card = new LostCity()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(2, card.Benefit.Cards); Assert.AreEqual(2, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Magpie_Basic() { using (var card = new Magpie()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Messenger_Basic() { using (var card = new Messenger()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(new Currency(2), card.Benefit.Currency); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Miser_Basic() { using (var card = new Miser()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Page_Basic() { using (var card = new Page()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_TreasureHunter_Basic() { using (var card = new TreasureHunter()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(new Currency(1), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Warrior_Basic() { using (var card = new Warrior()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(2, card.Benefit.Cards); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Hero_Basic() { using (var card = new Hero()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(new Currency(2), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Champion_Basic() { using (var card = new Champion()) { Assert.AreEqual(new Cost(6), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Duration, card.Category); } } [TestMethod] public void Test_Peasant_Basic() { using (var card = new Peasant()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(new Currency(1), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Soldier_Basic() { using (var card = new Soldier()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(new Currency(2), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Soldier_Play_Not_In_Play() { // Play the card, but it's not in play (e.g. Necromancer), but it should never give < 0 coins using (var card = new Soldier()) using (var currencyToGain = new Currency(0)) { var mockAttackee = new Mock(); var players = new PlayerCollection(mockGame.Object) { mockPlayer.Object, mockAttackee.Object }; mockGame.SetupGet(_ => _.Players).Returns(players); mockGame.Setup(_ => _.GetPlayersStartingWithEnumerator(mockPlayer.Object)).Returns(x => { var y = players.GetPlayersStartingWithEnumerator(x); return y; }); mockAttackee.SetupGet(_ => _._Game).Returns(mockGame.Object); var ipasa = new DeckCollection(); mockPlayer.SetupGet(_ => _.InPlayAndSetAside).Returns(ipasa); // Sets up the IsAttackBlocked dictionary properly card.PlaySetup(mockPlayer.Object); card.FollowInstructions(mockPlayer.Object); mockPlayer.Verify(_ => _.ReceiveBenefit(card, It.IsAny(), It.IsAny()), Times.Exactly(2)); mockPlayer.Verify(_ => _.ReceiveBenefit(card, It.Is(cb => cb.Currency == currencyToGain), It.IsAny()), Times.Once); } } [TestMethod] public void Test_Fugitive_Basic() { using (var card = new Fugitive()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(2, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Disciple_Basic() { using (var card = new Disciple()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Traveller, card.Category); } } [TestMethod] public void Test_Teacher_Basic() { using (var card = new Teacher()) { Assert.AreEqual(new Cost(6), card.BaseCost); Assert.IsTrue(card.BaseCost.Special); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_Port_Basic() { using (var card = new Port()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(2, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Ranger_Basic() { using (var card = new Ranger()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Ratcatcher_Basic() { using (var card = new Ratcatcher()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(1, card.Benefit.Cards); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_Raze_Basic() { using (var card = new Raze()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_Relic_Basic() { using (var card = new Relic()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(new Currency(2), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Treasure | Categories.Attack, card.Category); } } [TestMethod] public void Test_RoyalCarriage_Basic() { using (var card = new RoyalCarriage()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_Storyteller_Basic() { using (var card = new Storyteller()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(new Currency(1), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action, card.Category); } } [TestMethod] public void Test_SwampHag_Basic() { using (var card = new SwampHag()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(new Currency(3), card.DurationBenefit.Currency); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Attack | Categories.Duration, card.Category); } } [TestMethod] public void Test_Transmogrify_Basic() { using (var card = new Transmogrify()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(1, card.Benefit.Actions); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_TreasureTrove_Basic() { using (var card = new TreasureTrove()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(new Currency(2), card.Benefit.Currency); Assert.AreEqual(Categories.Card | Categories.Treasure, card.Category); } } [TestMethod] public void Test_WineMerchant_Basic() { using (var card = new WineMerchant()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(new Currency(4), card.Benefit.Currency); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(Categories.Card | Categories.Action | Categories.Reserve, card.Category); } } [TestMethod] public void Test_Alms_Basic() { using (var card = new Alms()) { Assert.AreEqual(new Cost(0), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Ball_Basic() { using (var card = new Ball()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Bonfire_Basic() { using (var card = new Bonfire()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Borrow_Basic() { using (var card = new Borrow()) { Assert.AreEqual(new Cost(0), card.BaseCost); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Expedition_Basic() { using (var card = new Expedition()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Ferry_Basic() { using (var card = new Ferry()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Inheritance_Basic() { using (var card = new Inheritance()) { Assert.AreEqual(new Cost(7), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_LostArts_Basic() { using (var card = new LostArts()) { Assert.AreEqual(new Cost(6), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Mission_Basic() { using (var card = new Mission()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Pathfinding_Basic() { using (var card = new Pathfinding()) { Assert.AreEqual(new Cost(8), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Pilgrimage_Basic() { using (var card = new Pilgrimage()) { Assert.AreEqual(new Cost(4), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Plan_Basic() { using (var card = new Plan()) { Assert.AreEqual(new Cost(3), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Quest_Basic() { using (var card = new Quest()) { Assert.AreEqual(new Cost(0), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Raid_Basic() { using (var card = new Raid()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Save_Basic() { using (var card = new Save()) { Assert.AreEqual(new Cost(1), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_ScoutingParty_Basic() { using (var card = new ScoutingParty()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(1, card.Benefit.Buys); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Seaway_Basic() { using (var card = new Seaway()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Trade_Basic() { using (var card = new Trade()) { Assert.AreEqual(new Cost(5), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_Training_Basic() { using (var card = new Training()) { Assert.AreEqual(new Cost(6), card.BaseCost); Assert.AreEqual(Categories.Event, card.Category); } } [TestMethod] public void Test_TravellingFair_Basic() { using (var card = new TravellingFair()) { Assert.AreEqual(new Cost(2), card.BaseCost); Assert.AreEqual(2, card.Benefit.Buys); Assert.AreEqual(Categories.Event, card.Category); } } } }