mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2025-01-03 14:32:40 +00:00
Correct most remaining test bugs
This commit is contained in:
parent
f1d3055f4c
commit
93c322bdfa
12 changed files with 42 additions and 34 deletions
|
@ -24,4 +24,6 @@ if (function_exists("xdebug_set_filter")) {
|
|||
}
|
||||
}
|
||||
|
||||
\Phake::setClient(\Phake::CLIENT_PHPUNIT9);
|
||||
if (class_exists(\Phake::class)) {
|
||||
\Phake::setClient(\Phake::CLIENT_PHPUNIT9);
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
]);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue