dbMock = $this->mock(Database::class); Arsse::$db = $this->dbMock->get(); $this->srv = new Service(); } public function testCheckIn(): void { $now = time(); $this->srv->checkIn(); $this->dbMock->metaSet->calledWith("service_last_checkin", "~", "datetime"); $then = $this->dbMock->metaSet->firstCall()->argument(1); $this->assertTime($now, $then); } public function testReportHavingCheckedIn(): void { // the mock's metaGet() returns null by default $this->assertFalse(Service::hasCheckedIn()); $interval = Arsse::$conf->serviceFrequency; $valid = (new \DateTimeImmutable("now", new \DateTimezone("UTC")))->sub($interval); $invalid = $valid->sub($interval)->sub($interval); $this->dbMock->metaGet->with("service_last_checkin")->returns(Date::transform($valid, "sql"), Date::transform($invalid, "sql")); Arsse::$db = $this->dbMock->get(); $this->assertTrue(Service::hasCheckedIn()); $this->assertFalse(Service::hasCheckedIn()); } public function testPerformPreCleanup(): void { $this->assertTrue(Service::cleanupPre()); $this->dbMock->feedCleanup->called(); $this->dbMock->iconCleanup->called(); $this->dbMock->sessionCleanup->called(); } public function testPerformShortPostCleanup(): void { $this->dbMock->articleCleanup->returns(0); Arsse::$db = $this->dbMock->get(); $this->assertTrue(Service::cleanupPost()); $this->dbMock->articleCleanup->Called(); $this->dbMock->driverMaintenance->never()->called(); } public function testPerformFullPostCleanup(): void { $this->dbMock->articleCleanup->returns(1); Arsse::$db = $this->dbMock->get(); $this->assertTrue(Service::cleanupPost()); $this->dbMock->articleCleanup->called(); $this->dbMock->driverMaintenance->called(); } public function testRefreshFeeds(): void { // set up mock database actions $this->dbMock->metaSet->returns(true); $this->dbMock->feedCleanup->returns(true); $this->dbMock->sessionCleanup->returns(true); $this->dbMock->articleCleanup->returns(0); $this->dbMock->feedListStale->returns([1,2,3]); // perform the test Arsse::$db = $this->dbMock->get(); $d = $this->mock(\JKingWeb\Arsse\Service\Driver::class); $s = new \JKingWeb\Arsse\Test\Service($d->get()); $this->assertInstanceOf(\DateTimeInterface::class, $s->watch(false)); // verify invocations $d->queue->calledWith(1, 2, 3); $d->exec->called(); $d->clean->called(); $this->dbMock->feedCleanup->called(); $this->dbMock->iconCleanup->called(); $this->dbMock->sessionCleanup->called(); $this->dbMock->articleCleanup->called(); $this->dbMock->metaSet->calledWith("service_last_checkin", $this->anything(), "datetime"); } }