public void GetPersonCompletingProgramQuery_ReturnsCorrectData() { var startDate = new DateTime(2019, 1, 1); var endDate = new DateTime(2019, 2, 4); var rockContext = new RockContext(); var service = new StepProgramService(rockContext); var stepProgram = service.Queryable().Where(sp => sp.ForeignKey == ForeignKey).First(); var result = service.GetPersonCompletingProgramQuery(stepProgram.Id).ToList(); Assert.IsNotNull(result); Assert.AreEqual(2, result.Count); var personService = new PersonService(rockContext); var kathy = personService.Get(KathyKolePersonGuidString.AsGuid()); var jerry = personService.Get(JerryJenkinsPersonGuidString.AsGuid()); var kathyResult = result.FirstOrDefault(r => r.PersonId == kathy.Id); var jerryResult = result.FirstOrDefault(r => r.PersonId == jerry.Id); // Kathy completed once in 2019 and once in 2020 - we should only get the first Assert.IsNotNull(kathyResult); Assert.AreEqual(new DateTime(2019, 1, 1), kathyResult.StartedDateTime); Assert.AreEqual(new DateTime(2019, 4, 1), kathyResult.CompletedDateTime); // Jerry completed with two aliases. The first alias started in 2019. The second alias finished in 2020 Assert.IsNotNull(jerryResult); Assert.AreEqual(new DateTime(2019, 1, 1), jerryResult.StartedDateTime); Assert.AreEqual(new DateTime(2020, 3, 1), jerryResult.CompletedDateTime); }