diff --git a/tests/bootstrap.php b/tests/bootstrap.php index b335d351..63092953 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -24,4 +24,6 @@ if (function_exists("xdebug_set_filter")) { } } -\Phake::setClient(\Phake::CLIENT_PHPUNIT9); \ No newline at end of file +if (class_exists(\Phake::class)) { + \Phake::setClient(\Phake::CLIENT_PHPUNIT9); +} \ No newline at end of file diff --git a/tests/cases/CLI/TestCLI.php b/tests/cases/CLI/TestCLI.php index ccc2b7df..7b02a5ca 100644 --- a/tests/cases/CLI/TestCLI.php +++ b/tests/cases/CLI/TestCLI.php @@ -99,11 +99,11 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { public function testFailToStartTheForkingDaemon(): void { $srv = \Phake::mock(Service::class); $daemon = \Phake::mock(Daemon::class); - \Phake::when($srv)->watch->thenReturns(new \DateTimeImmutable); - \Phake::when($daemon)->checkPIDFilePath->throws(new Service\Exception("pidDuplicate", ['pid' => 2112])); - \Phake::when($daemon)->fork->returns(null); - \Phake::when(Arsse::$obj)->get(Service::class)->returns($srv); - \Phake::when(Arsse::$obj)->get(Daemon::class)->returns($daemon); + \Phake::when($srv)->watch->thenReturn(new \DateTimeImmutable); + \Phake::when($daemon)->checkPIDFilePath->thenThrow(new Service\Exception("pidDuplicate", ['pid' => 2112])); + \Phake::when($daemon)->fork->thenReturn(null); + \Phake::when(Arsse::$obj)->get(Service::class)->thenReturn($srv); + \Phake::when(Arsse::$obj)->get(Daemon::class)->thenReturn($daemon); $this->assertConsole("arsse.php daemon --fork=arsse.pid", 10809); \Phake::verify($daemon)->checkPIDFilePath("arsse.pid"); \Phake::verify($daemon, \Phake::never())->fork($this->anything()); @@ -126,7 +126,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { \Phake::when(Arsse::$db)->feedUpdate(2, true)->thenThrow(new \JKingWeb\Arsse\Feed\Exception("", ['url' => "http://example.com/"], $this->mockGuzzleException(ClientException::class, "", 404))); $this->assertConsole($cmd, $exitStatus, $output); \Phake::verify($this->cli)->loadConf(); - \Phake::verify($this->dbMock)->feedUpdate(); + \Phake::verify(Arsse::$db)->feedUpdate(\Phake::anyParameters()); } public function provideFeedUpdates(): iterable { @@ -144,7 +144,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { \Phake::when($conf)->exportFile("bad.conf", true)->thenThrow(new \JKingWeb\Arsse\Conf\Exception("fileUnwritable")); \Phake::when(Arsse::$obj)->get(Conf::class)->thenReturn($conf); $this->assertConsole($cmd, $exitStatus); - \Phake::verify($this->cli)->loadConf(); + \Phake::verify($this->cli, \Phake::never())->loadConf(); \Phake::verify($conf)->exportFile($file, true); } @@ -262,7 +262,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { \Phake::when(Arsse::$user)->passwordSet->thenReturnCallback($passwordChange); $fever = \Phake::mock(FeverUser::class); \Phake::when($fever)->register->thenReturnCallback($passwordChange); - \Phake::when(Arsse::$obj)->get(FeverUser::class)->returns($fever); + \Phake::when(Arsse::$obj)->get(FeverUser::class)->thenReturn($fever); $this->assertConsole($cmd, $exitStatus, $output); } @@ -308,9 +308,9 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { public function testExportToOpml(string $cmd, int $exitStatus, string $file, string $user, bool $flat): void { $opml = \Phake::mock(OPML::class); \Phake::when($opml)->exportFile("php://output", $user, $flat)->thenReturn(true); - \Phake::when($opml)->exportFile("good.opml", $user, $flat)->thenRreturn(true); + \Phake::when($opml)->exportFile("good.opml", $user, $flat)->thenReturn(true); \Phake::when($opml)->exportFile("bad.opml", $user, $flat)->thenThrow(new \JKingWeb\Arsse\ImportExport\Exception("fileUnwritable")); - \Phake::when(Arsse::$obj)->get(OPML::class)->returns($opml); + \Phake::when(Arsse::$obj)->get(OPML::class)->thenReturn($opml); $this->assertConsole($cmd, $exitStatus); \Phake::verify($this->cli)->loadConf(); \Phake::verify($opml)->exportFile($file, $user, $flat); diff --git a/tests/cases/Database/SeriesSubscription.php b/tests/cases/Database/SeriesSubscription.php index e17da0e2..bea859ee 100644 --- a/tests/cases/Database/SeriesSubscription.php +++ b/tests/cases/Database/SeriesSubscription.php @@ -212,7 +212,7 @@ trait SeriesSubscription { $url = "http://example.com/feed1"; $subID = $this->nextID("arsse_subscriptions"); Arsse::$db = \Phake::partialMock(Database::class, static::$drv); - \Phake::when($db)->feedUpdate->thenReturn(true); + \Phake::when(Arsse::$db)->feedUpdate->thenReturn(true); $this->assertSame($subID, Arsse::$db->subscriptionAdd($this->user, $url)); \Phake::verify(Arsse::$db, \Phake::never())->feedUpdate(\Phake::anyParameters()); $state = $this->primeExpectations($this->data, [ @@ -234,7 +234,7 @@ trait SeriesSubscription { Arsse::$db = \Phake::partialMock(Database::class, static::$drv); \Phake::when(Arsse::$db)->feedUpdate->thenReturn(true); $this->assertSame($subID, Arsse::$db->subscriptionAdd($this->user, $url, "", "", false)); - \Phake::verify($db)->feedUpdate($feedID, true, false); + \Phake::verify(Arsse::$db)->feedUpdate($feedID, true, false); $state = $this->primeExpectations($this->data, [ 'arsse_feeds' => ['id','url','username','password'], 'arsse_subscriptions' => ['id','owner','feed'], diff --git a/tests/cases/Db/TestTransaction.php b/tests/cases/Db/TestTransaction.php index 80eee111..40dfea52 100644 --- a/tests/cases/Db/TestTransaction.php +++ b/tests/cases/Db/TestTransaction.php @@ -20,7 +20,7 @@ class TestTransaction extends \JKingWeb\Arsse\Test\AbstractTest { $drv = \Phake::mock(\JKingWeb\Arsse\Db\SQLite3\Driver::class); \Phake::when($drv)->savepointRelease->thenReturn(true); \Phake::when($drv)->savepointUndo->thenReturn(true); - \Phake::when($drv)->savepointCreate->thenReturn(1, 2); + \Phake::when($drv)->savepointCreate->thenReturn(1)->thenReturn(2); $this->drv = $drv; } diff --git a/tests/cases/REST/Fever/TestAPI.php b/tests/cases/REST/Fever/TestAPI.php index 12423246..4cea91cf 100644 --- a/tests/cases/REST/Fever/TestAPI.php +++ b/tests/cases/REST/Fever/TestAPI.php @@ -465,7 +465,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest { } public function testOutputToXml(): void { - $this->hMock->processRequest->thenReturn([ + \Phake::when($this->hMock)->processRequest->thenReturn([ 'items' => $this->articles['rest'], 'total_items' => 1024, ]); diff --git a/tests/cases/REST/Miniflux/TestV1.php b/tests/cases/REST/Miniflux/TestV1.php index 6969a278..da84a2f4 100644 --- a/tests/cases/REST/Miniflux/TestV1.php +++ b/tests/cases/REST/Miniflux/TestV1.php @@ -16,6 +16,7 @@ use JKingWeb\Arsse\Database; use JKingWeb\Arsse\Misc\HTTP; use JKingWeb\Arsse\Db\Transaction; use JKingWeb\Arsse\Db\ExceptionInput; +use JKingWeb\Arsse\Factory; use JKingWeb\Arsse\REST\Miniflux\V1; use JKingWeb\Arsse\Feed\Exception as FeedException; use JKingWeb\Arsse\ImportExport\Exception as ImportException; @@ -75,6 +76,7 @@ class TestV1 extends \JKingWeb\Arsse\Test\AbstractTest { self::setConf(); $this->transaction = \Phake::mock(Transaction::class); // create mock timestamps + Arsse::$obj = \Phake::mock(Factory::class); \Phake::when(Arsse::$obj)->get(\DateTimeImmutable::class)->thenReturn(new \DateTimeImmutable(self::NOW)); // create a mock database interface Arsse::$db = \Phake::mock(Database::class); @@ -237,7 +239,7 @@ class TestV1 extends \JKingWeb\Arsse\Test\AbstractTest { /** @dataProvider provideUserModifications */ public function testModifyAUser(bool $admin, string $url, array $body, $in1, $out1, $in2, $out2, $in3, $out3, ResponseInterface $exp): void { Arsse::$user = \Phake::mock(User::class); - \Phake::when(Arsse::$user)->begin->thenReturn($this->transaction->get()); + \Phake::when(Arsse::$user)->begin->thenReturn($this->transaction); \Phake::when(Arsse::$user)->propertiesGet->thenReturn(['num' => 1, 'admin' => true]); \Phake::when(Arsse::$user)->propertiesGet("john.doe@example.com", $this->anything())->thenReturn(['num' => 2, 'admin' => $admin]); \Phake::when(Arsse::$user)->propertiesGet("ook", $this->anything())->thenReturn(['num' => 2, 'admin' => $admin]); @@ -306,7 +308,7 @@ class TestV1 extends \JKingWeb\Arsse\Test\AbstractTest { /** @dataProvider provideUserAdditions */ public function testAddAUser(array $body, $in1, $out1, $in2, $out2, ResponseInterface $exp): void { Arsse::$user = \Phake::mock(User::class); - \Phake::when(Arsse::$user)->begin->thenReturn($this->transaction->get()); + \Phake::when(Arsse::$user)->begin->thenReturn($this->transaction); \Phake::when(Arsse::$user)->propertiesGet->thenReturn(['num' => 2, 'admin' => false]); \Phake::when(Arsse::$user)->propertiesGet("john.doe@example.com", $this->anything())->thenReturn(['num' => 1, 'admin' => true]); if ($out1 instanceof \Exception) { @@ -929,7 +931,7 @@ class TestV1 extends \JKingWeb\Arsse\Test\AbstractTest { public function testImport($out, ResponseInterface $exp): void { $opml = \Phake::mock(OPML::class); \Phake::when(Arsse::$obj)->get(OPML::class)->thenReturn($opml); - $action = ($out instanceof \Exception) ? "thenThrow" : "thenRreturn"; + $action = ($out instanceof \Exception) ? "thenThrow" : "thenReturn"; \Phake::when($opml)->import->$action($out); $this->assertMessage($exp, $this->req("POST", "/import", "IMPORT DATA")); \Phake::verify($opml)->import(Arsse::$user->id, "IMPORT DATA"); diff --git a/tests/cases/REST/NextcloudNews/TestV1_2.php b/tests/cases/REST/NextcloudNews/TestV1_2.php index 9eef3c5a..5cb4b05a 100644 --- a/tests/cases/REST/NextcloudNews/TestV1_2.php +++ b/tests/cases/REST/NextcloudNews/TestV1_2.php @@ -491,9 +491,9 @@ class TestV1_2 extends \JKingWeb\Arsse\Test\AbstractTest { 'starredCount' => 5, 'newestItemId' => 4758915, ]; - \Phake::when(Arsse::$db)->subscriptionList($this->userId)->theneturn(new Result([]))->thenReturn(new Result($this->v($this->feeds['db']))); + \Phake::when(Arsse::$db)->subscriptionList($this->userId)->thenReturn(new Result([]))->thenReturn(new Result($this->v($this->feeds['db']))); \Phake::when(Arsse::$db)->articleStarred($this->userId)->thenReturn($this->v(['total' => 0]))->thenReturn($this->v(['total' => 5])); - \Phake::when(Arsse::$db)->editionLatest($this->userId)->thenReturns(0)->thenReturn(4758915); + \Phake::when(Arsse::$db)->editionLatest($this->userId)->thenReturn(0)->thenReturn(4758915); $exp = HTTP::respJson($exp1); $this->assertMessage($exp, $this->req("GET", "/feeds")); $exp = HTTP::respJson($exp2); @@ -777,7 +777,7 @@ class TestV1_2 extends \JKingWeb\Arsse\Test\AbstractTest { $this->assertMessage($exp, $this->req("PUT", "/items/47/unread")); $this->assertMessage($exp, $this->req("PUT", "/items/1/2112/star")); $this->assertMessage($exp, $this->req("PUT", "/items/4400/1337/unstar")); - \Phake::verify(Arsse::$db, \Phake::times(8))->articleMark($this->userId, \Phake::anyParameters()); + \Phake::verify(Arsse::$db, \Phake::times(8))->articleMark($this->userId, \Phake::ignoreRemaining()); } public function testChangeMarksOfMultipleArticles(): void { diff --git a/tests/cases/REST/TestREST.php b/tests/cases/REST/TestREST.php index cc45a4dc..625f9118 100644 --- a/tests/cases/REST/TestREST.php +++ b/tests/cases/REST/TestREST.php @@ -19,6 +19,7 @@ use Psr\Http\Message\ResponseInterface; use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\ServerRequest; +use JKingWeb\Arsse\Factory; /** @covers \JKingWeb\Arsse\REST */ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest { @@ -294,8 +295,9 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest { return $req; }); if ($called) { + Arsse::$obj = \Phake::mock(Factory::class); $hMock = \Phake::mock($class); - $hMock->dispatch->thenReturn(HTTP::respEmpty(204)); + \Phake::when($hMock)->dispatch->thenReturn(HTTP::respEmpty(204)); \Phake::when(Arsse::$obj)->get($class)->thenReturn($hMock); } $out = $rMock->dispatch($req); diff --git a/tests/cases/REST/TinyTinyRSS/TestAPI.php b/tests/cases/REST/TinyTinyRSS/TestAPI.php index 19f38c7b..a95899fb 100644 --- a/tests/cases/REST/TinyTinyRSS/TestAPI.php +++ b/tests/cases/REST/TinyTinyRSS/TestAPI.php @@ -16,6 +16,7 @@ use JKingWeb\Arsse\Misc\HTTP; use JKingWeb\Arsse\Context\Context; use JKingWeb\Arsse\Db\ExceptionInput; use JKingWeb\Arsse\Db\Transaction; +use JKingWeb\Arsse\Factory; use JKingWeb\Arsse\REST\TinyTinyRSS\API; use JKingWeb\Arsse\Feed\Exception as FeedException; use Psr\Http\Message\ResponseInterface; @@ -129,9 +130,10 @@ LONG_STRING; } public function setUp(): void { - parent::setUp(); + self::clearData(); self::setConf(); // create mock timestamps + Arsse::$obj = \Phake::mock(Factory::class); \Phake::when(Arsse::$obj)->get(\DateTimeImmutable::class)->thenReturn(new \DateTimeImmutable(self::NOW)); // create a mock user manager $this->userId = "john.doe@example.com"; @@ -210,8 +212,8 @@ LONG_STRING; \Phake::when(Arsse::$user)->auth->thenReturn(false); \Phake::when(Arsse::$user)->auth("john.doe@example.com", "secret")->thenReturn(true); \Phake::when(Arsse::$user)->auth("jane.doe@example.com", "superman")->thenReturn(true); - \Phake::when(Arsse::$db)->sessionCreate("john.doe@example.com")->thenReturn("PriestsOfSyrinx", "SolarFederation"); - \Phake::when(Arsse::$db)->sessionCreate("jane.doe@example.com")->thenReturn("ClockworkAngels", "SevenCitiesOfGold"); + \Phake::when(Arsse::$db)->sessionCreate("john.doe@example.com")->thenReturn("PriestsOfSyrinx")->thenReturn("SolarFederation"); + \Phake::when(Arsse::$db)->sessionCreate("jane.doe@example.com")->thenReturn("ClockworkAngels")->thenReturn("SevenCitiesOfGold"); if ($sessions instanceof ResponseInterface) { $exp1 = $sessions; $exp2 = $sessions; @@ -709,7 +711,7 @@ LONG_STRING; \Phake::when(Arsse::$db)->folderPropertiesGet($this->userId, 42)->thenReturn($this->v(['id' => 42])); \Phake::when(Arsse::$db)->folderPropertiesGet($this->userId, 47)->thenReturn($this->v(['id' => 47])); \Phake::when(Arsse::$db)->folderPropertiesGet($this->userId, 2112)->thenThrow(new ExceptionInput("subjectMissing")); - \Phake::when(Arsse::$db)->subscriptionPropertiesSet($this->userId, "*")->thenReturn(true); + \Phake::when(Arsse::$db)->subscriptionPropertiesSet($this->userId, $this->anything())->thenReturn(true); \Phake::when(Arsse::$db)->subscriptionPropertiesSet($this->userId, 4, $this->anything())->thenThrow(new ExceptionInput("idMissing")); \Phake::when(Arsse::$db)->subscriptionList($this->userId)->thenReturn(new Result($this->v($list))); $this->assertMessage($exp, $this->req($in)); @@ -832,8 +834,8 @@ LONG_STRING; $interval = Arsse::$conf->serviceFrequency; $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"), Date::transform($invalid, "sql")); - \Phake::when(Arsse::$db)->subscriptionCount($this->userId)->thenReturn(12, 2); + \Phake::when(Arsse::$db)->metaGet("service_last_checkin")->thenReturn(Date::transform($valid, "sql"))->thenReturn(Date::transform($invalid, "sql")); + \Phake::when(Arsse::$db)->subscriptionCount($this->userId)->thenReturn(12)->thenReturn(2); $this->assertMessage($this->respGood(['icons_dir' => "feed-icons", 'icons_url' => "feed-icons", 'daemon_is_running' => true, 'num_feeds' => 12]), $this->req($in)); $this->assertMessage($this->respGood(['icons_dir' => "feed-icons", 'icons_url' => "feed-icons", 'daemon_is_running' => false, 'num_feeds' => 2]), $this->req($in)); } diff --git a/tests/cases/Service/TestDaemon.php b/tests/cases/Service/TestDaemon.php index 3cd4f510..afc0374f 100644 --- a/tests/cases/Service/TestDaemon.php +++ b/tests/cases/Service/TestDaemon.php @@ -51,7 +51,7 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest { public function testResolveRelativePaths(string $path, $cwd, $exp): void { // set up mock daemon class \Phake::when($this->daemon)->cwd->thenReturn($cwd); - $daemon = $this->daemon->get(); + $daemon = $this->daemon; // perform the test $this->AssertSame($exp, $daemon->resolveRelativePath($path)); } @@ -84,7 +84,7 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest { chmod($path."errors/readwrite", 0111); // set up mock daemon class \Phake::when($this->daemon)->resolveRelativePath->thenReturn($accessible ? dirname($path.$file) : false); - $daemon = $this->daemon->get(); + $daemon = $this->daemon; // perform the test if ($exp instanceof \Exception) { $this->assertException($exp); @@ -121,7 +121,7 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest { // set up mock daemon class \Phake::when($this->daemon)->processExists(2112)->thenReturn(true); \Phake::when($this->daemon)->processExists(42)->thenReturn(false); - $daemon = $this->daemon->get(); + $daemon = $this->daemon; // perform the test try { if ($exp instanceof \Exception) { @@ -171,7 +171,7 @@ class TestDaemon extends \JKingWeb\Arsse\Test\AbstractTest { // set up mock daemon class \Phake::when($this->daemon)->processExists(2112)->thenReturn(true); \Phake::when($this->daemon)->processExists(42)->thenReturn(false); - $daemon = $this->daemon->get(); + $daemon = $this->daemon; // perform the test try { if ($exp instanceof \Exception) { diff --git a/tests/cases/Service/TestService.php b/tests/cases/Service/TestService.php index 77f13dd3..0fb919af 100644 --- a/tests/cases/Service/TestService.php +++ b/tests/cases/Service/TestService.php @@ -36,7 +36,7 @@ class TestService extends \JKingWeb\Arsse\Test\AbstractTest { $interval = Arsse::$conf->serviceFrequency; $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"), Date::transform($invalid, "sql")); + \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()); } diff --git a/tests/cases/User/TestInternal.php b/tests/cases/User/TestInternal.php index 6486081c..ce19849c 100644 --- a/tests/cases/User/TestInternal.php +++ b/tests/cases/User/TestInternal.php @@ -17,7 +17,7 @@ class TestInternal extends \JKingWeb\Arsse\Test\AbstractTest { protected $d; public function setUp(): void { - parent::setUp(); + self::clearData(); self::setConf(); // create a mock database interface Arsse::$db = \Phake::mock(Database::class);