planner; $dishes = Dish::factory()->planner($planner)->count(30)->create(); $schedule = Schedule::factory()->planner($planner)->date($date)->create(); $user = User::factory()->planner($planner)->create(); $user->dishes()->attach($dishes); $this->assertEmpty($schedule->scheduledUserDishes); resolve(RegenerateScheduleDayForUserAction::class)->execute($planner, $schedule, $user, true); $expectedSchedule = Schedule::where('date', $date->format('Y-m-d'))->first(); $this->assertCount(1, $expectedSchedule->scheduledUserDishes); $scheduledUserDish = ScheduledUserDish::all()->first(); $this->assertNotNull($scheduledUserDish); $this->assertNotNull($scheduledUserDish->userDish->id); } public function test_it_updates_if_overwrite_is_true(): void { $planner = $this->planner; /** @var Collection $dishes */ $dishes = Dish::factory()->planner($planner)->count(30)->create(); $schedule = Schedule::factory()->planner($planner)->create(); $user = User::factory()->planner($planner)->create(); $user->dishes()->attach($dishes); $startingDish = $user->userDishes->random(); ScheduledUserDish::factory() ->schedule($schedule) ->userDish($startingDish) ->create(); $this->assertCount(1, $schedule->refresh()->scheduledUserDishes); resolve(RegenerateScheduleDayForUserAction::class)->execute($planner, $schedule, $user, true); $schedule->refresh(); $this->assertCount(1, $schedule->scheduledUserDishes); $scheduledUserDish = ScheduledUserDish::all()->first(); $this->assertNotNull($scheduledUserDish); $this->assertNotNull($scheduledUserDish->userDish); $this->assertNotEquals($startingDish->id, $scheduledUserDish->userDish->id); // TODO Flaky test } public function test_it_does_not_update_if_overwrite_is_false(): void { $planner = $this->planner; /** @var Collection $dishes */ $dishes = Dish::factory()->planner($planner)->count(30)->create(); $schedule = Schedule::factory()->planner($planner)->create(); $user = User::factory()->planner($planner)->create(); $user->dishes()->attach($dishes); $startingUserDish = $user->userDishes->random(); ScheduledUserDish::factory() ->schedule($schedule) ->userDish($startingUserDish) ->create(); $this->assertCount(1, $schedule->refresh()->scheduledUserDishes); resolve(RegenerateScheduleDayForUserAction::class)->execute($planner, $schedule, $user, false); $schedule->refresh(); $this->assertCount(1, $schedule->scheduledUserDishes); $scheduledUserDish = ScheduledUserDish::all()->first(); $this->assertNotNull($scheduledUserDish); $this->assertEquals($startingUserDish->id, $scheduledUserDish->userDish->id); } }