J. King
7 years ago
13 changed files with 273 additions and 58 deletions
@ -0,0 +1,10 @@ |
|||
<?php |
|||
declare(strict_types=1); |
|||
namespace JKingWeb\Arsse; |
|||
|
|||
/** @covers \JKingWeb\Arsse\Database<extended> */ |
|||
class TestDatabaseCleanupSQLite3 extends Test\AbstractTest { |
|||
use Test\Database\Setup; |
|||
use Test\Database\DriverSQLite3; |
|||
use Test\Database\SeriesCleanup; |
|||
} |
@ -0,0 +1,168 @@ |
|||
<?php |
|||
declare(strict_types=1); |
|||
namespace JKingWeb\Arsse\Test\Database; |
|||
use JKingWeb\Arsse\Arsse; |
|||
use Phake; |
|||
|
|||
trait SeriesCleanup { |
|||
|
|||
function setUpSeries() { |
|||
// set up the test data |
|||
$nowish = gmdate("Y-m-d H:i:s",strtotime("now - 1 minute")); |
|||
$yesterday = gmdate("Y-m-d H:i:s",strtotime("now - 1 day")); |
|||
$daybefore = gmdate("Y-m-d H:i:s",strtotime("now - 2 days")); |
|||
$daysago = gmdate("Y-m-d H:i:s",strtotime("now - 7 days")); |
|||
$weeksago = gmdate("Y-m-d H:i:s",strtotime("now - 21 days")); |
|||
$this->data = [ |
|||
'arsse_users' => [ |
|||
'columns' => [ |
|||
'id' => 'str', |
|||
'password' => 'str', |
|||
'name' => 'str', |
|||
], |
|||
'rows' => [ |
|||
["jane.doe@example.com", "", "Jane Doe"], |
|||
["john.doe@example.com", "", "John Doe"], |
|||
], |
|||
], |
|||
'arsse_feeds' => [ |
|||
'columns' => [ |
|||
'id' => "int", |
|||
'url' => "str", |
|||
'title' => "str", |
|||
'orphaned' => "datetime", |
|||
'size' => "int", |
|||
], |
|||
'rows' => [ |
|||
[1,"http://example.com/1","",$daybefore,2], //latest two articles should be kept |
|||
[2,"http://example.com/2","",$yesterday,0], |
|||
[3,"http://example.com/3","",null,0], |
|||
[4,"http://example.com/4","",$nowish,0], |
|||
] |
|||
], |
|||
'arsse_subscriptions' => [ |
|||
'columns' => [ |
|||
'id' => "int", |
|||
'owner' => "str", |
|||
'feed' => "int", |
|||
], |
|||
'rows' => [ |
|||
// one feed previously marked for deletion has a subscription again, and so should not be deleted |
|||
[1,'jane.doe@example.com',1], |
|||
// other subscriptions exist for article cleanup tests |
|||
[2,'john.doe@example.com',1], |
|||
] |
|||
], |
|||
'arsse_articles' => [ |
|||
'columns' => [ |
|||
'id' => "int", |
|||
'feed' => "int", |
|||
'url_title_hash' => "str", |
|||
'url_content_hash' => "str", |
|||
'title_content_hash' => "str", |
|||
'modified' => "datetime", |
|||
], |
|||
'rows' => [ |
|||
[1,1,"","","",$weeksago], // is the latest article, thus is kept |
|||
[2,1,"","","",$weeksago], // is the second latest article, thus is kept |
|||
[3,1,"","","",$weeksago], // is starred by one user, thus is kept |
|||
[4,1,"","","",$weeksago], // does not meet the unread threshold due to a recent mark, thus is kept |
|||
[5,1,"","","",$daysago], // does not meet the unread threshold due to age, thus is kept |
|||
[6,1,"","","",$weeksago], // does not meet the read threshold due to a recent mark, thus is kept |
|||
[7,1,"","","",$weeksago], // meets the unread threshold without marks, thus is deleted |
|||
[8,1,"","","",$weeksago], // meets the unread threshold even with marks, thus is deleted |
|||
[9,1,"","","",$weeksago], // meets the read threshold, thus is deleted |
|||
] |
|||
], |
|||
'arsse_editions' => [ |
|||
'columns' => [ |
|||
'id' => "int", |
|||
'article' => "int", |
|||
], |
|||
'rows' => [ |
|||
[1,1], |
|||
[2,2], |
|||
[3,3], |
|||
[4,4], |
|||
[201,1], |
|||
[102,2], |
|||
] |
|||
], |
|||
'arsse_marks' => [ |
|||
'columns' => [ |
|||
'article' => "int", |
|||
'subscription' => "int", |
|||
'read' => "bool", |
|||
'starred' => "bool", |
|||
'modified' => "datetime", |
|||
], |
|||
'rows' => [ |
|||
[3,1,0,1,$weeksago], |
|||
[4,1,1,0,$daysago], |
|||
[6,1,1,0,$nowish], |
|||
[6,2,1,0,$weeksago], |
|||
[8,1,1,0,$weeksago], |
|||
[9,1,1,0,$daysago], |
|||
[9,2,1,0,$daysago], |
|||
] |
|||
], |
|||
]; |
|||
} |
|||
|
|||
function testCleanUpOrphanedFeeds() { |
|||
Arsse::$db->feedCleanup(); |
|||
$now = gmdate("Y-m-d H:i:s"); |
|||
$state = $this->primeExpectations($this->data, [ |
|||
'arsse_feeds' => ["id","orphaned"] |
|||
]); |
|||
$state['arsse_feeds']['rows'][0][1] = null; |
|||
unset($state['arsse_feeds']['rows'][1]); |
|||
$state['arsse_feeds']['rows'][2][1] = $now; |
|||
$this->compareExpectations($state); |
|||
} |
|||
|
|||
function testCleanUpOldArticlesWithStandardRetention() { |
|||
Arsse::$db->articleCleanup(); |
|||
$state = $this->primeExpectations($this->data, [ |
|||
'arsse_articles' => ["id"] |
|||
]); |
|||
foreach([7,8,9] as $id) { |
|||
unset($state['arsse_articles']['rows'][$id - 1]); |
|||
} |
|||
$this->compareExpectations($state); |
|||
} |
|||
|
|||
function testCleanUpOldArticlesWithUnlimitedReadRetention() { |
|||
Arsse::$conf->retainArticlesRead = ""; |
|||
Arsse::$db->articleCleanup(); |
|||
$state = $this->primeExpectations($this->data, [ |
|||
'arsse_articles' => ["id"] |
|||
]); |
|||
foreach([7,8] as $id) { |
|||
unset($state['arsse_articles']['rows'][$id - 1]); |
|||
} |
|||
$this->compareExpectations($state); |
|||
} |
|||
|
|||
function testCleanUpOldArticlesWithUnlimitedUnreadRetention() { |
|||
Arsse::$conf->retainArticlesUnread = ""; |
|||
Arsse::$db->articleCleanup(); |
|||
$state = $this->primeExpectations($this->data, [ |
|||
'arsse_articles' => ["id"] |
|||
]); |
|||
foreach([9] as $id) { |
|||
unset($state['arsse_articles']['rows'][$id - 1]); |
|||
} |
|||
$this->compareExpectations($state); |
|||
} |
|||
|
|||
function testCleanUpOldArticlesWithUnlimitedRetention() { |
|||
Arsse::$conf->retainArticlesRead = ""; |
|||
Arsse::$conf->retainArticlesUnread = ""; |
|||
Arsse::$db->articleCleanup(); |
|||
$state = $this->primeExpectations($this->data, [ |
|||
'arsse_articles' => ["id"] |
|||
]); |
|||
$this->compareExpectations($state); |
|||
} |
|||
} |
Loading…
Reference in new issue