diff options
| author | 2024-02-26 09:01:03 +0100 | |
|---|---|---|
| committer | 2024-02-26 09:01:03 +0100 | |
| commit | 39cc1c11ec596176e842cc98e6a54337e3c04d7e (patch) | |
| tree | dab89beb80268acb5e4bd58dfc55297bd30a8486 /tests | |
| parent | 25166c218be4e1ce1cb098de274a231b623d527e (diff) | |
New feature: shareable user query (#6052)
* New feature: shareable user query
Share the output of a user query by RSS / HTML / OPML with other people through unique URLs.
Replaces the global admin token, which was the only option (but unsafe) to share RSS outputs with other people.
Also add a new HTML output for people without an RSS reader.
fix https://github.com/FreshRSS/FreshRSS/issues/3066#issuecomment-648977890
fix https://github.com/FreshRSS/FreshRSS/issues/3178#issuecomment-769435504
* Remove unused method
* Fix token saving
* Implement HTML view
* Update i18n for master token
* Revert i18n get_favorite
* Fix missing i18n for user queries from before this PR
* Remove irrelevant tests
* Add link to RSS version
* Fix getGet
* Fix getState
* Fix getSearch
* Alternative getSearch
* Default getOrder
* Explicit default state
* Fix test
* Add OPML sharing
* Remove many redundant SQL queries from original implementation of user queries
* Fix article tags
* Use default user settings
* Prepare public search
* Fixes
* Allow user search on article tags
* Implement user search
* Revert filter bug
* Revert wrong SQL left outer join change
* Implement checkboxes
* Safe check of OPML
* Fix label
* Remove RSS button to favour new sharing method
That sharing button was using a global admin token
* First version of HTTP 304
* Disallow some recusrivity
fix https://github.com/FreshRSS/FreshRSS/issues/6086
* Draft of nav
* Minor httpConditional
* Add support for offset for pagination
* Fix offset pagination
* Fix explicit order ASC
* Add documentation
* Help links i18n
* Note about deprecated master token
* Typo
* Doc about format
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/app/Models/CategoryTest.php | 21 | ||||
| -rw-r--r-- | tests/app/Models/UserQueryTest.php | 112 |
2 files changed, 68 insertions, 65 deletions
diff --git a/tests/app/Models/CategoryTest.php b/tests/app/Models/CategoryTest.php index ac450de1d..842ebe200 100644 --- a/tests/app/Models/CategoryTest.php +++ b/tests/app/Models/CategoryTest.php @@ -59,9 +59,12 @@ class CategoryTest extends PHPUnit\Framework\TestCase { $feeds = $category->feeds(); self::assertCount(3, $feeds); - self::assertEquals('AAA', $feeds[0]->name()); - self::assertEquals('lll', $feeds[1]->name()); - self::assertEquals('ZZZ', $feeds[2]->name()); + $feed = reset($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('AAA', $feed->name()); + $feed = next($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('lll', $feed->name()); + $feed = next($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('ZZZ', $feed->name()); /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */ $feed_4 = $this->getMockBuilder(FreshRSS_Feed::class) @@ -75,9 +78,13 @@ class CategoryTest extends PHPUnit\Framework\TestCase { $feeds = $category->feeds(); self::assertCount(4, $feeds); - self::assertEquals('AAA', $feeds[0]->name()); - self::assertEquals('BBB', $feeds[1]->name()); - self::assertEquals('lll', $feeds[2]->name()); - self::assertEquals('ZZZ', $feeds[3]->name()); + $feed = reset($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('AAA', $feed->name()); + $feed = next($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('BBB', $feed->name()); + $feed = next($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('lll', $feed->name()); + $feed = next($feeds) ?: FreshRSS_Feed::default(); + self::assertEquals('ZZZ', $feed->name()); } } diff --git a/tests/app/Models/UserQueryTest.php b/tests/app/Models/UserQueryTest.php index 9f067e848..828bd4276 100644 --- a/tests/app/Models/UserQueryTest.php +++ b/tests/app/Models/UserQueryTest.php @@ -8,15 +8,13 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function test__construct_whenAllQuery_storesAllParameters(): void { $query = array('get' => 'a'); - $user_query = new FreshRSS_UserQuery($query); - self::assertEquals('all', $user_query->getGetName()); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals('all', $user_query->getGetType()); } public function test__construct_whenFavoriteQuery_storesFavoriteParameters(): void { $query = array('get' => 's'); - $user_query = new FreshRSS_UserQuery($query); - self::assertEquals('favorite', $user_query->getGetName()); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals('favorite', $user_query->getGetType()); } @@ -28,14 +26,8 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { ->method('name') ->withAnyParameters() ->willReturn($category_name); - /** @var FreshRSS_CategoryDAO&PHPUnit\Framework\MockObject\MockObject */ - $cat_dao = $this->createMock(FreshRSS_CategoryDAO::class); - $cat_dao->expects(self::atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn($cat); $query = array('get' => 'c_1'); - $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); + $user_query = new FreshRSS_UserQuery($query, [1 => $cat], []); self::assertEquals($category_name, $user_query->getGetName()); self::assertEquals('category', $user_query->getGetType()); } @@ -45,24 +37,28 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */ $feed = $this->createMock(FreshRSS_Feed::class); $feed->expects(self::atLeastOnce()) + ->method('id') + ->withAnyParameters() + ->willReturn(1); + $feed->expects(self::atLeastOnce()) ->method('name') ->withAnyParameters() ->willReturn($feed_name); - /** @var FreshRSS_FeedDAO&PHPUnit\Framework\MockObject\MockObject */ - $feed_dao = $this->createMock(FreshRSS_FeedDAO::class); - $feed_dao->expects(self::atLeastOnce()) - ->method('searchById') + /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */ + $cat = $this->createMock(FreshRSS_Category::class); + $cat->expects(self::atLeastOnce()) + ->method('feeds') ->withAnyParameters() - ->willReturn($feed); + ->willReturn([1 => $feed]); $query = array('get' => 'f_1'); - $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); + $user_query = new FreshRSS_UserQuery($query, [1 => $cat], []); self::assertEquals($feed_name, $user_query->getGetName()); self::assertEquals('feed', $user_query->getGetType()); } public function test__construct_whenUnknownQuery_doesStoreParameters(): void { $query = array('get' => 'q'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEmpty($user_query->getGetName()); self::assertEmpty($user_query->getGetType()); } @@ -70,33 +66,33 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { public function test__construct_whenName_storesName(): void { $name = 'some name'; $query = array('name' => $name); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals($name, $user_query->getName()); } public function test__construct_whenOrder_storesOrder(): void { $order = 'some order'; $query = array('order' => $order); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals($order, $user_query->getOrder()); } public function test__construct_whenState_storesState(): void { - $state = FreshRSS_Entry::STATE_ALL; + $state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_FAVORITE; $query = array('state' => $state); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals($state, $user_query->getState()); } public function test__construct_whenUrl_storesUrl(): void { $url = 'some url'; $query = array('url' => $url); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertEquals($url, $user_query->getUrl()); } public function testToArray_whenNoData_returnsEmptyArray(): void { - $user_query = new FreshRSS_UserQuery(array()); + $user_query = new FreshRSS_UserQuery([], [], []); self::assertCount(0, $user_query->toArray()); } @@ -109,7 +105,7 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { 'state' => FreshRSS_Entry::STATE_ALL, 'url' => 'some url', ); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertCount(6, $user_query->toArray()); self::assertEquals($query, $user_query->toArray()); } @@ -118,100 +114,100 @@ class UserQueryTest extends PHPUnit\Framework\TestCase { $query = array( 'search' => 'some search', ); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertTrue($user_query->hasSearch()); } public function testHasSearch_whenNoSearch_returnsFalse(): void { - $user_query = new FreshRSS_UserQuery(array()); + $user_query = new FreshRSS_UserQuery([], [], []); self::assertFalse($user_query->hasSearch()); } public function testHasParameters_whenAllQuery_returnsFalse(): void { $query = array('get' => 'a'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertFalse($user_query->hasParameters()); } public function testHasParameters_whenNoParameter_returnsFalse(): void { $query = array(); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertFalse($user_query->hasParameters()); } public function testHasParameters_whenParameter_returnTrue(): void { $query = array('get' => 's'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertTrue($user_query->hasParameters()); } public function testIsDeprecated_whenCategoryExists_returnFalse(): void { /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */ $cat = $this->createMock(FreshRSS_Category::class); - /** @var FreshRSS_CategoryDAO&PHPUnit\Framework\MockObject\MockObject */ - $cat_dao = $this->createMock(FreshRSS_CategoryDAO::class); - $cat_dao->expects(self::atLeastOnce()) - ->method('searchById') + $cat->expects(self::atLeastOnce()) + ->method('name') ->withAnyParameters() - ->willReturn($cat); + ->willReturn('cat 1'); $query = array('get' => 'c_1'); - $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); + $user_query = new FreshRSS_UserQuery($query, [1 => $cat], []); self::assertFalse($user_query->isDeprecated()); } public function testIsDeprecated_whenCategoryDoesNotExist_returnTrue(): void { - /** @var FreshRSS_CategoryDAO&PHPUnit\Framework\MockObject\MockObject */ - $cat_dao = $this->createMock(FreshRSS_CategoryDAO::class); - $cat_dao->expects(self::atLeastOnce()) - ->method('searchById') - ->withAnyParameters() - ->willReturn(null); $query = array('get' => 'c_1'); - $user_query = new FreshRSS_UserQuery($query, null, $cat_dao); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertTrue($user_query->isDeprecated()); } public function testIsDeprecated_whenFeedExists_returnFalse(): void { /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */ $feed = $this->createMock(FreshRSS_Feed::class); - /** @var FreshRSS_FeedDAO&PHPUnit\Framework\MockObject\MockObject */ - $feed_dao = $this->createMock(FreshRSS_FeedDAO::class); - $feed_dao->expects(self::atLeastOnce()) - ->method('searchById') + $feed->expects(self::atLeastOnce()) + ->method('id') ->withAnyParameters() - ->willReturn($feed); + ->willReturn(1); + $feed->expects(self::atLeastOnce()) + ->method('name') + ->withAnyParameters() + ->willReturn('feed 1'); + /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */ + $cat = $this->createMock(FreshRSS_Category::class); + $cat->expects(self::atLeastOnce()) + ->method('feeds') + ->withAnyParameters() + ->willReturn([1 => $feed]); $query = array('get' => 'f_1'); - $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); + $user_query = new FreshRSS_UserQuery($query, [1 => $cat], []); self::assertFalse($user_query->isDeprecated()); } public function testIsDeprecated_whenFeedDoesNotExist_returnTrue(): void { - /** @var FreshRSS_FeedDAO&PHPUnit\Framework\MockObject\MockObject */ - $feed_dao = $this->createMock(FreshRSS_FeedDAO::class); - $feed_dao->expects(self::atLeastOnce()) - ->method('searchById') + /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */ + $cat = $this->createMock(FreshRSS_Category::class); + $cat->expects(self::atLeastOnce()) + ->method('feeds') ->withAnyParameters() - ->willReturn(null); + ->willReturn([]); $query = array('get' => 'f_1'); - $user_query = new FreshRSS_UserQuery($query, $feed_dao, null); + $user_query = new FreshRSS_UserQuery($query, [1 => $cat], []); self::assertTrue($user_query->isDeprecated()); } public function testIsDeprecated_whenAllQuery_returnFalse(): void { $query = array('get' => 'a'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertFalse($user_query->isDeprecated()); } public function testIsDeprecated_whenFavoriteQuery_returnFalse(): void { $query = array('get' => 's'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertFalse($user_query->isDeprecated()); } public function testIsDeprecated_whenUnknownQuery_returnFalse(): void { $query = array('get' => 'q'); - $user_query = new FreshRSS_UserQuery($query); + $user_query = new FreshRSS_UserQuery($query, [], []); self::assertFalse($user_query->isDeprecated()); } |
