diff --git a/lib/Database.php b/lib/Database.php index 88d8679..48ea6b8 100644 --- a/lib/Database.php +++ b/lib/Database.php @@ -17,10 +17,10 @@ class Database { const SCHEMA_VERSION = 2; const LIMIT_ARTICLES = 50; // articleList verbosity levels - const AL_MINIMAL = 0; // only that metadata which is required for context matching - const AL_CONSERVATIVE = 1; // base metadata plus anything that is not potentially large text - const AL_TYPICAL = 2; // conservative, with the addition of content - const AL_FULL = 3; // all possible fields + const LIST_MINIMAL = 0; // only that metadata which is required for context matching + const LIST_CONSERVATIVE = 1; // base metadata plus anything that is not potentially large text + const LIST_TYPICAL = 2; // conservative, with the addition of content + const LIST_FULL = 3; // all possible fields /** @var Db\Driver */ public $db; @@ -972,7 +972,7 @@ class Database { } } - public function articleList(string $user, Context $context = null, int $fields = self::AL_FULL): Db\Result { + public function articleList(string $user, Context $context = null, int $fields = self::LIST_FULL): Db\Result { if (!Arsse::$user->authorize($user, __FUNCTION__)) { throw new User\ExceptionAuthz("notAuthorized", ["action" => __FUNCTION__, "user" => $user]); } @@ -990,17 +990,17 @@ class Database { $columns = []; switch ($fields) { // NOTE: the cases all cascade into each other: a given verbosity level is always a superset of the previous one - case self::AL_FULL: // everything + case self::LIST_FULL: // everything $columns = array_merge($columns,[ "(select note from arsse_marks where article is arsse_articles.id and subscription in (select sub from subscribed_feeds)) as note", ]); - case self::AL_TYPICAL: // conservative, plus content + case self::LIST_TYPICAL: // conservative, plus content $columns = array_merge($columns,[ "content", "arsse_enclosures.url as media_url", // enclosures are potentially large due to data: URLs "arsse_enclosures.type as media_type", // FIXME: enclosures should eventually have their own fetch method ]); - case self::AL_CONSERVATIVE: // base metadata, plus anything that is not likely to be large text + case self::LIST_CONSERVATIVE: // base metadata, plus anything that is not likely to be large text $columns = array_merge($columns,[ "arsse_articles.url as url", "arsse_articles.title as title", @@ -1011,7 +1011,7 @@ class Database { "edited as edited_date", "url_title_hash||':'||url_content_hash||':'||title_content_hash as fingerprint", ]); - case self::AL_MINIMAL: // base metadata (always included: required for context matching) + case self::LIST_MINIMAL: // base metadata (always included: required for context matching) // id, subscription, feed, modified_date, marked_date, unread, starred, edition break; default: diff --git a/lib/REST/NextCloudNews/V1_2.php b/lib/REST/NextCloudNews/V1_2.php index 1261fb5..0f02a34 100644 --- a/lib/REST/NextCloudNews/V1_2.php +++ b/lib/REST/NextCloudNews/V1_2.php @@ -7,6 +7,7 @@ declare(strict_types=1); namespace JKingWeb\Arsse\REST\NextCloudNews; use JKingWeb\Arsse\Arsse; +use JKingWeb\Arsse\Database; use JKingWeb\Arsse\User; use JKingWeb\Arsse\Service; use JKingWeb\Arsse\Misc\Context; @@ -510,7 +511,7 @@ class V1_2 extends \JKingWeb\Arsse\REST\AbstractHandler { } // perform the fetch try { - $items = Arsse::$db->articleList(Arsse::$user->id, $c); + $items = Arsse::$db->articleList(Arsse::$user->id, $c, Database::LIST_TYPICAL); } catch (ExceptionInput $e) { // ID of subscription or folder is not valid return new Response(422); diff --git a/tests/REST/NextCloudNews/TestNCNV1_2.php b/tests/REST/NextCloudNews/TestNCNV1_2.php index df126ab..c9a55f7 100644 --- a/tests/REST/NextCloudNews/TestNCNV1_2.php +++ b/tests/REST/NextCloudNews/TestNCNV1_2.php @@ -666,11 +666,11 @@ class TestNCNV1_2 extends Test\AbstractTest { ['lastModified' => $t->getTimestamp()], ['oldestFirst' => false, 'batchSize' => 5, 'offset' => 0], // offset=0 should not set the latestEdition context ]; - Phake::when(Arsse::$db)->articleList(Arsse::$user->id, $this->anything())->thenReturn($res); - Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(42))->thenThrow(new ExceptionInput("idMissing")); - Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(2112))->thenThrow(new ExceptionInput("idMissing")); - Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(-1))->thenThrow(new ExceptionInput("typeViolation")); - Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(-1))->thenThrow(new ExceptionInput("typeViolation")); + Phake::when(Arsse::$db)->articleList(Arsse::$user->id, $this->anything(), Database::LIST_TYPICAL)->thenReturn($res); + Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(42), Database::LIST_TYPICAL)->thenThrow(new ExceptionInput("idMissing")); + Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(2112), Database::LIST_TYPICAL)->thenThrow(new ExceptionInput("idMissing")); + Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(-1), Database::LIST_TYPICAL)->thenThrow(new ExceptionInput("typeViolation")); + Phake::when(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(-1), Database::LIST_TYPICAL)->thenThrow(new ExceptionInput("typeViolation")); $exp = new Response(200, ['items' => $this->articles['rest']]); // check the contents of the response $this->assertEquals($exp, $this->h->dispatch(new Request("GET", "/items"))); // first instance of base context @@ -691,17 +691,17 @@ class TestNCNV1_2 extends Test\AbstractTest { $this->h->dispatch(new Request("GET", "/items", json_encode($in[10]), 'application/json')); $this->h->dispatch(new Request("GET", "/items", json_encode($in[11]), 'application/json')); // perform method verifications - Phake::verify(Arsse::$db, Phake::times(4))->articleList(Arsse::$user->id, (new Context)->reverse(true)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(42)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(2112)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(-1)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(-1)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->starred(true)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(false)->limit(10)->oldestEdition(6)); // offset is one more than specified - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->limit(5)->latestEdition(4)); // offset is one less than specified - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->unread(true)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->markedSince($t)); - Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->limit(5)); + Phake::verify(Arsse::$db, Phake::times(4))->articleList(Arsse::$user->id, (new Context)->reverse(true), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(42), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(2112), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->subscription(-1), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->folder(-1), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->starred(true), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(false)->limit(10)->oldestEdition(6), Database::LIST_TYPICAL); // offset is one more than specified + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->limit(5)->latestEdition(4), Database::LIST_TYPICAL); // offset is one less than specified + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->unread(true), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->markedSince($t), Database::LIST_TYPICAL); + Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, (new Context)->reverse(true)->limit(5), Database::LIST_TYPICAL); } public function testMarkAFolderRead() { diff --git a/tests/lib/Database/SeriesArticle.php b/tests/lib/Database/SeriesArticle.php index 7b3d6bd..ec24d72 100644 --- a/tests/lib/Database/SeriesArticle.php +++ b/tests/lib/Database/SeriesArticle.php @@ -350,19 +350,19 @@ trait SeriesArticle { ], ]; protected $fields = [ - Database::AL_MINIMAL => [ + Database::LIST_MINIMAL => [ "id", "subscription", "feed", "modified_date", "marked_date", "unread", "starred", "edition", ], - Database::AL_CONSERVATIVE => [ + Database::LIST_CONSERVATIVE => [ "id", "subscription", "feed", "modified_date", "marked_date", "unread", "starred", "edition", "url", "title", "subscription_title", "author", "guid", "published_date", "edited_date", "fingerprint", ], - Database::AL_TYPICAL => [ + Database::LIST_TYPICAL => [ "id", "subscription", "feed", "modified_date", "marked_date", "unread", "starred", "edition", "url", "title", "subscription_title", "author", "guid", "published_date", "edited_date", "fingerprint", "content", "media_url", "media_type", ], - Database::AL_FULL => [ + Database::LIST_FULL => [ "id", "subscription", "feed", "modified_date", "marked_date", "unread", "starred", "edition", "url", "title", "subscription_title", "author", "guid", "published_date", "edited_date", "fingerprint", "content", "media_url", "media_type",