setUpHasPlanner(); $this->action = new SkipScheduledUserDishForDateAction(); } public function test_skips_scheduled_user_dish(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach($user); $date = Carbon::parse('2026-01-15'); $schedule = Schedule::create([ 'planner_id' => $planner->id, 'date' => $date->format('Y-m-d'), 'is_skipped' => false, ]); $userDish = $user->userDishes->first(); ScheduledUserDish::create([ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'user_dish_id' => $userDish->id, 'is_skipped' => false, ]); $result = $this->action->execute($planner, $date, $user->id); $this->assertTrue($result); $this->assertDatabaseHas(ScheduledUserDish::class, [ 'schedule_id' => $schedule->id, 'user_id' => $user->id, 'is_skipped' => true, 'user_dish_id' => null, ]); } public function test_returns_false_when_schedule_does_not_exist(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $date = Carbon::parse('2026-02-20'); $result = $this->action->execute($planner, $date, $user->id); $this->assertFalse($result); } public function test_returns_false_when_scheduled_user_dish_does_not_exist(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $date = Carbon::parse('2026-03-10'); Schedule::create([ 'planner_id' => $planner->id, 'date' => $date->format('Y-m-d'), 'is_skipped' => false, ]); $result = $this->action->execute($planner, $date, $user->id); $this->assertFalse($result); } public function test_only_skips_for_specified_user(): void { $planner = $this->planner; $user1 = User::factory()->planner($planner)->create(); $user2 = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach([$user1->id, $user2->id]); $date = Carbon::parse('2026-04-05'); $schedule = Schedule::create([ 'planner_id' => $planner->id, 'date' => $date->format('Y-m-d'), 'is_skipped' => false, ]); $user1Dish = $user1->userDishes->first(); $user2Dish = $user2->userDishes->first(); ScheduledUserDish::create([ 'schedule_id' => $schedule->id, 'user_id' => $user1->id, 'user_dish_id' => $user1Dish->id, 'is_skipped' => false, ]); ScheduledUserDish::create([ 'schedule_id' => $schedule->id, 'user_id' => $user2->id, 'user_dish_id' => $user2Dish->id, 'is_skipped' => false, ]); $this->action->execute($planner, $date, $user1->id); $this->assertDatabaseHas(ScheduledUserDish::class, [ 'user_id' => $user1->id, 'is_skipped' => true, ]); $this->assertDatabaseHas(ScheduledUserDish::class, [ 'user_id' => $user2->id, 'is_skipped' => false, ]); } }