dishplanner/tests/Feature/Schedule/ScheduleCalendarTest.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,
]);
}
}