public void DoneClickedTest001_CheckIfAllRewardsHaveSameDate()
        {
            RewardSetViewModel model = new RewardSetViewModel();
            DateTime           date  = DateTime.Now;

            //set up few with differnt dates
            model.Rewards.Add(new Reward()
            {
                Comment = "test",
                Date    = date.AddMinutes(-1)
            });

            model.Rewards.Add(new Reward()
            {
                Comment = "test",
                Date    = date.AddDays(-10)
            });

            model.Rewards.Add(new Reward()
            {
                Comment = "test"
            });

            model.DoneClicked(null);

            Assert.AreEqual(Tracker.Instance.Rewards[0].Date, Tracker.Instance.Rewards[1].Date);
            Assert.AreEqual(Tracker.Instance.Rewards[0].Date, Tracker.Instance.Rewards[2].Date);
        }
        public void RewardSetViewModel001_Init()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            Assert.AreEqual(0, model.RewardsAdded.Count);
            Assert.AreEqual(0, model.RewardsEditor.Count);
            Assert.IsNull(model.RewardReason);
        }
        public void RewardSetViewModel002_ReasonSelected()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            ESLTracker.DataModel.Enums.RewardReason reason = ESLTracker.DataModel.Enums.RewardReason.LevelUp;

            model.RewardReason = reason;

            Assert.AreEqual(0, model.RewardsAdded.Count);
            Assert.AreEqual(4, model.RewardsEditor.Count);
            Assert.AreEqual(reason, model.RewardReason);
        }
        public void AddRewardTest001_CanNonArenaRewardLinkedToDeck()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            model.RewardReason = RewardReason.LevelUp;

            model.AddReward(new Reward()
            {
                ArenaDeck = new Deck(), Reason = RewardReason.LevelUp
            });

            Assert.IsNull(model.Rewards[0].ArenaDeck);
            Assert.IsNull(model.Rewards[0].ArenaDeckId);
        }
        public void RewardSetViewModel003_ReasonSelectedAndRewardModified()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            ESLTracker.DataModel.Enums.RewardReason reason = ESLTracker.DataModel.Enums.RewardReason.LevelUp;

            model.RewardReason = reason;

            model.RewardsEditor[1].Reward.Quantity = 1;

            Assert.AreEqual(1, model.RewardsAdded.Count);
            Assert.AreEqual(4, model.RewardsEditor.Count);
            Assert.AreEqual(reason, model.RewardReason);
        }
        public void RewardSetViewModel006_AddedNewLine()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            RewardReason reason = RewardReason.LevelUp;

            model.RewardReason = reason;

            model.RewardsEditor.Where(r => r.Reward.Type == RewardType.Gold).Single().Reward.Quantity = 1;

            var reward = model.AddNewReward(RewardType.Gold);

            reward.Quantity = 12;

            Assert.AreEqual(2, model.RewardsAdded.Count);
            Assert.AreEqual(5, model.RewardsEditor.Count);
            Assert.AreEqual(1, model.RewardsAdded.Where(r => r.Quantity == 1).Count());
            Assert.AreEqual(1, model.RewardsAdded.Where(r => r.Quantity == 12).Count());
        }
        public void RewardSetViewModel004_ReasonChanged()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            ESLTracker.DataModel.Enums.RewardReason reason  = ESLTracker.DataModel.Enums.RewardReason.LevelUp;
            ESLTracker.DataModel.Enums.RewardReason reason2 = ESLTracker.DataModel.Enums.RewardReason.Quest;

            model.RewardReason = reason;

            model.RewardsEditor[1].Reward.Quantity = 1;

            model.RewardReason = reason2;

            model.RewardsEditor[1].Reward.Quantity = 2;

            Assert.AreEqual(2, model.RewardsAdded.Count);
            Assert.AreEqual(4, model.RewardsEditor.Count);
            Assert.AreEqual(1, model.RewardsAdded.Where(r => r.Quantity == 1).Count());
            Assert.AreEqual(1, model.RewardsAdded.Where(r => r.Quantity == 2).Count());
        }
        public void SetActiveControlTest001_IsSelectionForGuildVisibleOnlyForGoldAndQuest()
        {
            //if not present in expected array, assume false. Add only true conditions!
            Dictionary <RewardReason, Dictionary <RewardType, bool> > expectedVisibilty = new Dictionary <RewardReason, Dictionary <RewardType, bool> >()
            {
                { RewardReason.Quest, new Dictionary <RewardType, bool>()
                  {
                      { RewardType.Card, false },
                      { RewardType.Gold, true },
                      { RewardType.Pack, false },
                      { RewardType.SoulGem, false }
                  } }
            };

            foreach (RewardReason reason in Enum.GetValues(typeof(RewardReason)))
            {
                foreach (RewardType type in Enum.GetValues(typeof(RewardType)))
                {
                    //if not present in expected array, assume false
                    bool expected;
                    if (expectedVisibilty.Keys.Contains(reason) &&
                        expectedVisibilty[reason].Keys.Contains(type))
                    {
                        expected = expectedVisibilty[reason][type];
                    }
                    else
                    {
                        expected = false;
                    }

                    RewardSetViewModel model = new RewardSetViewModel();
                    model.RewardReason = reason;
                    AddSingleRewardViewModel singleRewardModel = new AddSingleRewardViewModel();
                    singleRewardModel.Reward.Type = type;

                    model.SetActiveControl(singleRewardModel);

                    Assert.AreEqual(expected, singleRewardModel.GuildSelectionVisible, "RewardReason={0}; RewardType={1}", model.RewardReason, singleRewardModel.Reward.Type);
                }
            }
        }
        public void RewardSetViewModel007_AddedTwoNewLines()
        {
            RewardSetViewModel model = new RewardSetViewModel();

            RewardReason reason = RewardReason.LevelUp;

            model.RewardReason = reason;

            model.RewardsEditor.Where(r => r.Reward.Type == RewardType.Pack).Single().Reward.Quantity = 1;

            var reward = model.AddNewReward(RewardType.Pack);

            reward.Quantity = 2;

            reward = model.AddNewReward(RewardType.Pack);

            var expected = new RewardType[] { RewardType.Gold, RewardType.SoulGem, RewardType.Pack, RewardType.Pack, RewardType.Pack, RewardType.Card };

            Assert.AreEqual(2, model.RewardsAdded.Count);
            Assert.AreEqual(6, model.RewardsEditor.Count);

            CollectionAssert.AreEqual(expected, model.RewardsEditor.Select(r => r.Reward.Type).ToList());
        }
        public void AddRewardTest002_ArenaRewardLinkedToDeck()
        {
            Mock <ITrackerFactory> trackerFactory = new Mock <ITrackerFactory>();
            Mock <ITracker>        tracker        = new Mock <ITracker>();

            trackerFactory.Setup(tf => tf.GetTracker()).Returns(tracker.Object);

            tracker.Setup(t => t.ActiveDeck).Returns(new Deck(trackerFactory.Object)
            {
                Type = DeckType.VersusArena
            });

            RewardSetViewModel model = new RewardSetViewModel(trackerFactory.Object);

            model.RewardReason = RewardReason.VersusArena;

            model.AddReward(new Reward()
            {
                ArenaDeck = new Deck(), Reason = RewardReason.VersusArena
            });

            Assert.IsNotNull(model.Rewards[0].ArenaDeck);
            Assert.IsNotNull(model.Rewards[0].ArenaDeckId);
        }