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

Requests::fake() podstrčí zaznamenávajúci fake za fasádu aj do kontajnera a vráti ho, takže naň narazí fasáda, fluentný builder aj každý RequestManager injektovaný cez konštruktor. Volania, ktoré menia stav, sa len zaznamenajú a databázy sa nedotknú — netreba ani ručné Event::fake(); canTransition() odpovedá naozaj:

use RoundlyConsulting\Requests\Facades\Requests;

it('submits an expense claim', function () {
    $fake = Requests::fake();
    $alice = User::factory()->create();

    $request = Requests::make()->title('Expense')->create();
    Requests::approve($request, $alice, 'Within budget');

    $fake->assertCreated(1);
    $fake->assertApproved($request, $alice, 'Within budget');   // or Requests::assertApproved(...)
    $fake->assertNothingRejected();
});

it('submits nothing when the form is invalid', function () {
    $fake = Requests::fake();

    // …

    $fake->assertNothingCreated();
});

Všetky asercie

AserciaPrejde, keď
assertCreated(?int $times = null)bola vytvorená aspoň jedna žiadosť — alebo presne $times.
assertNothingCreated()nebola vytvorená žiadna žiadosť.
assertApproved(Request, ?Model $actor, ?string $reason)pre žiadosť bolo zavolané approve() — ak sú zadané, tak daným aktérom a s daným dôvodom.
assertNothingApproved()approve() nebolo zavolané ani raz.
assertRejected(Request, ?Model $actor, ?string $reason)to isté pre reject().
assertNothingRejected()reject() nebolo zavolané ani raz.
assertReopened(Request, ?Model $actor, ?string $reason)to isté pre reopen().
assertNothingReopened()reopen() nebolo zavolané ani raz.
assertCancelled(Request)pre žiadosť bolo zavolané cancel().
assertNothingCancelled()cancel() nebolo zavolané ani raz.
assertExpired(Request)pre žiadosť bolo zavolané expire().
assertNothingExpired()expire() nebolo zavolané ani raz.
assertExpiredDue(?bool $dryRun = null)prebehlo expireDue() — ak je zadaný, tak s daným príznakom skúšobného behu.
assertNothingExpiredDue()expireDue() neprebehlo ani raz.
$fake = Requests::fake();

$fake->assertCreated();                           // at least one — or assertCreated(2) for exactly two
$fake->assertApproved($request);                  // actor and reason are optional filters
$fake->assertRejected($request, $carol, 'Out of policy');
$fake->assertReopened($request, $alice);
$fake->assertCancelled($request);
$fake->assertExpired($request);
$fake->assertExpiredDue();                        // expireDue() ran
$fake->assertExpiredDue(dryRun: true);            // …as a dry run

// Every assertion has a negative twin
$fake->assertNothingCreated();
$fake->assertNothingApproved();
$fake->assertNothingRejected();
$fake->assertNothingReopened();
$fake->assertNothingCancelled();
$fake->assertNothingExpired();
$fake->assertNothingExpiredDue();

Asercie zavoláte aj staticky na fasáde. create() na fake vráti neuložený Request naplnený stavom, typom, názvom, popisom a termínom a approve(), reject() a reopen() zaznamenajú aj odovzdaný dôvod. expireDue() vráti počet žiadostí po termíne, no žiadnu neexpiruje — takže sa zaznamená aj requests:expire spustený pod fakom.

Stavy factory

Model Request má factory so stavom pre každý status a pomocníkmi pre schvaľovateľov a autorov. requiring() uloží iba id schvaľovateľov — schvaľovaciu požiadavku neotvorí:

use RoundlyConsulting\Requests\Models\Request;

Request::factory()->pending()->create();
Request::factory()->approved()->create();
Request::factory()->rejected()->create();
Request::factory()->cancelled()->create();
Request::factory()->expired()->create();                       // New, expires_at yesterday
Request::factory()->requiring([$alice->id, $bob->id])->create();
Request::factory()->authoredBy($user)->create();

Proti skutočnému enginu

Pri integračných testoch načítajte migrácie balíka aj schvaľovacieho enginu a spustite skutočný tok:

use RoundlyConsulting\Requests\Enums\Status;
use RoundlyConsulting\Requests\Facades\Requests;
use RoundlyConsulting\Requests\Models\Request;

it('approves once both managers sign off', function () {
    $alice = User::factory()->create();
    $bob = User::factory()->create();

    $request = Requests::make()->requireApprovalsFrom([$alice, $bob])->create();

    Requests::approve($request, $alice);
    expect($request->fresh()->status)->toBe(Status::New);

    Requests::approve($request, $bob);
    expect($request->fresh()->status)->toBe(Status::Approved);
});

it('expires stale requests', function () {
    Request::factory()->expired()->create();

    $this->artisan('requests:expire')
        ->expectsOutput('Expired 1 request(s).')
        ->assertSuccessful();
});

Vlastné testy balíka spustíte príkazom:

composer test

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.