app/tests/Unit/UserDish/Repositories/UserDishRepositoryTest.php

86 lines
3.1 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;
protected function setUp(): void
{
parent::setUp();
$this->setUpHasPlanner();
}
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]);
}
}