From a73147382bcbba9a928230191a863be3202bfcac Mon Sep 17 00:00:00 2001 From: GitHub Date: Mon, 18 Dec 2023 21:37:47 +0000 Subject: [PATCH] [virtual-connector] Refactoring commands (#217) --- src/Entities/Channels/Properties/Property.php | 2 +- src/Entities/Devices/Device.php | 2 +- src/Entities/Devices/Properties/Property.php | 2 +- .../Configuration/FindChannelProperties.php | 10 +++++++ .../Configuration/FindConnectorProperties.php | 10 +++++++ .../Configuration/FindDeviceProperties.php | 10 +++++++ .../Entities/FindChannelProperties.php | 14 ++++++++++ .../Entities/FindConnectorProperties.php | 14 ++++++++++ src/Queries/Entities/FindDeviceProperties.php | 14 ++++++++++ .../ChannelsPropertiesRepositoryTest.php | 28 +++++++++++++++++++ .../ConnectorsPropertiesRepositoryTest.php | 14 ++++++++++ .../DevicesPropertiesRepositoryTest.php | 28 +++++++++++++++++++ 12 files changed, 145 insertions(+), 3 deletions(-) diff --git a/src/Entities/Channels/Properties/Property.php b/src/Entities/Channels/Properties/Property.php index 295e1191..908dff7f 100644 --- a/src/Entities/Channels/Properties/Property.php +++ b/src/Entities/Channels/Properties/Property.php @@ -63,7 +63,7 @@ abstract class Property extends Entities\Property /** * @IPubDoctrine\Crud(is="writable") - * @ORM\ManyToOne(targetEntity="FastyBird\Module\Devices\Entities\Channels\Properties\Property", inversedBy="children", cascade={"persist"}) + * @ORM\ManyToOne(targetEntity="FastyBird\Module\Devices\Entities\Channels\Properties\Property", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="property_id", nullable=true, onDelete="CASCADE") */ protected self|null $parent = null; diff --git a/src/Entities/Devices/Device.php b/src/Entities/Devices/Device.php index fe0e6814..3c140587 100644 --- a/src/Entities/Devices/Device.php +++ b/src/Entities/Devices/Device.php @@ -94,7 +94,7 @@ abstract class Device implements Entities\Entity, * @var Common\Collections\Collection * * @IPubDoctrine\Crud(is="writable") - * @ORM\ManyToMany(targetEntity="FastyBird\Module\Devices\Entities\Devices\Device", inversedBy="children", cascade={"persist"}) + * @ORM\ManyToMany(targetEntity="FastyBird\Module\Devices\Entities\Devices\Device", inversedBy="children") * @ORM\JoinTable( * name="fb_devices_module_devices_children", * joinColumns={@ORM\JoinColumn(name="child_device", referencedColumnName="device_id", onDelete="CASCADE")}, diff --git a/src/Entities/Devices/Properties/Property.php b/src/Entities/Devices/Properties/Property.php index d67d663b..c712adc5 100644 --- a/src/Entities/Devices/Properties/Property.php +++ b/src/Entities/Devices/Properties/Property.php @@ -63,7 +63,7 @@ abstract class Property extends Entities\Property /** * @IPubDoctrine\Crud(is="writable") - * @ORM\ManyToOne(targetEntity="FastyBird\Module\Devices\Entities\Devices\Properties\Property", inversedBy="children", cascade={"persist"}) + * @ORM\ManyToOne(targetEntity="FastyBird\Module\Devices\Entities\Devices\Properties\Property", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="property_id", nullable=true, onDelete="CASCADE") */ protected self|null $parent = null; diff --git a/src/Queries/Configuration/FindChannelProperties.php b/src/Queries/Configuration/FindChannelProperties.php index 01ee4d8d..6c2cc838 100644 --- a/src/Queries/Configuration/FindChannelProperties.php +++ b/src/Queries/Configuration/FindChannelProperties.php @@ -85,6 +85,16 @@ public function byParentId(Uuid\UuidInterface $parentId): void $this->filter[] = '.[?(@.parent =~ /(?i).*^' . $parentId->toString() . '*$/)]'; } + public function settable(bool $state): void + { + $this->filter[] = '.[?(@.settable == "' . ($state ? 'true' : 'false') . '")]'; + } + + public function queryable(bool $state): void + { + $this->filter[] = '.[?(@.queryable == "' . ($state ? 'true' : 'false') . '")]'; + } + /** * @throws JSONPath\JSONPathException */ diff --git a/src/Queries/Configuration/FindConnectorProperties.php b/src/Queries/Configuration/FindConnectorProperties.php index 89b96ffb..09854384 100644 --- a/src/Queries/Configuration/FindConnectorProperties.php +++ b/src/Queries/Configuration/FindConnectorProperties.php @@ -73,6 +73,16 @@ public function byConnectorId(Uuid\UuidInterface $connectorId): void $this->filter[] = '.[?(@.connector =~ /(?i).*^' . $connectorId->toString() . '*$/)]'; } + public function settable(bool $state): void + { + $this->filter[] = '.[?(@.settable == "' . ($state ? 'true' : 'false') . '")]'; + } + + public function queryable(bool $state): void + { + $this->filter[] = '.[?(@.queryable == "' . ($state ? 'true' : 'false') . '")]'; + } + /** * @throws JSONPath\JSONPathException */ diff --git a/src/Queries/Configuration/FindDeviceProperties.php b/src/Queries/Configuration/FindDeviceProperties.php index 5f17ad63..6d4f30ee 100644 --- a/src/Queries/Configuration/FindDeviceProperties.php +++ b/src/Queries/Configuration/FindDeviceProperties.php @@ -85,6 +85,16 @@ public function byParentId(Uuid\UuidInterface $parentId): void $this->filter[] = '.[?(@.parent =~ /(?i).*^' . $parentId->toString() . '*$/)]'; } + public function settable(bool $state): void + { + $this->filter[] = '.[?(@.settable == "' . ($state ? 'true' : 'false') . '")]'; + } + + public function queryable(bool $state): void + { + $this->filter[] = '.[?(@.queryable == "' . ($state ? 'true' : 'false') . '")]'; + } + /** * @throws JSONPath\JSONPathException */ diff --git a/src/Queries/Entities/FindChannelProperties.php b/src/Queries/Entities/FindChannelProperties.php index 6388f67b..1e1a772c 100644 --- a/src/Queries/Entities/FindChannelProperties.php +++ b/src/Queries/Entities/FindChannelProperties.php @@ -102,6 +102,20 @@ public function byParentId(Uuid\UuidInterface $parentId): void }; } + public function settable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.settable = :settable')->setParameter('settable', $state); + }; + } + + public function queryable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.queryable = :queryable')->setParameter('queryable', $state); + }; + } + /** * @throws Exceptions\InvalidArgument */ diff --git a/src/Queries/Entities/FindConnectorProperties.php b/src/Queries/Entities/FindConnectorProperties.php index 8e08bb61..955ac315 100644 --- a/src/Queries/Entities/FindConnectorProperties.php +++ b/src/Queries/Entities/FindConnectorProperties.php @@ -87,6 +87,20 @@ public function byConnectorId(Uuid\UuidInterface $connectorId): void }; } + public function settable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.settable = :settable')->setParameter('settable', $state); + }; + } + + public function queryable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.queryable = :queryable')->setParameter('queryable', $state); + }; + } + /** * @throws Exceptions\InvalidArgument */ diff --git a/src/Queries/Entities/FindDeviceProperties.php b/src/Queries/Entities/FindDeviceProperties.php index a7807b64..c11511d1 100644 --- a/src/Queries/Entities/FindDeviceProperties.php +++ b/src/Queries/Entities/FindDeviceProperties.php @@ -102,6 +102,20 @@ public function byParentId(Uuid\UuidInterface $parentId): void }; } + public function settable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.settable = :settable')->setParameter('settable', $state); + }; + } + + public function queryable(bool $state): void + { + $this->filter[] = static function (ORM\QueryBuilder $qb) use ($state): void { + $qb->andWhere('p.queryable = :queryable')->setParameter('queryable', $state); + }; + } + /** * @throws Exceptions\InvalidArgument */ diff --git a/tests/cases/unit/Models/Configuration/Repositories/ChannelsPropertiesRepositoryTest.php b/tests/cases/unit/Models/Configuration/Repositories/ChannelsPropertiesRepositoryTest.php index 60a0da48..97284a25 100644 --- a/tests/cases/unit/Models/Configuration/Repositories/ChannelsPropertiesRepositoryTest.php +++ b/tests/cases/unit/Models/Configuration/Repositories/ChannelsPropertiesRepositoryTest.php @@ -136,6 +136,34 @@ public function testReadAll(): void $entities = $repository->findAllBy($findQuery, MetadataDocuments\DevicesModule\ChannelMappedProperty::class); self::assertCount(0, $entities); + + $findQuery = new Queries\Configuration\FindChannelProperties(); + $findQuery->settable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(1, $entities); + + $findQuery = new Queries\Configuration\FindChannelProperties(); + $findQuery->settable(false); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(2, $entities); + + $findQuery = new Queries\Configuration\FindChannelProperties(); + $findQuery->queryable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(3, $entities); + + $findQuery = new Queries\Configuration\FindChannelProperties(); + $findQuery->queryable(false); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(0, $entities); } /** diff --git a/tests/cases/unit/Models/Configuration/Repositories/ConnectorsPropertiesRepositoryTest.php b/tests/cases/unit/Models/Configuration/Repositories/ConnectorsPropertiesRepositoryTest.php index 1ddd19af..eae8407d 100644 --- a/tests/cases/unit/Models/Configuration/Repositories/ConnectorsPropertiesRepositoryTest.php +++ b/tests/cases/unit/Models/Configuration/Repositories/ConnectorsPropertiesRepositoryTest.php @@ -131,6 +131,20 @@ public function testReadAll(): void ); self::assertCount(2, $entities); + + $findQuery = new Queries\Configuration\FindConnectorProperties(); + $findQuery->settable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(0, $entities); + + $findQuery = new Queries\Configuration\FindConnectorProperties(); + $findQuery->queryable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(0, $entities); } /** diff --git a/tests/cases/unit/Models/Configuration/Repositories/DevicesPropertiesRepositoryTest.php b/tests/cases/unit/Models/Configuration/Repositories/DevicesPropertiesRepositoryTest.php index 9ca4ec49..a9119646 100644 --- a/tests/cases/unit/Models/Configuration/Repositories/DevicesPropertiesRepositoryTest.php +++ b/tests/cases/unit/Models/Configuration/Repositories/DevicesPropertiesRepositoryTest.php @@ -137,6 +137,34 @@ public function testReadAll(): void $entities = $repository->findAllBy($findQuery, MetadataDocuments\DevicesModule\DeviceMappedProperty::class); self::assertCount(0, $entities); + + $findQuery = new Queries\Configuration\FindDeviceProperties(); + $findQuery->settable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(0, $entities); + + $findQuery = new Queries\Configuration\FindDeviceProperties(); + $findQuery->settable(false); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(2, $entities); + + $findQuery = new Queries\Configuration\FindDeviceProperties(); + $findQuery->queryable(true); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(2, $entities); + + $findQuery = new Queries\Configuration\FindDeviceProperties(); + $findQuery->queryable(false); + + $entities = $repository->findAllBy($findQuery); + + self::assertCount(0, $entities); } /**