create(); $this->planner = $planner; } public function test_skip_day_opens_modal_and_persists_reason(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach($user); $date = now(); $schedule = Schedule::create([ 'planner_id' => $planner->id, 'date' => $date->format('Y-m-d'), 'is_skipped' => false, ]); $userDish = UserDish::query()->where('user_id', $user->id)->firstOrFail(); ScheduledUserDish::create([ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'user_dish_id' => $userDish->id, 'is_skipped' => false, ]); $this->actingAs($planner); Livewire::test(ScheduleCalendar::class) ->call('skipDay', $date->format('Y-m-d'), $user->id) ->assertSet('showSkipModal', true) ->assertSet('skipDate', $date->format('Y-m-d')) ->set('skipReason', 'eating out') ->call('confirmSkip') ->assertSee('eating out'); $this->assertDatabaseHas(ScheduledUserDish::class, [ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'is_skipped' => true, 'user_dish_id' => null, 'skip_reason' => 'eating out', ]); } public function test_skip_day_without_reason_persists_null(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach($user); $date = now(); $schedule = Schedule::create([ 'planner_id' => $planner->id, 'date' => $date->format('Y-m-d'), 'is_skipped' => false, ]); $userDish = UserDish::query()->where('user_id', $user->id)->firstOrFail(); ScheduledUserDish::create([ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'user_dish_id' => $userDish->id, 'is_skipped' => false, ]); $this->actingAs($planner); Livewire::test(ScheduleCalendar::class) ->call('skipDay', $date->format('Y-m-d'), $user->id) ->call('confirmSkip'); $this->assertDatabaseHas(ScheduledUserDish::class, [ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'is_skipped' => true, 'skip_reason' => null, ]); } }