setUpHasPlanner(); $this->action = new ClearScheduleForMonthAction(); } public function test_clears_scheduled_user_dishes_for_month(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach($user); $month = 1; $year = 2026; $daysInMonth = Carbon::createFromDate($year, $month, 1)->daysInMonth; (new GenerateScheduleForMonthAction())->execute($planner, $month, $year, [$user->id]); $this->assertEquals($daysInMonth, ScheduledUserDish::where('user_id', $user->id)->count()); $this->action->execute($planner, $month, $year, [$user->id]); $this->assertEquals(0, ScheduledUserDish::where('user_id', $user->id)->count()); $this->assertDatabaseCount(Schedule::class, $daysInMonth); } public function test_only_clears_specified_users(): 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]); $month = 2; $year = 2026; $daysInMonth = Carbon::createFromDate($year, $month, 1)->daysInMonth; (new GenerateScheduleForMonthAction())->execute($planner, $month, $year, [$user1->id, $user2->id]); $this->assertEquals($daysInMonth * 2, ScheduledUserDish::whereIn('user_id', [$user1->id, $user2->id])->count()); $this->action->execute($planner, $month, $year, [$user1->id]); $this->assertEquals($daysInMonth, ScheduledUserDish::whereIn('user_id', [$user1->id, $user2->id])->count()); $this->assertEquals(0, ScheduledUserDish::where('user_id', $user1->id)->count()); } public function test_does_not_affect_other_months(): void { $planner = $this->planner; $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $dish->users()->attach($user); $year = 2026; $janDays = Carbon::createFromDate($year, 1, 1)->daysInMonth; $febDays = Carbon::createFromDate($year, 2, 1)->daysInMonth; (new GenerateScheduleForMonthAction())->execute($planner, 1, $year, [$user->id]); (new GenerateScheduleForMonthAction())->execute($planner, 2, $year, [$user->id]); $this->assertEquals($janDays + $febDays, ScheduledUserDish::where('user_id', $user->id)->count()); $this->action->execute($planner, 1, $year, [$user->id]); $this->assertEquals($febDays, ScheduledUserDish::where('user_id', $user->id)->count()); } }