mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-23 09:02:41 +00:00
98c950de58
- functions not related to user management now have the existence of the affected user checked in the authorizer, when the affected user differs from the actor - User::authorizationEnabled() now nests: disabling twice and then enabling once leaves the authorizer disabled - Disabling of the authorizer is now tested - User tests now use a partial mock instead of relying on User::authorizationEnabled() - Added authorizer tests against a missing user - Removed folder tests related to missing users - Also added more subscription tests
113 lines
No EOL
4.6 KiB
PHP
113 lines
No EOL
4.6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace JKingWeb\Arsse\Test\Database;
|
|
use JKingWeb\Arsse\Data;
|
|
use JKingWeb\Arsse\Test\Database;
|
|
use JKingWeb\Arsse\User\Driver as UserDriver;
|
|
use JKingWeb\Arsse\Feed\Exception as FeedException;
|
|
use Phake;
|
|
|
|
trait SeriesSubscription {
|
|
function setUpSeries() {
|
|
$data = [
|
|
'arsse_feeds' => [
|
|
'columns' => [
|
|
'id' => "int",
|
|
'url' => "str",
|
|
'title' => "str",
|
|
'username' => "str",
|
|
'password' => "str",
|
|
],
|
|
'rows' => [
|
|
[1,"http://example.com/feed1", "Ook", "", ""],
|
|
[2,"http://example.com/feed2", "Eek", "", ""],
|
|
]
|
|
],
|
|
'arsse_subscriptions' => [
|
|
'columns' => [
|
|
'id' => "int",
|
|
'owner' => "str",
|
|
'feed' => "int",
|
|
'title' => "str",
|
|
],
|
|
'rows' => [
|
|
[1,"john.doe@example.com",2,null],
|
|
]
|
|
]
|
|
];
|
|
// merge tables
|
|
$this->data = array_merge($this->data, $data);
|
|
$this->primeDatabase($this->data);
|
|
// initialize a partial mock of the Database object to later manipulate the feedUpdate method
|
|
Data::$db = Phake::PartialMock(Database::class, $this->drv);
|
|
}
|
|
|
|
function testAddASubscriptionToAnExistingFeed() {
|
|
$user = "john.doe@example.com";
|
|
$url = "http://example.com/feed1";
|
|
$subID = $this->nextID("arsse_subscriptions");
|
|
Phake::when(Data::$db)->feedUpdate->thenReturn(true);
|
|
$this->assertSame($subID,Data::$db->subscriptionAdd($user, $url));
|
|
Phake::verify(Data::$user)->authorize($user, "subscriptionAdd");
|
|
Phake::verify(Data::$db, Phake::times(0))->feedUpdate(1, true);
|
|
$state = $this->primeExpectations($this->data, [
|
|
'arsse_feeds' => ['id','url','username','password'],
|
|
'arsse_subscriptions' => ['id','owner','feed'],
|
|
]);
|
|
$state['arsse_subscriptions']['rows'][] = [$subID,$user,1];
|
|
$this->compareExpectations($state);
|
|
}
|
|
|
|
function testAddASubscriptionToANewFeed() {
|
|
$user = "john.doe@example.com";
|
|
$url = "http://example.org/feed1";
|
|
$feedID = $this->nextID("arsse_feeds");
|
|
$subID = $this->nextID("arsse_subscriptions");
|
|
Phake::when(Data::$db)->feedUpdate->thenReturn(true);
|
|
$this->assertSame($subID,Data::$db->subscriptionAdd($user, $url));
|
|
Phake::verify(Data::$user)->authorize($user, "subscriptionAdd");
|
|
Phake::verify(Data::$db)->feedUpdate($feedID, true);
|
|
$state = $this->primeExpectations($this->data, [
|
|
'arsse_feeds' => ['id','url','username','password'],
|
|
'arsse_subscriptions' => ['id','owner','feed'],
|
|
]);
|
|
$state['arsse_feeds']['rows'][] = [$feedID,$url,"",""];
|
|
$state['arsse_subscriptions']['rows'][] = [$subID,$user,$feedID];
|
|
$this->compareExpectations($state);
|
|
}
|
|
|
|
function testAddASubscriptionToAnInvalidFeed() {
|
|
$user = "john.doe@example.com";
|
|
$url = "http://example.org/feed1";
|
|
$feedID = $this->nextID("arsse_feeds");
|
|
Phake::when(Data::$db)->feedUpdate->thenThrow(new FeedException($url, new \PicoFeed\Client\InvalidUrlException()));
|
|
try {
|
|
Data::$db->subscriptionAdd($user, $url);
|
|
} catch(FeedException $e) {
|
|
Phake::verify(Data::$user)->authorize($user, "subscriptionAdd");
|
|
Phake::verify(Data::$db)->feedUpdate($feedID, true);
|
|
$state = $this->primeExpectations($this->data, [
|
|
'arsse_feeds' => ['id','url','username','password'],
|
|
'arsse_subscriptions' => ['id','owner','feed'],
|
|
]);
|
|
$this->compareExpectations($state);
|
|
$this->assertException("invalidUrl", "Feed");
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
function testAddADuplicateSubscription() {
|
|
$user = "john.doe@example.com";
|
|
$url = "http://example.com/feed2";
|
|
$this->assertException("constraintViolation", "Db", "ExceptionInput");
|
|
Data::$db->subscriptionAdd($user, $url);
|
|
}
|
|
|
|
function testAddAFeedWithoutAuthority() {
|
|
$user = "john.doe@example.com";
|
|
$url = "http://example.com/feed1";
|
|
Phake::when(Data::$user)->authorize->thenReturn(false);
|
|
$this->assertException("notAuthorized", "User", "ExceptionAuthz");
|
|
Data::$db->subscriptionAdd($user, $url);
|
|
}
|
|
} |