diff --git a/tests/Browser/Auth/LogoutTest.php b/tests/Browser/Auth/LogoutTest.php new file mode 100644 index 0000000..32d7a9e --- /dev/null +++ b/tests/Browser/Auth/LogoutTest.php @@ -0,0 +1,31 @@ +assertPathIs('/login') + ->assertSee('Sign In'); +}); + +it('blocks protected routes after logging out', function (string $path) { + $page = loginAs(createPlanner()); + + logout($page) + ->assertPathIs('/login') + ->navigate($path) + ->assertPathIs('/login') + ->assertSee('Sign In'); +})->with(['/dashboard', '/dishes', '/schedule', '/users']); + +it('does not restore an authenticated view via the back button', function () { + $planner = createPlanner(); + + $page = loginAs($planner)->assertSee($planner->name); + + logout($page) + ->assertPathIs('/login') + ->back() + ->assertPathIs('/login') + ->assertDontSee('Logout'); +}); diff --git a/tests/Pest.php b/tests/Pest.php index 7963c18..3a1d216 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -3,6 +3,7 @@ use App\Models\Planner; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Hash; +use Pest\Browser\Api\AwaitableWebpage; use Pest\Browser\Api\Webpage; use Tests\BrowserTestCase; use Tests\TestCase; @@ -62,3 +63,15 @@ function loginAndGoToSchedule() { return loginAs(createPlanner(), '/schedule'); } + +/** + * Open the account dropdown and submit the logout form. + * + * @return Webpage + */ +function logout(Webpage|AwaitableWebpage $page) +{ + return $page + ->click('button[\@click="open = !open"]') + ->click('.sm\:flex form[action$="/logout"] button[type="submit"]'); +}