Skip to content

Commit 09866d0

Browse files
committed
Add test
1 parent ef614d4 commit 09866d0

File tree

3 files changed

+73
-2
lines changed

3 files changed

+73
-2
lines changed

tests/Feature/Controllers/SearchIncludingRelationshipsOperationsTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public function test_getting_a_list_of_resources_including_relation_with_unautho
9090
'search' => [
9191
'includes' => [
9292
[
93-
'relation' => 'hasManyRelation.model',
93+
'relation' => 'hasManyRelation.belongsToRelation',
9494
],
9595
[
9696
'relation' => 'hasManyRelation',

tests/Feature/Controllers/SearchSelectingOperationsTest.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
use Illuminate\Support\Facades\Gate;
66
use Lomkit\Rest\Tests\Feature\TestCase;
7+
use Lomkit\Rest\Tests\Support\Database\Factories\HasManyRelationFactory;
78
use Lomkit\Rest\Tests\Support\Database\Factories\ModelFactory;
9+
use Lomkit\Rest\Tests\Support\Models\HasManyRelation;
810
use Lomkit\Rest\Tests\Support\Models\Model;
911
use Lomkit\Rest\Tests\Support\Policies\GreenPolicy;
1012
use Lomkit\Rest\Tests\Support\Rest\Resources\ModelResource;
@@ -89,4 +91,63 @@ public function test_getting_a_list_of_resources_selecting_two_fields(): void
8991
['id', 'number']
9092
);
9193
}
94+
95+
public function test_getting_a_list_of_resources_deep_selecting_fields(): void
96+
{
97+
$matchingModel = ModelFactory::new()->has(HasManyRelationFactory::new()->count(2), 'hasManyRelation')->create()->fresh();
98+
$matchingModel2 = ModelFactory::new()->create()->fresh();
99+
100+
Gate::policy(Model::class, GreenPolicy::class);
101+
Gate::policy(HasManyRelation::class, GreenPolicy::class);
102+
103+
$response = $this->post(
104+
'/api/models/search',
105+
[
106+
'search' => [
107+
'selects' => [
108+
['field' => 'id'],
109+
],
110+
'includes' => [
111+
[
112+
'relation' => 'hasManyRelation',
113+
'selects' => [
114+
['field' => 'id']
115+
],
116+
'includes' => [
117+
[
118+
'relation' => 'model',
119+
'selects' => [
120+
['field' => 'id'],
121+
]
122+
]
123+
]
124+
],
125+
]
126+
],
127+
],
128+
['Accept' => 'application/json']
129+
);
130+
131+
$this->assertResourcePaginated(
132+
$response,
133+
[$matchingModel, $matchingModel2],
134+
new ModelResource(),
135+
[
136+
[
137+
'has_many_relation' => $matchingModel->hasManyRelation()
138+
->orderBy('id')
139+
->with('model:id')
140+
->get()
141+
->map(function ($relation) {
142+
$relation->model = $relation->model->toArray();
143+
return $relation->only(['id', 'model']);
144+
})->toArray(),
145+
],
146+
[
147+
'has_many_relation' => [],
148+
],
149+
],
150+
['id', 'has_many_relation']
151+
);
152+
}
92153
}

tests/Support/Rest/Resources/HasManyResource.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Lomkit\Rest\Concerns\Resource\DisableGates;
66
use Lomkit\Rest\Http\Requests\RestRequest;
77
use Lomkit\Rest\Http\Resource;
8+
use Lomkit\Rest\Relations\BelongsTo;
89
use Lomkit\Rest\Tests\Support\Models\HasManyRelation;
910

1011
class HasManyResource extends Resource
@@ -14,7 +15,9 @@ class HasManyResource extends Resource
1415

1516
public function relations(RestRequest $request): array
1617
{
17-
return [];
18+
return [
19+
BelongsTo::make('model', ModelResource::class),
20+
];
1821
}
1922

2023
public function fields(RestRequest $request): array
@@ -24,4 +27,11 @@ public function fields(RestRequest $request): array
2427
'number',
2528
];
2629
}
30+
31+
public function defaultOrderBy(RestRequest $request): array
32+
{
33+
return [
34+
'id' => 'asc',
35+
];
36+
}
2737
}

0 commit comments

Comments
 (0)