Skip to content

Commit 2f8a680

Browse files
committed
test: add nested property test for uuidfilter
@see api-platform#7628 (comment)
1 parent c8493bb commit 2f8a680

9 files changed

Lines changed: 158 additions & 8 deletions

tests/Fixtures/TestBundle/Entity/Uuid/RamseyUuidBinaryDevice.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,16 @@ class RamseyUuidBinaryDevice
4141
#[ORM\Column(type: 'uuid_binary', unique: true)]
4242
public UuidInterface $id;
4343

44-
public function __construct(?UuidInterface $id = null)
44+
#[ORM\Column(type: 'uuid_binary')]
45+
public UuidInterface $externalId;
46+
47+
#[ORM\Column(type: 'uuid_binary')]
48+
public UuidInterface $nameConverted;
49+
50+
public function __construct(?UuidInterface $id = null, ?UuidInterface $externalId = null, ?UuidInterface $nameConverted = null)
4551
{
4652
$this->id = $id ?? Uuid::uuid7();
53+
$this->externalId = $externalId ?? Uuid::uuid7();
54+
$this->nameConverted = $nameConverted ?? Uuid::uuid7();
4755
}
4856
}

tests/Fixtures/TestBundle/Entity/Uuid/RamseyUuidBinaryDeviceEndpoint.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@
3333
'myDevice' => new QueryParameter(
3434
filter: new UuidBinaryFilter(),
3535
),
36+
'myDevice.externalId' => new QueryParameter(
37+
filter: new UuidBinaryFilter(),
38+
property: 'myDevice.externalId',
39+
),
40+
'name_converted.name_converted' => new QueryParameter(
41+
filter: new UuidBinaryFilter(),
42+
property: 'nameConverted.nameConverted',
43+
),
3644
]
3745
),
3846
new Post(),
@@ -47,9 +55,13 @@ class RamseyUuidBinaryDeviceEndpoint
4755
#[ORM\ManyToOne]
4856
public ?RamseyUuidBinaryDevice $myDevice = null;
4957

50-
public function __construct(?UuidInterface $id = null, ?RamseyUuidBinaryDevice $myDevice = null)
58+
#[ORM\ManyToOne]
59+
public ?RamseyUuidBinaryDevice $nameConverted = null;
60+
61+
public function __construct(?UuidInterface $id = null, ?RamseyUuidBinaryDevice $myDevice = null, ?RamseyUuidBinaryDevice $nameConverted = null)
5162
{
5263
$this->id = $id ?? Uuid::uuid7();
5364
$this->myDevice = $myDevice;
65+
$this->nameConverted = $nameConverted;
5466
}
5567
}

tests/Fixtures/TestBundle/Entity/Uuid/RamseyUuidDevice.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,16 @@ class RamseyUuidDevice
4141
#[ORM\Column(type: 'uuid', unique: true)]
4242
public UuidInterface $id;
4343

44-
public function __construct(?UuidInterface $id = null)
44+
#[ORM\Column(type: 'uuid')]
45+
public UuidInterface $externalId;
46+
47+
#[ORM\Column(type: 'uuid')]
48+
public UuidInterface $nameConverted;
49+
50+
public function __construct(?UuidInterface $id = null, ?UuidInterface $externalId = null, ?UuidInterface $nameConverted = null)
4551
{
4652
$this->id = $id ?? Uuid::uuid7();
53+
$this->externalId = $externalId ?? Uuid::uuid7();
54+
$this->nameConverted = $nameConverted ?? Uuid::uuid7();
4755
}
4856
}

tests/Fixtures/TestBundle/Entity/Uuid/RamseyUuidDeviceEndpoint.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@
3333
'myDevice' => new QueryParameter(
3434
filter: new UuidFilter(),
3535
),
36+
'myDevice.externalId' => new QueryParameter(
37+
filter: new UuidFilter(),
38+
property: 'myDevice.externalId',
39+
),
40+
'name_converted.name_converted' => new QueryParameter(
41+
filter: new UuidFilter(),
42+
property: 'nameConverted.nameConverted',
43+
),
3644
]
3745
),
3846
new Post(),
@@ -47,9 +55,13 @@ class RamseyUuidDeviceEndpoint
4755
#[ORM\ManyToOne]
4856
public ?RamseyUuidDevice $myDevice = null;
4957

