unique()->safeEmail(); self::$planner = Planner::factory()->create([ 'email' => self::$email, 'password' => Hash::make(self::$password), ]); // Create a user for this planner self::$user = User::factory()->create([ 'planner_id' => self::$planner->id, 'name' => 'Test User', ]); // Create a dish and assign to user self::$dish = Dish::factory()->create([ 'planner_id' => self::$planner->id, 'name' => 'Test Dish', ]); // Attach user to dish (creates UserDish) self::$dish->users()->attach(self::$user); } } protected function loginAsPlanner(Browser $browser): Browser { $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::$email) ->clear('input[id="password"]') ->type('input[id="password"]', self::$password) ->press('Login') ->waitForLocation('/dashboard', DuskTestCase::TIMEOUT_MEDIUM) ->pause(DuskTestCase::PAUSE_SHORT) ->visit('http://dishplanner_app:8000/schedule') ->pause(DuskTestCase::PAUSE_MEDIUM); } public function testCanGenerateScheduleWithUserAndDish(): void { $this->browse(function (Browser $browser) { $this->loginAsPlanner($browser); $browser->on(new SchedulePage) ->assertSee('Test User') // User should be in selection ->clickGenerate() ->pause(2000) // Verify schedule was generated by checking dish appears on calendar ->assertSee('Test Dish'); }); } public function testGeneratedScheduleShowsDishOnCalendar(): void { $this->browse(function (Browser $browser) { $this->loginAsPlanner($browser); $browser->on(new SchedulePage) ->clickGenerate() ->pause(2000) // The dish should appear somewhere on the calendar ->assertSee('Test Dish'); }); } public function testCanClearMonthSchedule(): void { $this->browse(function (Browser $browser) { $this->loginAsPlanner($browser); $browser->on(new SchedulePage) // First generate a schedule ->clickGenerate() ->pause(2000) ->assertSee('Test Dish') // Verify generated // Then clear it ->clickClearMonth() ->pause(1000) // After clearing, should see "No dishes scheduled" on calendar days ->assertSee('No dishes scheduled'); }); } public function testUserSelectionAffectsGeneration(): void { $this->browse(function (Browser $browser) { $this->loginAsPlanner($browser); $browser->on(new SchedulePage) // Verify the user checkbox is present ->assertSee('Test User') // User should be selected by default ->assertChecked("input[value='" . self::$user->id . "']"); }); } }