Testovanie
Na otestovanie allow-listu bez HTTP odovzdajte explicitný request ako druhý argument QueryBuilder::for():
use Illuminate\Http\Request;
use RoundlyConsulting\QueryBuilder\QueryBuilder;
it('filters by status and sorts by views', function () {
Post::factory()->create(['title' => 'Alpha', 'status' => 'published', 'views' => 30]);
Post::factory()->create(['title' => 'Beta', 'status' => 'draft', 'views' => 10]);
Post::factory()->create(['title' => 'Gamma', 'status' => 'published', 'views' => 20]);
$titles = QueryBuilder::for(Post::class, Request::create('/?filter[status]=published&sort=-views'))
->allowedFilters('status')
->allowedSorts('views')
->get()
->pluck('title')
->all();
expect($titles)->toBe(['Alpha', 'Gamma']);
});Testy endpointov
Neznáme kľúče a neplatné veľkosti stránky sa prejavia ako bežné HTTP chyby, takže ich overte priamo na endpointe (tu PostController zo sekcie Zostavenie dopytu):
it('rejects a filter that is not allow-listed', function () {
$this->getJson('/posts?filter[secret]=1')
->assertStatus(400)
->assertJson([
'message' => 'Requested filter(s) `secret` are not allowed. Allowed filter(s) are `status, title`.',
]);
});
it('drops unknown filters in ignore mode', function () {
config()->set('query-builder.mode.unknown_filter', 'ignore');
$this->getJson('/posts?filter[secret]=1')->assertOk();
});
it('validates the page size', function () {
$this->getJson('/posts?per_page=500')->assertStatus(422);
});Testy spúšťajte proti každej databáze, na ktorú nasadzujete — textové vyhľadávanie používa na PostgreSQL ILIKE a inde LIKE, veľkosť písmen každý engine rieši inak a práve na PostgreSQL záleží na tvaroch hodnôt.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.