diff --git a/tests/Functional/Core/Repositories/RepositoryTest.php b/tests/Functional/Core/Repositories/RepositoryTest.php new file mode 100644 index 00000000..ead40fe9 --- /dev/null +++ b/tests/Functional/Core/Repositories/RepositoryTest.php @@ -0,0 +1,87 @@ + 'include']); + request()->merge(['include' => $include]); + User::factory() + ->has( + User::factory() + ->has(Book::factory(3)), + 'children', + )->has(Book::factory(3)) + ->createOne(); + $repository = new class extends UserRepository { + public function shouldEagerLoadIncludes(): bool + { + return true; + } + }; + + $result = $repository->all(); + + expect($result)->toBeInstanceOf(Collection::class) + ->each(function (Expectation $expectation) use ($userMustLoadRelations, $booksMustLoadRelations, $mustNotLoadRelations): void { + foreach ($userMustLoadRelations as $relation) { + $expectation->relationLoaded($relation)->toBeTrue(); + } + foreach ($booksMustLoadRelations as $relation) { + $expectation->books->each(function (Expectation $expectation) use ($relation): void { + $expectation->relationLoaded($relation)->toBeTrue(); + }); + } + foreach ($mustNotLoadRelations as $relation) { + $expectation->relationLoaded($relation)->toBeFalse(); + } + }); + })->with([ + 'single relation' => [ + 'books', + ['books'], + [], + ['children', 'parent'], + ], + 'works with duplicate include' => [ + 'books,books', + ['books'], + [], + ['children', 'parent'], + ], + 'multiple relations' => [ + 'books,children', + ['books', 'children'], + [], + ['parent'], + ], + 'single nested relation' => [ + 'books.author', + ['books'], + ['author'], + ['children', 'parent'], + ], + 'multiple nested relations' => [ + 'books.author.children,children.parent', + ['books', 'children'], + ['author'], + ['parent'], + ], + 'multiple and single nested relations' => [ + 'parent,books.author', + ['parent', 'books'], + ['author'], + ['children'], + ], + ]); +})->covers(Repository::class); diff --git a/tests/Unit/Core/Repositories/RepositoryTest.php b/tests/Unit/Core/Repositories/RepositoryTest.php index d58fa583..2b83a6b7 100644 --- a/tests/Unit/Core/Repositories/RepositoryTest.php +++ b/tests/Unit/Core/Repositories/RepositoryTest.php @@ -16,86 +16,6 @@ describe(class_basename(Repository::class), function (): void { describe('eager loading request includes', function (): void { - beforeEach(function (): void { - config(['fractal.auto_includes.request_key' => 'include']); - }); - - it('can eager load single relation include', function ( - string $include, - array $userMustLoadRelations, - array $booksMustLoadRelations, - array $mustNotLoadRelations, - ): void { - request()->merge(['include' => $include]); - User::factory() - ->has( - User::factory() - ->has(Book::factory(3)), - 'children', - )->has(Book::factory(3)) - ->createOne(); - $repository = new class extends UserRepository { - public function shouldEagerLoadIncludes(): bool - { - return true; - } - }; - - $result = $repository->all(); - - expect($result)->toBeInstanceOf(Collection::class) - ->each(function (Expectation $expectation) use ($userMustLoadRelations, $booksMustLoadRelations, $mustNotLoadRelations): void { - foreach ($userMustLoadRelations as $relation) { - $expectation->relationLoaded($relation)->toBeTrue(); - } - foreach ($booksMustLoadRelations as $relation) { - $expectation->books->each(function (Expectation $expectation) use ($relation): void { - $expectation->relationLoaded($relation)->toBeTrue(); - }); - } - foreach ($mustNotLoadRelations as $relation) { - $expectation->relationLoaded($relation)->toBeFalse(); - } - }); - })->with([ - 'single relation' => [ - 'books', - ['books'], - [], - ['children', 'parent'], - ], - 'works with duplicate include' => [ - 'books,books', - ['books'], - [], - ['children', 'parent'], - ], - 'multiple relations' => [ - 'books,children', - ['books', 'children'], - [], - ['parent'], - ], - 'single nested relation' => [ - 'books.author', - ['books'], - ['author'], - ['children', 'parent'], - ], - 'multiple nested relations' => [ - 'books.author.children,children.parent', - ['books', 'children'], - ['author'], - ['parent'], - ], - 'multiple and single nested relations' => [ - 'parent,books.author', - ['parent', 'books'], - ['author'], - ['children'], - ], - ]); - it('can eager load multiple includes', function (): void { User::factory() ->has(