FeedTest.php 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. <?php
  2. declare(strict_types=1);
  3. use PHPUnit\Framework\Attributes\DataProvider;
  4. final class FeedTest extends \PHPUnit\Framework\TestCase {
  5. #[DataProvider('provideStoredAndRequestedUrls')]
  6. public function test_load_obeysRetryAfter(string $storedUrl, string $requestedUrl): void {
  7. $getRetryAfterFile = new ReflectionMethod(FreshRSS_http_Util::class, 'getRetryAfterFile');
  8. $file = $getRetryAfterFile->invoke(null, $requestedUrl, '');
  9. self::assertIsString($file);
  10. self::assertTrue(touch($file, time() + 600));
  11. try {
  12. (new FreshRSS_Feed($storedUrl, validate: false))->load();
  13. self::fail('The feed was loaded during its Retry-After');
  14. } catch (FreshRSS_Feed_Exception $e) {
  15. self::assertStringContainsString('will first retry after', $e->getMessage());
  16. } finally {
  17. unlink($file);
  18. }
  19. }
  20. /** @return array<string,array{string,string}> */
  21. public static function provideStoredAndRequestedUrls(): array {
  22. // On a local network, where Retry-After is per URL
  23. return [
  24. 'HTML-encoded' => ['http://192.168.1.2/?action=display&amp;bridge=Example', 'http://192.168.1.2/?action=display&bridge=Example'],
  25. 'force_feed' => ['http://192.168.1.2/feed#force_feed', 'http://192.168.1.2/feed'],
  26. ];
  27. }
  28. }