CategoryTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. declare(strict_types=1);
  3. use PHPUnit\Framework\Attributes\DataProvider;
  4. class CategoryTest extends PHPUnit\Framework\TestCase {
  5. public static function test__construct_whenNoParameters_createsObjectWithDefaultValues(): void {
  6. $category = new FreshRSS_Category();
  7. self::assertEquals(0, $category->id());
  8. self::assertEquals('', $category->name());
  9. }
  10. #[DataProvider('provideValidNames')]
  11. public static function test_name_whenValidValue_storesModifiedValue(string $input, string $expected): void {
  12. $category = new FreshRSS_Category($input);
  13. self::assertEquals($expected, $category->name());
  14. }
  15. /** @return array<array{string,string}> */
  16. public static function provideValidNames(): array {
  17. return [
  18. ['', ''],
  19. ['this string does not need trimming', 'this string does not need trimming'],
  20. [' this string needs trimming on left', 'this string needs trimming on left'],
  21. ['this string needs trimming on right ', 'this string needs trimming on right'],
  22. [' this string needs trimming on both ends ', 'this string needs trimming on both ends'],
  23. [str_repeat('X', 512), str_repeat('X', FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE)], // max length
  24. ];
  25. }
  26. public function test_feedOrdering(): void {
  27. $feed_1 = $this->getMockBuilder(FreshRSS_Feed::class)
  28. ->disableOriginalConstructor()
  29. ->getMock();
  30. $feed_1->expects(self::any())
  31. ->method('name')
  32. ->willReturn('AAA');
  33. $feed_2 = $this->getMockBuilder(FreshRSS_Feed::class)
  34. ->disableOriginalConstructor()
  35. ->getMock();
  36. $feed_2->expects(self::any())
  37. ->method('name')
  38. ->willReturn('ZZZ');
  39. $feed_3 = $this->getMockBuilder(FreshRSS_Feed::class)
  40. ->disableOriginalConstructor()
  41. ->getMock();
  42. $feed_3->expects(self::any())
  43. ->method('name')
  44. ->willReturn('lll');
  45. $category = new FreshRSS_Category('test', 0, [
  46. $feed_1,
  47. $feed_2,
  48. $feed_3,
  49. ]);
  50. $feeds = $category->feeds();
  51. self::assertCount(3, $feeds);
  52. $feed = reset($feeds) ?: FreshRSS_Feed::default();
  53. self::assertEquals('AAA', $feed->name());
  54. $feed = next($feeds) ?: FreshRSS_Feed::default();
  55. self::assertEquals('lll', $feed->name());
  56. $feed = next($feeds) ?: FreshRSS_Feed::default();
  57. self::assertEquals('ZZZ', $feed->name());
  58. /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */
  59. $feed_4 = $this->getMockBuilder(FreshRSS_Feed::class)
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. $feed_4->expects(self::any())
  63. ->method('name')
  64. ->willReturn('BBB');
  65. $category->addFeed($feed_4);
  66. $feeds = $category->feeds();
  67. self::assertCount(4, $feeds);
  68. $feed = reset($feeds) ?: FreshRSS_Feed::default();
  69. self::assertEquals('AAA', $feed->name());
  70. $feed = next($feeds) ?: FreshRSS_Feed::default();
  71. self::assertEquals('BBB', $feed->name());
  72. $feed = next($feeds) ?: FreshRSS_Feed::default();
  73. self::assertEquals('lll', $feed->name());
  74. $feed = next($feeds) ?: FreshRSS_Feed::default();
  75. self::assertEquals('ZZZ', $feed->name());
  76. }
  77. }