81 lines
3 KiB
PHP
81 lines
3 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Tests\Unit\UserDish\Repositories;
|
||
|
|
|
||
|
|
use App\Models\Dish;
|
||
|
|
use App\Models\MinimumRecurrence;
|
||
|
|
use App\Models\Schedule;
|
||
|
|
use App\Models\ScheduledUserDish;
|
||
|
|
use App\Models\User;
|
||
|
|
use App\Models\UserDish;
|
||
|
|
use App\Models\UserDishRecurrence;
|
||
|
|
use DishPlanner\UserDish\Repositories\UserDishRepository;
|
||
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
|
|
use Tests\TestCase;
|
||
|
|
use Tests\Traits\HasPlanner;
|
||
|
|
|
||
|
|
class UserDishRepositoryTest extends TestCase
|
||
|
|
{
|
||
|
|
use HasPlanner;
|
||
|
|
use RefreshDatabase;
|
||
|
|
|
||
|
|
public function test_find_interfering_dishes(): void
|
||
|
|
{
|
||
|
|
$planner = $this->planner;
|
||
|
|
$user = User::factory()->planner($planner)->create();
|
||
|
|
$dishRecurring = Dish::factory()->planner($planner)->create();
|
||
|
|
$minimumRecurrence = MinimumRecurrence::factory()->days(5)->create();
|
||
|
|
UserDish::factory()->user($user)->dish(Dish::factory()->planner($planner)->create())->create();
|
||
|
|
$userDishRecurring = UserDish::factory()->user($user)->dish($dishRecurring)->create();
|
||
|
|
|
||
|
|
UserDishRecurrence::factory()
|
||
|
|
->userDish($userDishRecurring)
|
||
|
|
->recurrence($minimumRecurrence)
|
||
|
|
->create();
|
||
|
|
|
||
|
|
$date = now()->startOfDay()->addDays(2);
|
||
|
|
|
||
|
|
$schedule = Schedule::factory()->planner($planner)->date($date->copy()->addDays(2))->create();
|
||
|
|
ScheduledUserDish::factory()->userDish($userDishRecurring)->schedule($schedule)->create();
|
||
|
|
$this->actingAs($planner);
|
||
|
|
|
||
|
|
|
||
|
|
/** UserDishRepository $userDishRepository */
|
||
|
|
$userDishRepository = resolve(UserDishRepository::class);
|
||
|
|
$userDishes = $userDishRepository->findInterferingUserDishes($user, $date);
|
||
|
|
|
||
|
|
|
||
|
|
$this->assertCount(1, $userDishes);
|
||
|
|
$this->assertEquals($userDishRecurring->id, $userDishes->first()->id);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test_find_candidates_for_date(): void
|
||
|
|
{
|
||
|
|
$planner = $this->planner;
|
||
|
|
$user = User::factory()->planner($planner)->create();
|
||
|
|
$dishRecurring = Dish::factory()->planner($planner)->create();
|
||
|
|
$minimumRecurrence = MinimumRecurrence::factory()->days(5)->create();
|
||
|
|
$userDishPlain = UserDish::factory()->user($user)->dish(Dish::factory()->planner($planner)->create())->create();
|
||
|
|
$userDishRecurring = UserDish::factory()->user($user)->dish($dishRecurring)->create();
|
||
|
|
|
||
|
|
UserDishRecurrence::factory()
|
||
|
|
->userDish($userDishRecurring)
|
||
|
|
->recurrence($minimumRecurrence)
|
||
|
|
->create();
|
||
|
|
|
||
|
|
$date = now()->startOfDay()->addDays(2);
|
||
|
|
|
||
|
|
$schedule = Schedule::factory()->planner($planner)->date($date->copy()->addDays(2))->create();
|
||
|
|
ScheduledUserDish::factory()->userDish($userDishRecurring)->schedule($schedule)->create();
|
||
|
|
$this->actingAs($planner);
|
||
|
|
|
||
|
|
|
||
|
|
/** UserDishRepository $userDishRepository */
|
||
|
|
$userDishRepository = resolve(UserDishRepository::class);
|
||
|
|
$userDishes = $userDishRepository->findCandidatesForDate($user, $date);
|
||
|
|
|
||
|
|
|
||
|
|
$this->assertEquals($userDishes->pluck('id')->toArray(), [$userDishPlain->id]);
|
||
|
|
}
|
||
|
|
}
|