NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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 kryptomien

Odoslaní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.