2025-10-13 14:57:11 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Tests\Unit\Actions;
|
|
|
|
|
|
|
|
|
|
use App\Models\Dish;
|
|
|
|
|
use App\Models\Schedule;
|
|
|
|
|
use App\Models\ScheduledUserDish;
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
use DishPlanner\Schedule\Actions\RegenerateScheduleDayForUserAction;
|
|
|
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
use Tests\Traits\HasPlanner;
|
|
|
|
|
|
|
|
|
|
class RegenerateScheduleDayForUserActionTest extends TestCase
|
|
|
|
|
{
|
|
|
|
|
use HasPlanner;
|
|
|
|
|
use RefreshDatabase;
|
|
|
|
|
|
2025-12-29 23:36:15 +01:00
|
|
|
protected function setUp(): void
|
|
|
|
|
{
|
|
|
|
|
parent::setUp();
|
|
|
|
|
$this->setUpHasPlanner();
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-13 14:57:11 +02:00
|
|
|
public function test_it_creates(): void
|
|
|
|
|
{
|
|
|
|
|
$date = now();
|
|
|
|
|
$planner = $this->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<Dish> $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<Dish> $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);
|
|
|
|
|
}
|
|
|
|
|
}
|