clearData(); Arsse::$conf = new Conf(); Arsse::$db = Phake::mock(Database::class); $this->srv = new Service(); } function testComputeInterval() { $in = [ Arsse::$conf->serviceFrequency, "PT2M", "PT5M", "P2M", "5M", "interval", ]; foreach($in as $index => $spec) { try{$exp = new \DateInterval($spec);} catch(\Exception $e) {$exp = new \DateInterval("PT2M");} Arsse::$conf->serviceFrequency = $spec; $this->assertEquals($exp, Service::interval(), "Interval #$index '$spec' was not correctly calculated"); } } function testCheckIn() { $now = time(); $this->srv->checkIn(); Phake::verify(Arsse::$db)->metaSet("service_last_checkin", Phake::capture($then), "datetime"); $this->assertTime($now, $then); } function testReportHavingCheckedIn() { // the mock's metaGet() returns null by default $this->assertFalse(Service::hasCheckedIn()); $interval = Service::interval(); $valid = (new \DateTimeImmutable("now", new \DateTimezone("UTC")))->sub($interval); $invalid = $valid->sub($interval)->sub($interval); Phake::when(Arsse::$db)->metaGet("service_last_checkin")->thenReturn(Date::transform($valid, "sql"))->thenReturn(Date::transform($invalid, "sql")); $this->assertTrue(Service::hasCheckedIn()); $this->assertFalse(Service::hasCheckedIn()); } }