exists) { // Generate unique email for this test run self::$testEmail = fake()->unique()->safeEmail(); self::$testPlanner = \App\Models\Planner::factory()->create([ 'email' => self::$testEmail, 'password' => \Illuminate\Support\Facades\Hash::make(self::$testPassword), ]); } } protected function loginAndNavigate(Browser $browser, string $page = '/dashboard'): Browser { $this->ensureTestPlannerExists(); // Clear browser session and cookies to start fresh $browser->driver->manage()->deleteAllCookies(); return $browser->visit('http://dishplanner_app:8000/login') ->waitFor('input[id="email"]', DuskTestCase::TIMEOUT_SHORT) ->clear('input[id="email"]') ->type('input[id="email"]', self::$testEmail) ->clear('input[id="password"]') ->type('input[id="password"]', self::$testPassword) ->press('Sign In') ->waitForLocation('/dashboard', DuskTestCase::TIMEOUT_MEDIUM) // Wait for successful login redirect ->pause(DuskTestCase::PAUSE_SHORT) // Brief pause for any initialization ->visit('http://dishplanner_app:8000' . $page) ->pause(DuskTestCase::PAUSE_MEDIUM); // Let Livewire components initialize } protected function loginAndGoToDishes(Browser $browser): Browser { return $this->loginAndNavigate($browser, '/dishes'); } protected function loginAndGoToUsers(Browser $browser): Browser { return $this->loginAndNavigate($browser, '/users'); } protected function loginAndGoToSchedule(Browser $browser): Browser { return $this->loginAndNavigate($browser, '/schedule'); } }