public void Can_Calculate_NumContactsCreatedProgress()
        {
            // Setup
            MilestoneConfig milestone = new MilestoneConfig { JobSearchMetrics = new JobSearchMetrics { NumContactsCreated = 5 } };
            JobSearch jobSearch = new JobSearch
            {
                Metrics = new JobSearchMetrics { NumContactsCreated = 2 },
                CurrentMilestone = milestone
            };

            // Execute
            JobSearchMilestoneProgress result = new JobSearchMilestoneProgress(jobSearch);

            // Verify
            Assert.AreEqual(((decimal)2 / (decimal)5), result.NumContactsCreatedProgress, "NumContactsCreatedProgress's value was incorrect");
        }
        public void Progress_Is_One_When_JobSearch_NumCompaniesCreated_Is_Greater_Than_Milestone()
        {
            // Setup
            MilestoneConfig milestone = new MilestoneConfig { JobSearchMetrics = new JobSearchMetrics { NumCompaniesCreated = 3 } };
            JobSearch jobSearch = new JobSearch
            {
                Metrics = new JobSearchMetrics { NumCompaniesCreated = 4 },
                CurrentMilestone = milestone
            };

            // Execute 
            JobSearchMilestoneProgress result = new JobSearchMilestoneProgress(jobSearch);

            // Verify
            Assert.AreEqual(1, result.NumCompaniesCreatedProgress, "NumCompaniesCreatedProgress's value was incorrect");
        }
        public void Uncompleted_Jobsearch_Milestone_Doesnt_Progress_To_Next_Milestone()
        {
            // Setup
            MilestoneConfig ms2 = new MilestoneConfig();
            MilestoneConfig ms1 = new MilestoneConfig { JobSearchMetrics = new JobSearchMetrics { NumCompaniesCreated = 2 }, NextMilestone = ms2 };
            JobSearch search = new JobSearch { Metrics = new JobSearchMetrics { NumCompaniesCreated = 1 }, CurrentMilestone = ms1 };

            _unitOfWork.JobSearches.Add(search);
            _unitOfWork.Commit();

            Mock<JobSearchByIdQuery> jobSearchQuery = new Mock<JobSearchByIdQuery>(_unitOfWork);
            jobSearchQuery.Setup(x => x.WithJobSearchId(It.IsAny<int>())).Returns(jobSearchQuery.Object);
            jobSearchQuery.Setup(x => x.Execute()).Returns(search);
            _serviceFactory.Setup(x => x.GetService<JobSearchByIdQuery>()).Returns(jobSearchQuery.Object);

            // Act
            new StartNextJobSearchMilestoneCommand(_serviceFactory.Object)
                .Execute(new StartNextJobSearchMilestoneCommandParams { JobSearchId = search.Id });

            // Verify
            JobSearch result = _unitOfWork.JobSearches.Fetch().Single();
            Assert.AreEqual(ms1, result.CurrentMilestone, "Job search's CurrentMilestone was incorrect");
        }
        public void Progess_Is_One_When_Milestone_NumInPersonInterviewTasksCreated_Is_Zero()
        {
            // Setup
            MilestoneConfig milestone = new MilestoneConfig { JobSearchMetrics = new JobSearchMetrics { NumInPersonInterviewTasksCreated = 0 } };
            JobSearch jobSearch = new JobSearch
            {
                Metrics = new JobSearchMetrics { NumInPersonInterviewTasksCreated = 2 },
                CurrentMilestone = milestone
            };

            // Execute 
            JobSearchMilestoneProgress result = new JobSearchMilestoneProgress(jobSearch);

            // Verify
            Assert.AreEqual(1, result.NumInPersonInterviewTasksCreatedProgress, "NumInPersonInterviewTasksCreatedProgress's value was incorrect");
        }
        public void Jobsearch_Marked_As_Milestones_Completed_When_Last_Milestone_Is_Completed()
        {
            // Setup
            var ms = new MilestoneConfig { JobSearchMetrics = new JobSearchMetrics() };
            var search = new JobSearch { Metrics = new JobSearchMetrics(), CurrentMilestone = ms };

            _context.MilestoneConfigs.Add(ms);
            _context.JobSearches.Add(search);
            _context.SaveChanges();

            Mock<JobSearchByIdQuery> jobSearchQuery = new Mock<JobSearchByIdQuery>(_unitOfWork);
            jobSearchQuery.Setup(x => x.WithJobSearchId(It.IsAny<int>())).Returns(jobSearchQuery.Object);
            jobSearchQuery.Setup(x => x.Execute()).Returns(search);
            _serviceFactory.Setup(x => x.GetService<JobSearchByIdQuery>()).Returns(jobSearchQuery.Object);

            // Act
            new StartNextJobSearchMilestoneCommand(_serviceFactory.Object)
                .Execute(new StartNextJobSearchMilestoneCommandParams { JobSearchId = search.Id });

            // Verify
            Assert.IsTrue(search.MilestonesCompleted, "Job search is not marked as completing all milestones");
        }