UserQueryTest.php 8.6 KB

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