diff --git a/tests/Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php b/tests/Db/SQLite3/Database/TestDatabaseSubscriptionSQLite3.php
new file mode 100644
index 00000000..bb77181b
--- /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 2024784b..b235701b 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