Skip to content

Commit b16e729

Browse files
committed
fixup! feat: allow to output null links for haljson also test embedded properties
1 parent a8f8281 commit b16e729

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

tests/Fixtures/TestBundle/ApiResource/Issue4372/RelatedEntity.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Metadata\ApiResource;
1818
use ApiPlatform\Metadata\Get;
1919
use ApiPlatform\Metadata\GetCollection;
20+
use Symfony\Component\Serializer\Annotation\Groups;
2021

2122
#[ApiResource(
2223
operations: [
@@ -27,5 +28,6 @@
2728
class RelatedEntity
2829
{
2930
#[ApiProperty(identifier: true)]
31+
#[Groups(['read'])]
3032
public ?int $id = null;
3133
}

tests/Fixtures/TestBundle/ApiResource/Issue4372/ToOneRelationPropertyMayBeNull.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use ApiPlatform\Serializer\AbstractItemNormalizer;
2222
use Doctrine\Common\Collections\ArrayCollection;
2323
use Doctrine\Common\Collections\Collection;
24+
use Symfony\Component\Serializer\Annotation\Groups;
2425

2526
#[ApiResource(
2627
operations: [
@@ -31,11 +32,15 @@
3132
uriTemplate: self::ITEM_ROUTE.'{._format}',
3233
normalizationContext: [
3334
AbstractItemNormalizer::SKIP_NULL_TO_ONE_RELATIONS => false,
35+
'groups' => ['default', 'read'],
3436
],
3537
provider: [self::class, 'provide']
3638
),
3739
new Get(
3840
uriTemplate: self::ITEM_SKIP_NULL_TO_ONE_RELATION_ROUTE.'{._format}',
41+
normalizationContext: [
42+
'groups' => ['default', 'read'],
43+
],
3944
provider: [self::class, 'provide']
4045
),
4146
],
@@ -48,17 +53,26 @@ class ToOneRelationPropertyMayBeNull
4853
public const ITEM_SKIP_NULL_TO_ONE_RELATION_ROUTE = self::SKIP_NULL_TO_ONE_RELATION_ROUTE.'/{id}';
4954
public const ENTITY_ID = 1;
5055

51-
/** @noinspection PhpPropertyOnlyWrittenInspection */
5256
#[ApiProperty(identifier: true)]
53-
private ?int $id = null; // @phpstan-ignore-line
57+
#[Groups(['read'])]
58+
public ?int $id = null;
5459

5560
#[ApiProperty]
5661
public ?RelatedEntity $relatedEntity = null;
5762

63+
#[ApiProperty(readableLink: true)]
64+
#[Groups(['read'])]
65+
public ?RelatedEntity $relatedEmbeddedEntity = null;
66+
5867
#[ApiProperty]
5968
public ?RelatedEntity $relatedEntity2 = null;
6069

70+
#[ApiProperty(readableLink: true)]
71+
#[Groups(['read'])]
72+
public ?RelatedEntity $relatedEmbeddedEntity2 = null;
73+
6174
#[ApiProperty]
75+
#[Groups(['read'])]
6276
public Collection $collection;
6377

6478
public function __construct()
@@ -76,6 +90,7 @@ public static function provide(Operation $operation, array $uriVariables = [], a
7690
$toOneRelationPropertyMayBeNull = new self();
7791
$toOneRelationPropertyMayBeNull->id = self::ENTITY_ID;
7892
$toOneRelationPropertyMayBeNull->relatedEntity2 = $relatedEntity1;
93+
$toOneRelationPropertyMayBeNull->relatedEmbeddedEntity2 = $relatedEntity1;
7994
$toOneRelationPropertyMayBeNull->collection = new ArrayCollection([$relatedEntity1, $relatedEntity2]);
8095

8196
return $toOneRelationPropertyMayBeNull;

tests/Functional/NotSkipNullToOneRelationTest.php

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,23 @@ public function testNullRelationsAreNotSkippedWhenConfigured(): void
6868

6969
$this->assertJsonEquals(
7070
[
71+
'_embedded' => [
72+
'relatedEmbeddedEntity' => null,
73+
'relatedEmbeddedEntity2' => [
74+
'_links' => [
75+
'self' => [
76+
'href' => '/related_entities/1',
77+
],
78+
],
79+
'id' => 1,
80+
],
81+
],
7182
'_links' => [
7283
'self' => [
73-
'href' => $itemIri,
84+
'href' => '/my-route/1',
7485
],
75-
'relatedEntity' => null,
76-
'relatedEntity2' => [
86+
'relatedEmbeddedEntity' => null,
87+
'relatedEmbeddedEntity2' => [
7788
'href' => '/related_entities/1',
7889
],
7990
],
@@ -95,6 +106,7 @@ public function testNullRelationsAreNotSkippedWhenConfigured(): void
95106
'id' => 2,
96107
],
97108
],
109+
'id' => 1,
98110
]
99111
);
100112
}
@@ -130,11 +142,21 @@ public function testNullRelationsAreSkippedByDefault(): void
130142

131143
$this->assertJsonEquals(
132144
[
145+
'_embedded' => [
146+
'relatedEmbeddedEntity2' => [
147+
'_links' => [
148+
'self' => [
149+
'href' => '/related_entities/1',
150+
],
151+
],
152+
'id' => 1,
153+
],
154+
],
133155
'_links' => [
134156
'self' => [
135-
'href' => $itemIri,
157+
'href' => '/skip-null-relation-route/1',
136158
],
137-
'relatedEntity2' => [
159+
'relatedEmbeddedEntity2' => [
138160
'href' => '/related_entities/1',
139161
],
140162
],
@@ -156,6 +178,7 @@ public function testNullRelationsAreSkippedByDefault(): void
156178
'id' => 2,
157179
],
158180
],
181+
'id' => 1,
159182
]
160183
);
161184
}

0 commit comments

Comments
 (0)