Skip to content

Commit 5d49d01

Browse files
committed
Add ContentNodeCollectionProvider to all ContentNode-Entities
1 parent 44f6644 commit 5d49d01

18 files changed

+729
-85
lines changed

api/src/Entity/ContentNode/ChecklistNode.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use App\Entity\ContentNode;
1414
use App\Repository\ChecklistNodeRepository;
1515
use App\State\ContentNode\ChecklistNodePersistProcessor;
16+
use App\State\ContentNodeCollectionProvider;
1617
use App\Util\EntityMap;
1718
use App\Validator\ChecklistItem\AssertBelongsToSameCamp;
1819
use Doctrine\Common\Collections\ArrayCollection;
@@ -36,7 +37,8 @@
3637
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3738
),
3839
new GetCollection(
39-
security: 'is_authenticated()'
40+
security: 'is_authenticated()',
41+
provider: ContentNodeCollectionProvider::class
4042
),
4143
new Post(
4244
processor: ChecklistNodePersistProcessor::class,

api/src/Entity/ContentNode/ColumnLayout.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use App\Entity\SupportsContentNodeChildren;
1414
use App\Repository\ColumnLayoutRepository;
1515
use App\State\ContentNode\ContentNodePersistProcessor;
16+
use App\State\ContentNodeCollectionProvider;
1617
use App\Validator\AssertJsonSchema;
1718
use App\Validator\ColumnLayout\AssertColumWidthsSumTo12;
1819
use App\Validator\ColumnLayout\AssertNoOrphanChildren;
@@ -38,7 +39,8 @@
3839
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3940
),
4041
new GetCollection(
41-
security: 'is_authenticated()'
42+
security: 'is_authenticated()',
43+
provider: ContentNodeCollectionProvider::class
4244
),
4345
new Post(
4446
processor: ContentNodePersistProcessor::class,

api/src/Entity/ContentNode/MaterialNode.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use App\Entity\MaterialItem;
1414
use App\Repository\MaterialNodeRepository;
1515
use App\State\ContentNode\ContentNodePersistProcessor;
16+
use App\State\ContentNodeCollectionProvider;
1617
use App\Util\EntityMap;
1718
use Doctrine\Common\Collections\ArrayCollection;
1819
use Doctrine\Common\Collections\Collection;
@@ -36,7 +37,8 @@
3637
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3738
),
3839
new GetCollection(
39-
security: 'is_authenticated()'
40+
security: 'is_authenticated()',
41+
provider: ContentNodeCollectionProvider::class
4042
),
4143
new Post(
4244
processor: ContentNodePersistProcessor::class,

api/src/Entity/ContentNode/MultiSelect.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use App\Repository\MultiSelectRepository;
1414
use App\State\ContentNode\ContentNodePersistProcessor;
1515
use App\State\ContentNode\MultiSelectCreateProcessor;
16+
use App\State\ContentNodeCollectionProvider;
1617
use App\Validator\AssertJsonSchema;
1718
use Doctrine\ORM\Mapping as ORM;
1819
use Symfony\Component\Serializer\Annotation\Groups;
@@ -34,7 +35,8 @@
3435
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null' // disallow delete when contentNode is a root node
3536
),
3637
new GetCollection(
37-
security: 'is_authenticated()'
38+
security: 'is_authenticated()',
39+
provider: ContentNodeCollectionProvider::class
3840
),
3941
new Post(
4042
processor: MultiSelectCreateProcessor::class,

api/src/Entity/ContentNode/ResponsiveLayout.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use App\Entity\SupportsContentNodeChildren;
1414
use App\Repository\ResponsiveLayoutRepository;
1515
use App\State\ContentNode\ContentNodePersistProcessor;
16+
use App\State\ContentNodeCollectionProvider;
1617
use App\Validator\AssertJsonSchema;
1718
use App\Validator\ColumnLayout\AssertNoOrphanChildren;
1819
use Doctrine\Common\Collections\ArrayCollection;
@@ -37,7 +38,8 @@
3738
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3839
),
3940
new GetCollection(
40-
security: 'is_authenticated()'
41+
security: 'is_authenticated()',
42+
provider: ContentNodeCollectionProvider::class
4143
),
4244
new Post(
4345
processor: ContentNodePersistProcessor::class,

api/src/Entity/ContentNode/SingleText.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use App\Entity\ContentNode;
1313
use App\Repository\SingleTextRepository;
1414
use App\State\ContentNode\SingleTextPersistProcessor;
15+
use App\State\ContentNodeCollectionProvider;
1516
use App\Validator\AssertJsonSchema;
1617
use Doctrine\ORM\Mapping as ORM;
1718
use Symfony\Component\Serializer\Annotation\Groups;
@@ -33,7 +34,8 @@
3334
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3435
),
3536
new GetCollection(
36-
security: 'is_authenticated()'
37+
security: 'is_authenticated()',
38+
provider: ContentNodeCollectionProvider::class
3739
),
3840
new Post(
3941
processor: SingleTextPersistProcessor::class,

api/src/Entity/ContentNode/Storyboard.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use App\Entity\ContentNode;
1313
use App\Repository\StoryboardRepository;
1414
use App\State\ContentNode\StoryboardPersistProcessor;
15+
use App\State\ContentNodeCollectionProvider;
1516
use App\Validator\AssertJsonSchema;
1617
use Doctrine\ORM\Mapping as ORM;
1718
use Symfony\Component\Serializer\Annotation\Groups;
@@ -33,7 +34,8 @@
3334
security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
3435
),
3536
new GetCollection(
36-
security: 'is_authenticated()'
37+
security: 'is_authenticated()',
38+
provider: ContentNodeCollectionProvider::class
3739
),
3840
new Post(
3941
processor: StoryboardPersistProcessor::class,

api/tests/Api/SnapshotTests/EndpointPerformanceTest.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function testPerformanceDidNotChangeForStableEndpoints() {
4545
}
4646

4747
if (!str_contains($collectionEndpoint, '/content_node')) {
48-
$fixtureFor = $this->getFixtureFor($collectionEndpoint);
48+
$fixtureFor = self::getFixtureFor($collectionEndpoint);
4949
list($statusCode, $queryCount, $executionTimeSeconds) = $this->measurePerformanceFor("{$collectionEndpoint}/{$fixtureFor->getId()}");
5050
$responseCodes["{$collectionEndpoint}/item"] = $statusCode;
5151
$numberOfQueries["{$collectionEndpoint}/item"] = $queryCount;
@@ -94,7 +94,8 @@ public function testNumberOfQueriesDidNotChangeForContentNodeCollectionEndpoints
9494
if ('test' !== $this->getEnvironment()) {
9595
self::markTestSkipped(__FUNCTION__.' is only run in test environment, not in '.$this->getEnvironment());
9696
}
97-
list($statusCode, $queryCount, $executionTimeSeconds) = $this->measurePerformanceFor($collectionEndpoint);
97+
list($statusCode, $queryCount, $executionTimeSeconds)
98+
= $this->measurePerformanceFor($collectionEndpoint.'?camp=/camps/'.self::getFixtureFor('/camps')->getId());
9899

99100
assertThat($statusCode, equalTo(200));
100101

@@ -127,7 +128,7 @@ public function testNumberOfQueriesDidNotChangeForContentNodeItemEndpoints(strin
127128
if ('/content_nodes' === $collectionEndpoint) {
128129
self::markTestSkipped("{$collectionEndpoint} does not support get item endpoint");
129130
}
130-
$fixtureFor = $this->getFixtureFor($collectionEndpoint);
131+
$fixtureFor = self::getFixtureFor($collectionEndpoint);
131132
list($statusCode, $queryCount, $executionTimeSeconds) = $this->measurePerformanceFor("{$collectionEndpoint}/{$fixtureFor->getId()}");
132133

133134
assertThat($statusCode, equalTo(200));
@@ -198,19 +199,19 @@ protected function getSnapshotId(): string {
198199
private static function getContentNodeEndpointQueryCountRanges(): array {
199200
return [
200201
'/content_nodes' => [13, 15],
201-
'/content_node/column_layouts' => [6, 6],
202+
'/content_node/column_layouts' => [7, 7],
202203
'/content_node/column_layouts/item' => [9, 9],
203204
'/content_node/checklist_nodes' => [6, 7],
204205
'/content_node/checklist_nodes/item' => [9, 9],
205206
'/content_node/material_nodes' => [6, 7],
206207
'/content_node/material_nodes/item' => [9, 9],
207-
'/content_node/multi_selects' => [6, 7],
208+
'/content_node/multi_selects' => [7, 8],
208209
'/content_node/multi_selects/item' => [9, 9],
209-
'/content_node/responsive_layouts' => [6, 6],
210+
'/content_node/responsive_layouts' => [7, 7],
210211
'/content_node/responsive_layouts/item' => [9, 9],
211-
'/content_node/single_texts' => [6, 7],
212+
'/content_node/single_texts' => [7, 8],
212213
'/content_node/single_texts/item' => [9, 9],
213-
'/content_node/storyboards' => [6, 7],
214+
'/content_node/storyboards' => [7, 8],
214215
'/content_node/storyboards/item' => [9, 9],
215216
];
216217
}
@@ -291,7 +292,7 @@ private function getSubresourceUrls(): array {
291292
];
292293
}
293294

294-
private function getFixtureFor(string $collectionEndpoint) {
295+
private static function getFixtureFor(string $collectionEndpoint) {
295296
$fixtures = FixtureStore::getFixtures();
296297

297298
return ReadItemFixtureMap::get($collectionEndpoint, $fixtures);

api/tests/Api/SnapshotTests/ResponseSnapshotTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ public static function getCollectionEndpoints() {
117117
'/auth/reset_password' => false,
118118
'/auth/resend_activation' => false,
119119
'/content_nodes' => false,
120+
'/content_node/checklist_nodes' => false,
121+
'/content_node/column_layouts' => false,
122+
'/content_node/material_nodes' => false,
123+
'/content_node/multi_selects' => false,
124+
'/content_node/responsive_layouts' => false,
125+
'/content_node/single_texts' => false,
126+
'/content_node/storyboards' => false,
120127
'/checklist_items' => false,
121128
'/invitations' => false,
122129
'/material_items' => false,
@@ -153,6 +160,13 @@ public static function getCollectionEndpointsFiltered() {
153160

154161
return [
155162
[$client, '/content_nodes?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
163+
[$client, '/content_node/checklist_nodes?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
164+
[$client, '/content_node/column_layouts?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
165+
[$client, '/content_node/material_nodes?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
166+
[$client, '/content_node/multi_selects?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
167+
[$client, '/content_node/responsive_layouts?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
168+
[$client, '/content_node/single_texts?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
169+
[$client, '/content_node/storyboards?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
156170
[$client, '/checklist_items?checklist=/checklists/'.self::getFixtureFor('/checklists')->getId()],
157171
[$client, '/material_items?camp=/camps/'.self::getFixtureFor('/camps')->getId()],
158172
];

api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set 1__1.json

Lines changed: 19 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,94 +3,60 @@
33
"items": [
44
{
55
"_links": {
6-
"checklist": {
6+
"checklistItems": {
77
"href": "escaped_value"
88
},
9-
"checklistNodes": [],
109
"children": [],
11-
"parent": {
10+
"contentType": {
1211
"href": "escaped_value"
1312
},
14-
"self": {
13+
"parent": {
1514
"href": "escaped_value"
16-
}
17-
},
18-
"id": "escaped_value",
19-
"position": "escaped_value",
20-
"text": "escaped_value"
21-
},
22-
{
23-
"_links": {
24-
"checklist": {
15+
},
16+
"root": {
2517
"href": "escaped_value"
2618
},
27-
"checklistNodes": [],
28-
"children": [
29-
{
30-
"href": "escaped_value"
31-
}
32-
],
33-
"parent": "escaped_value",
3419
"self": {
3520
"href": "escaped_value"
3621
}
3722
},
23+
"contentTypeName": "escaped_value",
24+
"data": "escaped_value",
3825
"id": "escaped_value",
26+
"instanceName": "escaped_value",
3927
"position": "escaped_value",
40-
"text": "escaped_value"
28+
"slot": "escaped_value"
4129
},
4230
{
4331
"_links": {
44-
"checklist": {
32+
"checklistItems": {
4533
"href": "escaped_value"
4634
},
47-
"checklistNodes": [],
48-
"children": [
49-
{
50-
"href": "escaped_value"
51-
}
52-
],
53-
"parent": {
35+
"children": [],
36+
"contentType": {
5437
"href": "escaped_value"
5538
},
56-
"self": {
39+
"parent": {
5740
"href": "escaped_value"
58-
}
59-
},
60-
"id": "escaped_value",
61-
"position": "escaped_value",
62-
"text": "escaped_value"
63-
},
64-
{
65-
"_links": {
66-
"checklist": {
41+
},
42+
"root": {
6743
"href": "escaped_value"
6844
},
69-
"checklistNodes": [
70-
{
71-
"href": "escaped_value"
72-
}
73-
],
74-
"children": [],
75-
"parent": "escaped_value",
7645
"self": {
7746
"href": "escaped_value"
7847
}
7948
},
49+
"contentTypeName": "escaped_value",
50+
"data": "escaped_value",
8051
"id": "escaped_value",
52+
"instanceName": "escaped_value",
8153
"position": "escaped_value",
82-
"text": "escaped_value"
54+
"slot": "escaped_value"
8355
}
8456
]
8557
},
8658
"_links": {
8759
"items": [
88-
{
89-
"href": "escaped_value"
90-
},
91-
{
92-
"href": "escaped_value"
93-
},
9460
{
9561
"href": "escaped_value"
9662
},

0 commit comments

Comments
 (0)