50-
public function __construct(?UuidInterface $id = null, ?RamseyUuidDevice $myDevice = null)
58+
#[ORM\ManyToOne]
59+
public ?RamseyUuidDevice $nameConverted = null;
60+
61+
public function __construct(?UuidInterface $id = null, ?RamseyUuidDevice $myDevice = null, ?RamseyUuidDevice $nameConverted = null)
5162
{
5263
$this->id = $id ?? Uuid::uuid7();
5364
$this->myDevice = $myDevice;
65+
$this->nameConverted = $nameConverted;
5466
}
5567
}

tests/Fixtures/TestBundle/Entity/Uuid/SymfonyUlidDevice.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,16 @@ class SymfonyUlidDevice
4040
#[ORM\Column(type: 'ulid', unique: true)]
4141
public Ulid $id;
4242

43-
public function __construct(?Ulid $id = null)
43+
#[ORM\Column(type: 'ulid')]
44+
public Ulid $externalId;
45+
46+
#[ORM\Column(type: 'ulid')]
47+
public Ulid $nameConverted;
48+
49+
public function __construct(?Ulid $id = null, ?Ulid $externalId = null, ?Ulid $nameConverted = null)
4450
{
4551
$this->id = $id ?? new Ulid();
52+
$this->externalId = $externalId ?? new Ulid();
53+
$this->nameConverted = $nameConverted ?? new Ulid();
4654
}
4755
}

tests/Fixtures/TestBundle/Entity/Uuid/SymfonyUlidDeviceEndpoint.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@
3333
'myDevice' => new QueryParameter(
3434
filter: new UlidFilter(),
3535
),
36+
'myDevice.externalId' => new QueryParameter(
37+
filter: new UlidFilter(),
38+
property: 'myDevice.externalId',
39+
),
40+
'name_converted.name_converted' => new QueryParameter(
41+
filter: new UlidFilter(),
42+
property: 'nameConverted.nameConverted',
43+
),
3644
]
3745
),
3846
new Post(),
@@ -47,9 +55,13 @@ class SymfonyUlidDeviceEndpoint
4755
#[ORM\ManyToOne]
4856
public ?SymfonyUlidDevice $myDevice = null;
4957

50-
public function __construct(?Ulid $id = null, ?SymfonyUlidDevice $myDevice = null)
58+
#[ORM\ManyToOne]
59+
public ?SymfonyUlidDevice $nameConverted = null;
60+
61+
public function __construct(?Ulid $id = null, ?SymfonyUlidDevice $myDevice = null, ?SymfonyUlidDevice $nameConverted = null)
5162
{
5263
$this->id = $id ?? new Ulid();
5364
$this->myDevice = $myDevice;
65+
$this->nameConverted = $nameConverted;
5466
}
5567
}

tests/Fixtures/TestBundle/Entity/Uuid/SymfonyUuidDevice.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,16 @@ class SymfonyUuidDevice
4040
#[ORM\Column(type: 'symfony_uuid', unique: true)]
4141
public Uuid $id;
4242

43-
public function __construct(?Uuid $id = null)
43+
#[ORM\Column(type: 'symfony_uuid')]
44+
public Uuid $externalId;
45+
46+
#[ORM\Column(type: 'symfony_uuid')]
47+
public Uuid $nameConverted;
48+
49+
public function __construct(?Uuid $id = null, ?Uuid $externalId = null, ?Uuid $nameConverted = null)
4450
{
4551
$this->id = $id ?? Uuid::v7();
52+
$this->externalId = $externalId ?? Uuid::v7();
53+
$this->nameConverted = $nameConverted ?? Uuid::v7();
4654
}
4755
}

