public function testGetNextSession() { $c = new Course(); // Finished offerings $fo1 = $this->buildOffering(1, new \DateTime("2012-06-03"), Offering::START_DATES_KNOWN); $fo2 = $this->buildOffering(2, new \DateTime("2012-05-03"), Offering::START_DATES_KNOWN); $fo3 = $this->buildOffering(3, new \DateTime("2012-07-03"), Offering::START_DATES_KNOWN); // Ongoing session $oodt1 = new \DateTime(); $oodt1->sub(new \DateInterval("P10D")); $oo1 = $this->buildOffering(4, $oodt1, Offering::START_DATES_KNOWN); // Self paced session $so1 = $this->buildOffering(5, new \DateTime("2012-07-03"), Offering::COURSE_OPEN); // Upcoming sessions $uo1 = $this->buildOffering(6, $this->getFutureDateUtility("P20D"), Offering::START_DATES_KNOWN); $uo2 = $this->buildOffering(7, $this->getFutureDateUtility("P10D"), Offering::START_DATES_KNOWN); $uo3 = $this->buildOffering(8, $this->getFutureDateUtility("P30D"), Offering::START_DATES_KNOWN); // Course with single finished offering $c->addOffering($fo1); $next = CourseUtility::getNextSession($c); $this->assertEquals($fo1->getId(), $next->getId()); // Course with multiple finished offering $c->addOffering($fo2); $c->addOffering($fo3); $next = CourseUtility::getNextSession($c); $this->assertEquals($fo3->getId(), $next->getId()); // Course with ongoing sessions $c->addOffering($oo1); $next = CourseUtility::getNextSession($c); $this->assertEquals($oo1->getId(), $next->getId()); // Course with with self paced sessions $c->addOffering($so1); $next = CourseUtility::getNextSession($c); $this->assertEquals($so1->getId(), $next->getId()); // Course with single upcoming session $c->addOffering($uo1); $next = CourseUtility::getNextSession($c); $this->assertEquals($uo1->getId(), $next->getId()); // Course with multiple upcoming sessions $c->addOffering($uo2); $c->addOffering($uo3); $next = CourseUtility::getNextSession($c); $this->assertEquals($uo2->getId(), $next->getId()); }