4
0

UserQueryTest.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. declare(strict_types=1);
  3. use PHPUnit\Framework\TestCase;
  4. /**
  5. * Description of UserQueryTest
  6. */
  7. class UserQueryTest extends TestCase {
  8. #[\Override]
  9. protected function setUp(): void {
  10. if (!FreshRSS_Context::hasSystemConf()) {
  11. FreshRSS_Context::initSystem();
  12. }
  13. }
  14. public static function test__construct_whenAllQuery_storesAllParameters(): void {
  15. $query = ['get' => 'a'];
  16. $user_query = new FreshRSS_UserQuery($query, [], []);
  17. self::assertSame('all', $user_query->getGetType());
  18. }
  19. public static function test__construct_whenFavoriteQuery_storesFavoriteParameters(): void {
  20. $query = ['get' => 's'];
  21. $user_query = new FreshRSS_UserQuery($query, [], []);
  22. self::assertSame('favorite', $user_query->getGetType());
  23. }
  24. public function test__construct_whenCategoryQuery_storesCategoryParameters(): void {
  25. $category_name = 'some category name';
  26. /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
  27. $cat = $this->createMock(FreshRSS_Category::class);
  28. $cat->method('id')->withAnyParameters()->willReturn(1);
  29. $cat->expects(self::atLeastOnce())
  30. ->method('name')
  31. ->withAnyParameters()
  32. ->willReturn($category_name);
  33. $query = ['get' => 'c_1'];
  34. $user_query = new FreshRSS_UserQuery($query, [$cat], []);
  35. self::assertSame($category_name, $user_query->getGetName());
  36. self::assertSame('category', $user_query->getGetType());
  37. }
  38. public function test__construct_whenFeedQuery_storesFeedParameters(): void {
  39. $feed_name = 'some feed name';
  40. /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */
  41. $feed = $this->createMock(FreshRSS_Feed::class);
  42. $feed->expects(self::atLeastOnce())
  43. ->method('id')
  44. ->withAnyParameters()
  45. ->willReturn(1);
  46. $feed->expects(self::atLeastOnce())
  47. ->method('name')
  48. ->withAnyParameters()
  49. ->willReturn($feed_name);
  50. /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
  51. $cat = $this->createMock(FreshRSS_Category::class);
  52. $cat->method('id')->withAnyParameters()->willReturn(1);
  53. $cat->expects(self::atLeastOnce())
  54. ->method('feeds')
  55. ->withAnyParameters()
  56. ->willReturn([1 => $feed]);
  57. $query = ['get' => 'f_1'];
  58. $user_query = new FreshRSS_UserQuery($query, [$cat], []);
  59. self::assertSame($feed_name, $user_query->getGetName());
  60. self::assertSame('feed', $user_query->getGetType());
  61. }
  62. public static function test__construct_whenUnknownQuery_doesStoreParameters(): void {
  63. $query = ['get' => 'q'];
  64. $user_query = new FreshRSS_UserQuery($query, [], []);
  65. self::assertEmpty($user_query->getGetName());
  66. self::assertEmpty($user_query->getGetType());
  67. }
  68. public static function test__construct_whenName_storesName(): void {
  69. $name = 'some name';
  70. $query = ['name' => $name];
  71. $user_query = new FreshRSS_UserQuery($query, [], []);
  72. self::assertSame($name, $user_query->getName());
  73. }
  74. public static function test__construct_whenOrder_storesOrder(): void {
  75. $order = 'some order';
  76. $query = ['order' => $order];
  77. $user_query = new FreshRSS_UserQuery($query, [], []);
  78. self::assertSame($order, $user_query->getOrder());
  79. }
  80. public static function test__construct_whenSort_storesSort(): void {
  81. $sort = 'title';
  82. $query = ['sort' => $sort];
  83. $user_query = new FreshRSS_UserQuery($query, [], []);
  84. self::assertSame($sort, $user_query->getSort());
  85. }
  86. public static function test__construct_whenState_storesState(): void {
  87. $state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_FAVORITE;
  88. $query = ['state' => $state];
  89. $user_query = new FreshRSS_UserQuery($query, [], []);
  90. self::assertSame($state, $user_query->getState());
  91. }
  92. public static function test__construct_whenUrl_storesUrl(): void {
  93. $url = 'some url';
  94. $query = ['url' => $url];
  95. $user_query = new FreshRSS_UserQuery($query, [], []);
  96. self::assertSame($url, $user_query->getUrl());
  97. }
  98. public static function testToArray_whenNoData_returnsEmptyArray(): void {
  99. $user_query = new FreshRSS_UserQuery([], [], []);
  100. // All values are defaults, so array should be empty
  101. self::assertCount(0, $user_query->toArray());
  102. }
  103. public static function testToArray_whenData_returnsArray(): void {
  104. $query = [
  105. 'get' => 's',
  106. 'name' => 'some name',
  107. 'order' => 'some order',
  108. 'search' => 'some search',
  109. 'state' => FreshRSS_Entry::STATE_ALL,
  110. 'url' => 'some url',
  111. ];
  112. $user_query = new FreshRSS_UserQuery($query, [], []);
  113. self::assertCount(6, $user_query->toArray());
  114. self::assertSame($query, $user_query->toArray());
  115. }
  116. public static function testToArray_whenSort_returnsSort(): void {
  117. $query = ['sort' => 'date'];
  118. $user_query = new FreshRSS_UserQuery($query, [], []);
  119. self::assertSame('date', $user_query->toArray()['sort'] ?? null);
  120. }
  121. public static function testHasSearch_whenSearch_returnsTrue(): void {
  122. $query = ['search' => 'some search'];
  123. $user_query = new FreshRSS_UserQuery($query, [], []);
  124. self::assertTrue($user_query->hasSearch());
  125. }
  126. public static function testHasSearch_whenNoSearch_returnsFalse(): void {
  127. $user_query = new FreshRSS_UserQuery([], [], []);
  128. self::assertFalse($user_query->hasSearch());
  129. }
  130. public static function testHasParameters_whenAllQuery_returnsFalse(): void {
  131. $query = ['get' => 'a'];
  132. $user_query = new FreshRSS_UserQuery($query, [], []);
  133. self::assertFalse($user_query->hasParameters());
  134. }
  135. public static function testHasParameters_whenNoParameter_returnsFalse(): void {
  136. $query = [];
  137. $user_query = new FreshRSS_UserQuery($query, [], []);
  138. self::assertFalse($user_query->hasParameters());
  139. }
  140. public static function testHasParameters_whenParameter_returnTrue(): void {
  141. $query = ['get' => 's'];
  142. $user_query = new FreshRSS_UserQuery($query, [], []);
  143. self::assertTrue($user_query->hasParameters());
  144. }
  145. public function testIsDeprecated_whenCategoryExists_returnFalse(): void {
  146. /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
  147. $cat = $this->createMock(FreshRSS_Category::class);
  148. $cat->method('id')->withAnyParameters()->willReturn(1);
  149. $cat->expects(self::atLeastOnce())
  150. ->method('name')
  151. ->withAnyParameters()
  152. ->willReturn('cat 1');
  153. $query = ['get' => 'c_1'];
  154. $user_query = new FreshRSS_UserQuery($query, [$cat], []);
  155. self::assertFalse($user_query->isDeprecated());
  156. }
  157. public static function testIsDeprecated_whenCategoryDoesNotExist_returnTrue(): void {
  158. $query = ['get' => 'c_1'];
  159. $user_query = new FreshRSS_UserQuery($query, [], []);
  160. self::assertTrue($user_query->isDeprecated());
  161. }
  162. public function testIsDeprecated_whenFeedExists_returnFalse(): void {
  163. /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */
  164. $feed = $this->createMock(FreshRSS_Feed::class);
  165. $feed->expects(self::atLeastOnce())
  166. ->method('id')
  167. ->withAnyParameters()
  168. ->willReturn(1);
  169. $feed->expects(self::atLeastOnce())
  170. ->method('name')
  171. ->withAnyParameters()
  172. ->willReturn('feed 1');
  173. /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
  174. $cat = $this->createMock(FreshRSS_Category::class);
  175. $cat->method('id')->withAnyParameters()->willReturn(1);
  176. $cat->expects(self::atLeastOnce())
  177. ->method('feeds')
  178. ->withAnyParameters()
  179. ->willReturn([1 => $feed]);
  180. $query = ['get' => 'f_1'];
  181. $user_query = new FreshRSS_UserQuery($query, [$cat], []);
  182. self::assertFalse($user_query->isDeprecated());
  183. }
  184. public function testIsDeprecated_whenFeedDoesNotExist_returnTrue(): void {
  185. /** @var FreshRSS_Category&PHPUnit\Framework\MockObject\MockObject */
  186. $cat = $this->createMock(FreshRSS_Category::class);
  187. $cat->method('id')->withAnyParameters()->willReturn(1);
  188. $cat->expects(self::atLeastOnce())
  189. ->method('feeds')
  190. ->withAnyParameters()
  191. ->willReturn([]);
  192. $query = ['get' => 'f_1'];
  193. $user_query = new FreshRSS_UserQuery($query, [$cat], []);
  194. self::assertTrue($user_query->isDeprecated());
  195. }
  196. public static function testIsDeprecated_whenAllQuery_returnFalse(): void {
  197. $query = ['get' => 'a'];
  198. $user_query = new FreshRSS_UserQuery($query, [], []);
  199. self::assertFalse($user_query->isDeprecated());
  200. }
  201. public static function testIsDeprecated_whenFavoriteQuery_returnFalse(): void {
  202. $query = ['get' => 's'];
  203. $user_query = new FreshRSS_UserQuery($query, [], []);
  204. self::assertFalse($user_query->isDeprecated());
  205. }
  206. public static function testIsDeprecated_whenUnknownQuery_returnFalse(): void {
  207. $query = ['get' => 'q'];
  208. $user_query = new FreshRSS_UserQuery($query, [], []);
  209. self::assertFalse($user_query->isDeprecated());
  210. }
  211. public static function test__construct_whenUserLabelPrefix_storesValue(): void {
  212. $query = ['userLabelPrefix' => 'test/'];
  213. $user_query = new FreshRSS_UserQuery($query, [], []);
  214. self::assertSame('test/', $user_query->userLabelPrefix());
  215. }
  216. public static function test__construct_migration_fromPublishLabelsInsteadOfTags_whenEnabled(): void {
  217. // Test of legacy migration
  218. $query = ['publishLabelsInsteadOfTags' => true];
  219. $user_query = new FreshRSS_UserQuery($query, [], []);
  220. self::assertTrue($user_query->includeUserLabels());
  221. self::assertTrue($user_query->excludeArticleTags());
  222. }
  223. public static function test__construct_migration_fromPublishLabelsInsteadOfTags_whenDisabled(): void {
  224. // Test of legacy migration
  225. $query = ['publishLabelsInsteadOfTags' => false];
  226. $user_query = new FreshRSS_UserQuery($query, [], []);
  227. self::assertFalse($user_query->includeUserLabels());
  228. self::assertFalse($user_query->excludeArticleTags());
  229. }
  230. }