107 lines
3.2 KiB
PHP
107 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Schedule;
|
|
|
|
use App\Livewire\Schedule\ScheduleCalendar;
|
|
use App\Models\Dish;
|
|
use App\Models\Planner;
|
|
use App\Models\Schedule;
|
|
use App\Models\ScheduledUserDish;
|
|
use App\Models\User;
|
|
use App\Models\UserDish;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
class ScheduleCalendarTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
protected Planner $planner;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
/** @var Planner $planner */
|
|
$planner = Planner::factory()->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,
|
|
]);
|
|
}
|
|
}
|