From ef3cb4fa54fba8381d6e4e300f323ec2ff9eaec9 Mon Sep 17 00:00:00 2001 From: "J. King" Date: Tue, 16 May 2017 22:19:40 -0400 Subject: [PATCH] Test unread counts in subscriptionList --- lib/Database.php | 4 +-- sql/SQLite3/0.sql | 10 +++--- tests/lib/Database/SeriesSubscription.php | 43 +++++++++++++++++++++++ tests/lib/Database/Setup.php | 1 - 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/lib/Database.php b/lib/Database.php index 2a82394..93dc5e9 100644 --- a/lib/Database.php +++ b/lib/Database.php @@ -409,7 +409,7 @@ class Database { arsse_subscriptions.id, url,favicon,source,folder,added,pinned,err_count,err_msg,order_type, CASE WHEN arsse_subscriptions.title is not null THEN arsse_subscriptions.title ELSE arsse_feeds.title END as title, - (SELECT count(*) from arsse_articles where feed is arsse_subscriptions.feed) - (SELECT count(*) from (SELECT article,feed from arsse_subscription_articles join arsse_articles on article = arsse_articles.id where owner is ? and feed is arsse_feeds.id and read is 1)) as unread + (SELECT count(*) from arsse_articles where feed is arsse_subscriptions.feed) - (SELECT count(*) from (SELECT article,feed from arsse_marks join arsse_articles on article = arsse_articles.id where owner is ? and feed is arsse_feeds.id and read is 1)) as unread from arsse_subscriptions join arsse_feeds on feed = arsse_feeds.id where owner is ?"; if(!is_null($folder)) { if(!$this->db->prepare("SELECT count(*) from arsse_folders where owner is ? and id is ?", "str", "int")->run($user, $folder)->getValue()) { @@ -502,7 +502,7 @@ class Database { } if(sizeof($feed->changedItems)) { $qDeleteCategories = $this->db->prepare('DELETE FROM arsse_categories WHERE article is ?', 'int'); - $qClearReadMarks = $this->db->prepare('UPDATE arsse_subscription_articles SET read = 0, modified = CURRENT_TIMESTAMP WHERE article is ?', 'int'); + $qClearReadMarks = $this->db->prepare('UPDATE arsse_marks SET read = 0, modified = CURRENT_TIMESTAMP WHERE article is ?', 'int'); $qUpdateArticle = $this->db->prepare( 'UPDATE arsse_articles SET url = ?, title = ?, author = ?, published = ?, edited = ?, modified = CURRENT_TIMESTAMP, guid = ?, content = ?, url_title_hash = ?, url_content_hash = ?, title_content_hash = ? WHERE id is ?', 'str', 'str', 'str', 'datetime', 'datetime', 'str', 'str', 'str', 'str', 'str', 'int' diff --git a/sql/SQLite3/0.sql b/sql/SQLite3/0.sql index f139f6e..43f3687 100644 --- a/sql/SQLite3/0.sql +++ b/sql/SQLite3/0.sql @@ -64,7 +64,7 @@ create table arsse_folders( create table arsse_articles( id integer primary key, -- sequence number feed integer not null references arsse_feeds(id) on delete cascade, -- feed for the subscription - url TEXT not null, -- URL of article + url TEXT, -- URL of article title TEXT, -- article title author TEXT, -- author's name published datetime, -- time of original publication @@ -72,9 +72,9 @@ create table arsse_articles( modified datetime not null default CURRENT_TIMESTAMP, -- date when article properties were last modified guid TEXT, -- GUID content TEXT, -- content, as (X)HTML - url_title_hash varchar(64), -- hash of URL + title; used when checking for updates and for identification if there is no guid. - url_content_hash varchar(64), -- hash of URL + content, enclosure URL, & content type; used when checking for updates and for identification if there is no guid. - title_content_hash varchar(64) -- hash of title + content, enclosure URL, & content type; used when checking for updates and for identification if there is no guid. + url_title_hash TEXT not null, -- hash of URL + title; used when checking for updates and for identification if there is no guid. + url_content_hash TEXT not null, -- hash of URL + content, enclosure URL, & content type; used when checking for updates and for identification if there is no guid. + title_content_hash TEXT not null -- hash of title + content, enclosure URL, & content type; used when checking for updates and for identification if there is no guid. ); -- enclosures associated with articles @@ -85,7 +85,7 @@ create table arsse_enclosures( ); -- users' actions on newsfeed entries -create table arsse_subscription_articles( +create table arsse_marks( id integer primary key, article integer not null references arsse_articles(id) on delete cascade, owner TEXT not null references arsse_users(id) on delete cascade on update cascade, diff --git a/tests/lib/Database/SeriesSubscription.php b/tests/lib/Database/SeriesSubscription.php index 3b1d855..d5ca245 100644 --- a/tests/lib/Database/SeriesSubscription.php +++ b/tests/lib/Database/SeriesSubscription.php @@ -38,6 +38,47 @@ trait SeriesSubscription { [3,"john.doe@example.com",3,"Ook",2], ] ], + 'arsse_articles' => [ + 'columns' => [ + 'id' => "int", + 'feed' => "int", + 'url_title_hash' => "str", + 'url_content_hash' => "str", + 'title_content_hash' => "str", + ], + 'rows' => [ + [1,2,"","",""], + [2,2,"","",""], + [3,2,"","",""], + [4,2,"","",""], + [5,2,"","",""], + [6,3,"","",""], + [7,3,"","",""], + [8,3,"","",""], + ] + ], + 'arsse_marks' => [ + 'columns' => [ + 'id' => "int", + 'article' => "int", + 'owner' => "str", + 'read' => "bool", + 'starred' => "bool", + ], + 'rows' => [ + [1,1,"jane.doe@example.com",true,false], + [2,2,"jane.doe@example.com",true,false], + [3,3,"jane.doe@example.com",true,false], + [4,4,"jane.doe@example.com",true,false], + [5,5,"jane.doe@example.com",true,false], + [6,6,"jane.doe@example.com",true,false], + [7,7,"jane.doe@example.com",true,false], + [8,8,"jane.doe@example.com",true,false], + [9, 1,"john.doe@example.com",true,false], + [10,7,"john.doe@example.com",true,false], + [11,8,"john.doe@example.com",true,false], + ] + ], ]; // merge tables $this->data = array_merge($this->data, $data); @@ -152,11 +193,13 @@ trait SeriesSubscription { 'url' => "http://example.com/feed2", 'title' => "Eek", 'folder' => null, + 'unread' => 4, ], [ 'url' => "http://example.com/feed3", 'title' => "Ook", 'folder' => 2, + 'unread' => 1, ], ]; $this->assertResult($exp, Data::$db->subscriptionList($user)); diff --git a/tests/lib/Database/Setup.php b/tests/lib/Database/Setup.php index 881ea59..a5d8bcb 100644 --- a/tests/lib/Database/Setup.php +++ b/tests/lib/Database/Setup.php @@ -154,7 +154,6 @@ trait Setup { foreach($x as $field => $value) { $valid = true; if(!array_key_exists($field, $r) || $r[$field] !== $value) { - echo "$field\n"; $valid = false; break; }