| 123456789101112131415161718192021222324252627282930313233 |
- <?php
- declare(strict_types=1);
- use PHPUnit\Framework\Attributes\DataProvider;
- final class BooleanSearchTest extends \PHPUnit\Framework\TestCase {
- /**
- * `FreshRSS_BooleanSearch::prepend()` is used to restrict an existing search with an extra condition,
- * such as the maximum publication date of the “mark as read → articles older than one day/week” action.
- * @return list<array{string,string,list<string|int>}>
- */
- public static function providePrependMaxPubdate(): array {
- return [
- ['', '(e.date <= ?)', [1700000000]],
- ['intitle:sale', '(e.date <= ?) AND ((e.title LIKE ?))', [1700000000, '%sale%']],
- ['intitle:a OR intitle:b', '(e.date <= ?) AND ((e.title LIKE ?) OR (e.title LIKE ?))', [1700000000, '%a%', '%b%']],
- ];
- }
- /** @param list<string|int> $expectedValues */
- #[DataProvider('providePrependMaxPubdate')]
- public function test_prepend_restrictsTheSearchInsteadOfWideningIt(string $input, string $expectedSql, array $expectedValues): void {
- $booleanSearch = new FreshRSS_BooleanSearch($input);
- $maxPubdate = new FreshRSS_Search('');
- $maxPubdate->setMaxPubdate(1700000000);
- $booleanSearch->prepend($maxPubdate);
- [$values, $sql] = FreshRSS_EntryDAO::sqlBooleanSearch('e.', $booleanSearch);
- self::assertSame($expectedSql, trim($sql));
- self::assertSame($expectedValues, $values);
- }
- }
|