tests/Fixtures/TestBundle/Entity/Uuid/SymfonyUuidDeviceEndpoint.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@
3232
'myDevice' => new QueryParameter(
3333
filter: new UuidFilter(),
3434
),
35+
'myDevice.externalId' => new QueryParameter(
36+
filter: new UuidFilter(),
37+
property: 'myDevice.externalId',
38+
),
39+
'name_converted.name_converted' => new QueryParameter(
40+
filter: new UuidFilter(),
41+
property: 'nameConverted.nameConverted',
42+
),
3543
]
3644
),
3745
new Post(),
@@ -46,9 +54,13 @@ class SymfonyUuidDeviceEndpoint
4654
#[ORM\ManyToOne]
4755
public ?SymfonyUuidDevice $myDevice = null;
4856

49-
public function __construct(?Uuid $id = null, ?SymfonyUuidDevice $myDevice = null)
57+
#[ORM\ManyToOne]
58+
public ?SymfonyUuidDevice $nameConverted = null;
59+
60+
public function __construct(?Uuid $id = null, ?SymfonyUuidDevice $myDevice = null, ?SymfonyUuidDevice $nameConverted = null)
5061
{
5162
$this->id = $id ?? Uuid::v7();
5263
$this->myDevice = $myDevice;
64+
$this->nameConverted = $nameConverted;
5365
}
5466
}

tests/Functional/Uuid/UuidFilterBaseTestCase.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,76 @@ public function testGetOpenApiDescription(): void
314314
);
315315
}
316316

317+
public function testSearchFilterByUuidNested(): void
318+
{
319+
$this->recreateSchema(static::getResources());
320+
321+
$manager = $this->getManager();
322+
$manager->persist($fooDevice = $this->createDevice());
323+
$manager->persist($barDevice = $this->createDevice());
324+
$manager->persist($this->createDeviceEndpoint(null, $fooDevice));
325+
$manager->persist($barDeviceEndpoint = $this->createDeviceEndpoint(null, $barDevice));
326+
$manager->flush();
327+
328+
$response = self::createClient()->request('GET', '/'.$this->getUrlPrefix().'_device_endpoints', [
329+
'query' => [
330+
'myDevice.externalId' => (string) $barDeviceEndpoint->myDevice->externalId,
331+
],
332+
]);
333+
334+
self::assertResponseIsSuccessful();
335+
$json = $response->toArray();
336+
337+
self::assertArraySubset(['hydra:totalItems' => 1], $json);
338+
self::assertArraySubset(
339+
[
340+
'hydra:member' => [
341+
[
342+
'@id' => '/'.$this->getUrlPrefix().'_device_endpoints/'.$barDeviceEndpoint->id,
343+
'@type' => $this->geTypePrefix().'DeviceEndpoint',
344+
'id' => (string) $barDeviceEndpoint->id,
345+
],
346+
],
347+
],
348+
$json
349+
);
350+
}
351+
352+
public function testSearchFilterByUuidNestedWhenNameIsConverted(): void
353+
{
354+
$this->recreateSchema(static::getResources());
355+
356+
$manager = $this->getManager();
357+
$manager->persist($fooDevice = $this->createDevice());
358+
$manager->persist($barDevice = $this->createDevice());
359+
$manager->persist($this->createDeviceEndpoint(null, null, $fooDevice));
360+
$manager->persist($barDeviceEndpoint = $this->createDeviceEndpoint(null, null, $barDevice));
361+
$manager->flush();
362+
363+
$response = self::createClient()->request('GET', '/'.$this->getUrlPrefix().'_device_endpoints', [
364+
'query' => [
365+
'name_converted.name_converted' => (string) $barDeviceEndpoint->nameConverted->nameConverted,
366+
],
367+
]);
368+
369+
self::assertResponseIsSuccessful();
370+
$json = $response->toArray();
371+
372+
self::assertArraySubset(['hydra:totalItems' => 1], $json);
373+
self::assertArraySubset(
374+
[
375+
'hydra:member' => [
376+
[
377+
'@id' => '/'.$this->getUrlPrefix().'_device_endpoints/'.$barDeviceEndpoint->id,
378+
'@type' => $this->geTypePrefix().'DeviceEndpoint',
379+
'id' => (string) $barDeviceEndpoint->id,
380+
],
381+
],
382+
],
383+
$json
384+
);
385+
}
386+
317387
protected function tearDown(): void
318388
{
319389
if ($this->isMongoDB()) {

0 commit comments

Comments
 (0)