mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
More tests for icon cache
This commit is contained in:
parent
3d3c20de5c
commit
311910795a
5 changed files with 42 additions and 11 deletions
|
@ -1275,7 +1275,7 @@ class Database {
|
||||||
if (!Arsse::$user->authorize($user, __FUNCTION__)) {
|
if (!Arsse::$user->authorize($user, __FUNCTION__)) {
|
||||||
throw new User\ExceptionAuthz("notAuthorized", ["action" => __FUNCTION__, "user" => $user]);
|
throw new User\ExceptionAuthz("notAuthorized", ["action" => __FUNCTION__, "user" => $user]);
|
||||||
}
|
}
|
||||||
return $this->db->prepare("SELECT i.id, i.url, i.type, i.data from arsse_icons as i join arsse_feeds as f on i.id = f.icon join arsse_subscriptions as s on s.feed = f.id where s.owner = ?", "str")->run($user);
|
return $this->db->prepare("SELECT distinct i.id, i.url, i.type, i.data from arsse_icons as i join arsse_feeds as f on i.id = f.icon join arsse_subscriptions as s on s.feed = f.id where s.owner = ?", "str")->run($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Deletes orphaned icons from the database
|
/** Deletes orphaned icons from the database
|
||||||
|
|
|
@ -72,6 +72,8 @@ class Service {
|
||||||
public static function cleanupPre(): bool {
|
public static function cleanupPre(): bool {
|
||||||
// mark unsubscribed feeds as orphaned and delete orphaned feeds that are beyond their retention period
|
// mark unsubscribed feeds as orphaned and delete orphaned feeds that are beyond their retention period
|
||||||
Arsse::$db->feedCleanup();
|
Arsse::$db->feedCleanup();
|
||||||
|
// do the same for icons
|
||||||
|
Arsse::$db->iconCleanup();
|
||||||
// delete expired log-in sessions
|
// delete expired log-in sessions
|
||||||
Arsse::$db->sessionCleanup();
|
Arsse::$db->sessionCleanup();
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -66,6 +66,19 @@ trait SeriesCleanup {
|
||||||
["da772f8fa13c11e78667001e673b2560", "class.class", "john.doe@example.com", $soon],
|
["da772f8fa13c11e78667001e673b2560", "class.class", "john.doe@example.com", $soon],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'arsse_icons' => [
|
||||||
|
'columns' => [
|
||||||
|
'id' => "int",
|
||||||
|
'url' => "str",
|
||||||
|
'orphaned' => "datetime",
|
||||||
|
],
|
||||||
|
'rows' => [
|
||||||
|
[1,'http://localhost:8000/Icon/PNG',null],
|
||||||
|
[2,'http://localhost:8000/Icon/GIF',null],
|
||||||
|
[3,'http://localhost:8000/Icon/SVG1',null],
|
||||||
|
[4,'http://localhost:8000/Icon/SVG2',null],
|
||||||
|
],
|
||||||
|
],
|
||||||
'arsse_feeds' => [
|
'arsse_feeds' => [
|
||||||
'columns' => [
|
'columns' => [
|
||||||
'id' => "int",
|
'id' => "int",
|
||||||
|
|
|
@ -53,16 +53,11 @@ trait SeriesIcon {
|
||||||
'icon' => "int",
|
'icon' => "int",
|
||||||
],
|
],
|
||||||
'rows' => [
|
'rows' => [
|
||||||
[1,"http://localhost:8000/Feed/Matching/3","Ook",0,"",$past,$past,0,null],
|
[1,"http://localhost:8000/Feed/Matching/3","Ook",0,"",$past,$past,0,1],
|
||||||
[2,"http://localhost:8000/Feed/Matching/1","Eek",5,"There was an error last time",$past,$future,0,null],
|
[2,"http://localhost:8000/Feed/Matching/1","Eek",5,"There was an error last time",$past,$future,0,2],
|
||||||
[3,"http://localhost:8000/Feed/Fetching/Error?code=404","Ack",0,"",$past,$now,0,null],
|
[3,"http://localhost:8000/Feed/Fetching/Error?code=404","Ack",0,"",$past,$now,0,3],
|
||||||
[4,"http://localhost:8000/Feed/NextFetch/NotModified?t=".time(),"Ooook",0,"",$past,$past,0,null],
|
[4,"http://localhost:8000/Feed/NextFetch/NotModified?t=".time(),"Ooook",0,"",$past,$past,0,null],
|
||||||
[5,"http://localhost:8000/Feed/Parsing/Valid","Ooook",0,"",$past,$future,0,null],
|
[5,"http://localhost:8000/Feed/Parsing/Valid","Ooook",0,"",$past,$future,0,2],
|
||||||
// these feeds all test icon caching
|
|
||||||
[6,"http://localhost:8000/Feed/WithIcon/PNG",null,0,"",$past,$future,0,1], // no change when updated
|
|
||||||
[7,"http://localhost:8000/Feed/WithIcon/GIF",null,0,"",$past,$future,0,1], // icon ID 2 will be assigned to feed when updated
|
|
||||||
[8,"http://localhost:8000/Feed/WithIcon/SVG1",null,0,"",$past,$future,0,3], // icon ID 3 will be modified when updated
|
|
||||||
[9,"http://localhost:8000/Feed/WithIcon/SVG2",null,0,"",$past,$future,0,null], // icon ID 4 will be created and assigned to feed when updated
|
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'arsse_subscriptions' => [
|
'arsse_subscriptions' => [
|
||||||
|
@ -77,7 +72,7 @@ trait SeriesIcon {
|
||||||
[3,'john.doe@example.com',3],
|
[3,'john.doe@example.com',3],
|
||||||
[4,'john.doe@example.com',4],
|
[4,'john.doe@example.com',4],
|
||||||
[5,'john.doe@example.com',5],
|
[5,'john.doe@example.com',5],
|
||||||
[6,'jane.doe@example.com',1],
|
[6,'jane.doe@example.com',5],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
@ -86,4 +81,23 @@ trait SeriesIcon {
|
||||||
protected function tearDownSeriesIcon(): void {
|
protected function tearDownSeriesIcon(): void {
|
||||||
unset($this->data);
|
unset($this->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testListTheIconsOfAUser() {
|
||||||
|
$exp = [
|
||||||
|
['id' => 1,'url' => 'http://localhost:8000/Icon/PNG', 'type' => 'image/png', 'data' => base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAAADUlEQVQYV2NgYGBgAAAABQABijPjAAAAAABJRU5ErkJggg==")],
|
||||||
|
['id' => 2,'url' => 'http://localhost:8000/Icon/GIF', 'type' => 'image/gif', 'data' => base64_decode("R0lGODlhAQABAIABAAAAAP///yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")],
|
||||||
|
['id' => 3,'url' => 'http://localhost:8000/Icon/SVG1', 'type' => 'image/svg+xml', 'data' => '<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600"><rect fill="#fff" height="600" width="900"/><circle fill="#bc002d" cx="450" cy="300" r="180"/></svg>'],
|
||||||
|
];
|
||||||
|
$this->assertResult($exp, Arsse::$db->iconList("john.doe@example.com"));
|
||||||
|
$exp = [
|
||||||
|
['id' => 2,'url' => 'http://localhost:8000/Icon/GIF', 'type' => 'image/gif', 'data' => base64_decode("R0lGODlhAQABAIABAAAAAP///yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==")],
|
||||||
|
];
|
||||||
|
$this->assertResult($exp, Arsse::$db->iconList("jane.doe@example.com"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListTheIconsOfAUserWithoutAuthority() {
|
||||||
|
\Phake::when(Arsse::$user)->authorize->thenReturn(false);
|
||||||
|
$this->assertException("notAuthorized", "User", "ExceptionAuthz");
|
||||||
|
Arsse::$db->iconList("jane.doe@example.com");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ class TestService extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
public function testPerformPreCleanup(): void {
|
public function testPerformPreCleanup(): void {
|
||||||
$this->assertTrue(Service::cleanupPre());
|
$this->assertTrue(Service::cleanupPre());
|
||||||
\Phake::verify(Arsse::$db)->feedCleanup();
|
\Phake::verify(Arsse::$db)->feedCleanup();
|
||||||
|
\Phake::verify(Arsse::$db)->iconCleanup();
|
||||||
\Phake::verify(Arsse::$db)->sessionCleanup();
|
\Phake::verify(Arsse::$db)->sessionCleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ class TestService extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
\Phake::verify($d)->exec();
|
\Phake::verify($d)->exec();
|
||||||
\Phake::verify($d)->clean();
|
\Phake::verify($d)->clean();
|
||||||
\Phake::verify(Arsse::$db)->feedCleanup();
|
\Phake::verify(Arsse::$db)->feedCleanup();
|
||||||
|
\Phake::verify(Arsse::$db)->iconCleanup();
|
||||||
\Phake::verify(Arsse::$db)->sessionCleanup();
|
\Phake::verify(Arsse::$db)->sessionCleanup();
|
||||||
\Phake::verify(Arsse::$db)->articleCleanup();
|
\Phake::verify(Arsse::$db)->articleCleanup();
|
||||||
\Phake::verify(Arsse::$db)->metaSet("service_last_checkin", $this->anything(), "datetime");
|
\Phake::verify(Arsse::$db)->metaSet("service_last_checkin", $this->anything(), "datetime");
|
||||||
|
|
Loading…
Reference in a new issue