CategoryTest.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. declare(strict_types=1);
  3. use PHPUnit\Framework\Attributes\DataProvider;
  4. final class CategoryTest extends \PHPUnit\Framework\TestCase {
  5. public static function test__construct_whenNoParameters_createsObjectWithDefaultValues(): void {
  6. $category = new FreshRSS_Category();
  7. self::assertSame(0, $category->id());
  8. self::assertSame('', $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::assertSame($expected, $category->name());
  14. }
  15. /** @return list<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->method('id')->withAnyParameters()->willReturn(1);
  31. $feed_1->expects(self::any())
  32. ->method('name')
  33. ->willReturn('AAA');
  34. $feed_2 = $this->getMockBuilder(FreshRSS_Feed::class)
  35. ->disableOriginalConstructor()
  36. ->getMock();
  37. $feed_2->method('id')->withAnyParameters()->willReturn(2);
  38. $feed_2->expects(self::any())
  39. ->method('name')
  40. ->willReturn('ZZZ');
  41. $feed_3 = $this->getMockBuilder(FreshRSS_Feed::class)
  42. ->disableOriginalConstructor()
  43. ->getMock();
  44. $feed_3->method('id')->withAnyParameters()->willReturn(3);
  45. $feed_3->expects(self::any())
  46. ->method('name')
  47. ->willReturn('lll');
  48. $category = new FreshRSS_Category('test', 0, [
  49. $feed_1,
  50. $feed_2,
  51. $feed_3,
  52. ]);
  53. $feeds = $category->feeds();
  54. self::assertCount(3, $feeds);
  55. $feed = reset($feeds) ?: FreshRSS_Feed::default();
  56. self::assertSame('AAA', $feed->name());
  57. $feed = next($feeds) ?: FreshRSS_Feed::default();
  58. self::assertSame('lll', $feed->name());
  59. $feed = next($feeds) ?: FreshRSS_Feed::default();
  60. self::assertSame('ZZZ', $feed->name());
  61. /** @var FreshRSS_Feed&PHPUnit\Framework\MockObject\MockObject */
  62. $feed_4 = $this->getMockBuilder(FreshRSS_Feed::class)
  63. ->disableOriginalConstructor()
  64. ->getMock();
  65. $feed_4->method('id')->withAnyParameters()->willReturn(4);
  66. $feed_4->expects(self::any())
  67. ->method('name')
  68. ->willReturn('BBB');
  69. $feed_4->method('id')->withAnyParameters()->willReturn(5);
  70. $category->addFeed($feed_4);
  71. $feeds = $category->feeds();
  72. self::assertCount(4, $feeds);
  73. $feed = reset($feeds) ?: FreshRSS_Feed::default();
  74. self::assertSame('AAA', $feed->name());
  75. $feed = next($feeds) ?: FreshRSS_Feed::default();
  76. self::assertSame('BBB', $feed->name());
  77. $feed = next($feeds) ?: FreshRSS_Feed::default();
  78. self::assertSame('lll', $feed->name());
  79. $feed = next($feeds) ?: FreshRSS_Feed::default();
  80. self::assertSame('ZZZ', $feed->name());
  81. }
  82. }