|
|
@@ -0,0 +1,33 @@
|
|
|
+<?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);
|
|
|
+ }
|
|
|
+}
|