From 9e22c23208943002eb69bc12eb45cd15ae5f1260 Mon Sep 17 00:00:00 2001 From: myrmidex Date: Sun, 28 Dec 2025 20:18:27 +0100 Subject: [PATCH] feature - 11 - Add login test --- app/Models/Planner.php | 4 +++ tests/Browser/LoginTest.php | 56 +++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 tests/Browser/LoginTest.php diff --git a/app/Models/Planner.php b/app/Models/Planner.php index 156f26c..e30ba9a 100644 --- a/app/Models/Planner.php +++ b/app/Models/Planner.php @@ -24,6 +24,10 @@ class Planner extends Authenticatable 'password', 'remember_token', ]; + protected $casts = [ + 'password' => 'hashed', + ]; + public function schedules(): HasMany { return $this->hasMany(Schedule::class); diff --git a/tests/Browser/LoginTest.php b/tests/Browser/LoginTest.php new file mode 100644 index 0000000..1c92ee3 --- /dev/null +++ b/tests/Browser/LoginTest.php @@ -0,0 +1,56 @@ +browse(function (Browser $browser) { + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(3000) + ->assertPathIs('/dashboard') + ->assertSee('Welcome Test User 20251228124357!') + ->assertAuthenticated() + ->visit('http://dishplanner_app:8000/logout'); + }); + } + + public function testLoginWithWrongCredentials(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'WrongPassword123!') + ->press('Login') + ->pause(2000) + ->assertPathIs('/login') + ->assertSee('These credentials do not match our records') + ->assertGuest(); + }); + } + + public function testLoginWithBlankFields(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->press('Login') + ->pause(2000) + ->assertPathIs('/login') + ->assertSee('The email field is required') + ->assertGuest(); + }); + } +} \ No newline at end of file