|
5 | 5 | use Illuminate\Support\Carbon; |
6 | 6 | use Illuminate\Support\Facades\DB; |
7 | 7 |
|
| 8 | +use Pest\Expectation; |
8 | 9 | use function PHPUnit\Framework\assertObjectHasProperty; |
9 | 10 |
|
10 | 11 | use Spatie\QueryBuilder\AllowedFilter; |
|
86 | 87 | ->where(DB::raw('LOWER(`test_models`.`name`)'), 'LIKE', 'john') |
87 | 88 | ->toSql(); |
88 | 89 |
|
89 | | - expect($queryBuilderSql)->toEqual($expectedSql); |
| 90 | + expect($queryBuilderSql)->toContain($expectedSql); |
90 | 91 | }); |
91 | 92 |
|
| 93 | +it('specifies escape character in supported databases', function (string $dbDriver) { |
| 94 | + $fakeConnection = "test_{$dbDriver}"; |
| 95 | + |
| 96 | + DB::connectUsing($fakeConnection, [ |
| 97 | + 'driver' => $dbDriver, |
| 98 | + 'database' => null, |
| 99 | + ]); |
| 100 | + |
| 101 | + DB::usingConnection($fakeConnection, function() use ($dbDriver){ |
| 102 | + $request = new Request([ |
| 103 | + 'filter' => ['name' => 'to_find'], |
| 104 | + ]); |
| 105 | + |
| 106 | + $queryBuilderSql = QueryBuilder::for(TestModel::select('id', 'name'), $request) |
| 107 | + ->allowedFilters('name', 'id') |
| 108 | + ->toSql(); |
| 109 | + |
| 110 | + expect($queryBuilderSql)->when(in_array($dbDriver, ["sqlite","pgsql","sqlsrv"]), fn(Expectation $query) => $query->toContain("ESCAPE '\'")); |
| 111 | + expect($queryBuilderSql)->when($dbDriver === 'mysql', fn(Expectation $query) => $query->not->toContain("ESCAPE '\'")); |
| 112 | + }); |
| 113 | +})->with(['sqlite', 'mysql', 'pgsql', 'sqlsrv']); |
| 114 | + |
92 | 115 | it('can filter results based on the existence of a property in an array', function () { |
93 | 116 | $results = createQueryFromFilterRequest([ |
94 | 117 | 'id' => '1,2', |
|
0 commit comments