Cześć, nie jestem pewien czy mój sposób testowania aplikacji ma sens, ale opisze mniej więcej jak to wygląda:
-
Mam zrobione Unit testy, gdzie testuje każdą funkcjonalność modelu itp.
-
Mam zrobione "Feature" testy, gdzie testuje kontroller, validacje itp. pomijajac permissje ( uzywam traita WithoutMiddleware) wiec testy przechodzą normalnie.
-
Kolejny etap to testy z użyciem duska.
Jak to wygląda:
-
w setUp seeduje role i permisje
-
tworze rawUser ( użytkownik bez żadnych praw związanych z testem, posiada jedynie do panelu administracyjnego)
-
tworze usera ktory ma prawo do wykonania operacji.
-
loguje jako userRaw, wykonuje operacje i zakładam ze się nie powiedzie.
-
loguje jako user, ktory wykonuje operacje i się powiedzie, ponieważ ma odpowiednie uprawnienia.
Poniżej przestawiam przykładowy test edycji usługi w panelu administracyjnym.
public function it_can_edit_service()
{
$this->user->addPermission('edit-services');
$service = create(Service::class);
$uri = uri('panel.services.edit', $service);
$this->browse(function(Browser $first, Browser $second) use ($uri) {
$first->loginAs($this->rawUser)
->visit($uri)
->type('name', 'foo')
->type('price', 123)
->select('type')
->press('Zapisz zmiany')
->assertSee('Nie posiadasz odpowiednich uprawnien by wykonać tą operacje.');
$second->loginAs($this->user)
->visit($uri)
->type('name', 'foo')
->type('price', 123)
->select('type')
->press('Zapisz zmiany')
->assertSee('Usługa została poprawnie zaktualizowana.');
});
}