diff --git a/tests/Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php b/tests/Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php new file mode 100644 index 0000000..bb77181 --- /dev/null +++ b/tests/Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php @@ -0,0 +1,9 @@ + [ + 'columns' => [ + 'id' => "int", + 'url' => "str", + 'title' => "str", + 'username' => "str", + 'password' => "str", + ], + 'rows' => [ + [1,"http://example.com/feed1", "Ook", "", ""], + ] + ], + 'arsse_subscriptions' => [ + 'columns' => [ + 'id' => "int", + 'owner' => "str", + 'feed' => "int", + ], + 'rows' => [ + + ] + ] + ]; + // merge folder table with base user table + $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"); + $subID = $this->nextID("arsse_subscriptions"); + 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; + } + } +} \ No newline at end of file diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 2024784..b235701 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -37,6 +37,7 @@ Db/SQLite3/Database/TestDatabaseUserSQLite3.php Db/SQLite3/Database/TestDatabaseFolderSQLite3.php + Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php REST/NextCloudNews/TestNCNVersionDiscovery.php