diff --git a/fastybird_devices_module/__init__.py b/fastybird_devices_module/__init__.py index b58b725c..67ec06b3 100644 --- a/fastybird_devices_module/__init__.py +++ b/fastybird_devices_module/__init__.py @@ -18,4 +18,4 @@ Devices module """ -__version__ = "0.66.0" +__version__ = "0.67.0" diff --git a/src/Connectors/Connector.php b/src/Connectors/Connector.php index 56c3cf7c..84463484 100644 --- a/src/Connectors/Connector.php +++ b/src/Connectors/Connector.php @@ -29,7 +29,6 @@ use Nette\Utils; use Psr\EventDispatcher as PsrEventDispatcher; use Psr\Log; -use SplObjectStorage; use Throwable; /** @@ -50,14 +49,11 @@ final class Connector /** @var bool */ private bool $stopped = true; - /** @var IConnector|null */ - private ?IConnector $service = null; - - /** @var MetadataEntities\Modules\DevicesModule\IConnectorEntity|null */ - private ?MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector = null; + /** @var ConnectorFactory */ + private ConnectorFactory $factory; - /** @var SplObjectStorage */ - private SplObjectStorage $connectors; + /** @var IConnector|null */ + private ?IConnector $connector = null; /** @var Models\Connectors\Properties\IPropertiesRepository */ private Models\Connectors\Properties\IPropertiesRepository $connectorPropertiesRepository; @@ -81,6 +77,7 @@ final class Connector private Log\LoggerInterface $logger; public function __construct( + ConnectorFactory $factory, Models\Connectors\Properties\IPropertiesRepository $connectorPropertiesRepository, Models\Connectors\Properties\IPropertiesManager $connectorPropertiesManager, Models\States\ConnectorPropertiesRepository $connectorPropertiesStateRepository, @@ -89,6 +86,8 @@ public function __construct( ?PsrEventDispatcher\EventDispatcherInterface $dispatcher, ?Log\LoggerInterface $logger = null ) { + $this->factory = $factory; + $this->connectorPropertiesRepository = $connectorPropertiesRepository; $this->connectorPropertiesManager = $connectorPropertiesManager; $this->connectorPropertiesStateRepository = $connectorPropertiesStateRepository; @@ -98,8 +97,6 @@ public function __construct( $this->dispatcher = $dispatcher; $this->logger = $logger ?? new Log\NullLogger(); - - $this->connectors = new SplObjectStorage(); } /** @@ -111,45 +108,31 @@ public function __construct( */ public function execute(MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector): void { - $this->connectors->rewind(); - if ($this->dispatcher !== null) { $this->dispatcher->dispatch(new Events\BeforeConnectorStartEvent($connector)); } - $this->connector = $connector; - - foreach ($this->connectors as $service) { - if ($connector->getType() === $service->getType()) { - $this->logger->debug('Starting connector...', [ - 'source' => 'devices-module', - 'type' => 'connector', - ]); - - try { - $this->service = $service; - $this->service->initialize($connector); + $this->connector = $this->factory->create($connector); - // Start connector service - $this->service->execute(); - - $this->stopped = false; + $this->logger->debug('Starting connector...', [ + 'source' => 'devices-module', + 'type' => 'connector', + ]); - $this->setConnectorState(ConnectionStateType::get(ConnectionStateType::STATE_RUNNING)); - } catch (Throwable $ex) { - throw new Exceptions\TerminateException('Connector can\'t be started'); - } + try { + // Start connector service + $this->connector->execute(); - if ($this->dispatcher !== null) { - $this->dispatcher->dispatch(new Events\AfterConnectorStartEvent($connector)); - } + $this->stopped = false; - return; - } + $this->setConnectorState(ConnectionStateType::get(ConnectionStateType::STATE_RUNNING)); + } catch (Throwable $ex) { + throw new Exceptions\TerminateException('Connector can\'t be started'); } - throw new Exceptions\InvalidArgumentException(sprintf('Connector %s is not registered', $connector->getId() - ->toString())); + if ($this->dispatcher !== null) { + $this->dispatcher->dispatch(new Events\AfterConnectorStartEvent($connector)); + } } /** @@ -165,12 +148,12 @@ public function terminate(): void ]); try { - if ($this->service !== null) { - if ($this->dispatcher !== null && $this->connector !== null) { + if ($this->connector !== null) { + if ($this->dispatcher !== null) { $this->dispatcher->dispatch(new Events\BeforeConnectorTerminateEvent($this->connector)); } - $this->service->terminate(); + $this->connector->terminate(); $now = $this->dateTimeFactory->getNow(); @@ -183,16 +166,16 @@ public function terminate(): void $this->dateTimeFactory->getNow()->getTimestamp() - $now->getTimestamp() ) < self::SHUTDOWN_WAITING_DELAY ) { - if (!$this->service->hasUnfinishedTasks()) { + if (!$this->connector->hasUnfinishedTasks()) { $waitingForClosing = false; } } - } - $this->setConnectorState(ConnectionStateType::get(ConnectionStateType::STATE_STOPPED)); + if ($this->dispatcher !== null) { + $this->dispatcher->dispatch(new Events\AfterConnectorTerminateEvent($this->connector)); + } - if ($this->dispatcher !== null && $this->connector !== null) { - $this->dispatcher->dispatch(new Events\AfterConnectorTerminateEvent($this->connector)); + $this->setConnectorState(ConnectionStateType::get(ConnectionStateType::STATE_STOPPED)); } } catch (Throwable $ex) { $this->logger->error('Connector couldn\'t be stopped. An unexpected error occurred', [ @@ -206,18 +189,6 @@ public function terminate(): void } } - /** - * @param IConnector $connector - * - * @return void - */ - public function registerConnector(IConnector $connector): void - { - if ($this->connectors->contains($connector) === false) { - $this->connectors->attach($connector); - } - } - /** * @param ConnectionStateType $state * diff --git a/src/Connectors/ConnectorFactory.php b/src/Connectors/ConnectorFactory.php new file mode 100644 index 00000000..393e57d9 --- /dev/null +++ b/src/Connectors/ConnectorFactory.php @@ -0,0 +1,66 @@ + + * @package FastyBird:DevicesModule! + * @subpackage Connectors + * @since 0.67.0 + * + * @date 03.07.22 + */ + +namespace FastyBird\DevicesModule\Connectors; + +use FastyBird\DevicesModule\Exceptions; +use FastyBird\Metadata\Entities as MetadataEntities; +use SplObjectStorage; + +/** + * Connector factory + * + * @package FastyBird:DevicesModule! + * @subpackage Connectors + * + * @author Adam Kadlec + */ +final class ConnectorFactory +{ + + /** @var SplObjectStorage */ + private SplObjectStorage $factories; + + /** + * @param IConnectorFactory[] $factories + */ + public function __construct( + array $factories + ) { + $this->factories = new SplObjectStorage(); + + foreach ($factories as $factory) { + $this->factories->attach($factory); + } + } + + /** + * @param MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + * + * @return IConnector + */ + public function create(MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector): IConnector + { + /** @var IConnectorFactory $factory */ + foreach ($this->factories as $factory) { + if ($connector->getType() === $factory->getType()) { + return $factory->create($connector); + } + } + + throw new Exceptions\InvalidStateException('Connector could not be created'); + } + +} diff --git a/src/Connectors/IConnector.php b/src/Connectors/IConnector.php index a507a45d..3fac7380 100644 --- a/src/Connectors/IConnector.php +++ b/src/Connectors/IConnector.php @@ -15,7 +15,7 @@ namespace FastyBird\DevicesModule\Connectors; -use FastyBird\Metadata\Entities as MetadataEntities; +use Ramsey\Uuid; /** * Devices connector interface @@ -29,9 +29,9 @@ interface IConnector { /** - * @return string + * @return Uuid\UuidInterface */ - public function getType(): string; + public function getId(): Uuid\UuidInterface; /** * @return void @@ -48,13 +48,4 @@ public function terminate(): void; */ public function hasUnfinishedTasks(): bool; - /** - * @param MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector - * - * @return void - */ - public function initialize( - MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector - ): void; - } diff --git a/src/Connectors/IConnectorFactory.php b/src/Connectors/IConnectorFactory.php new file mode 100644 index 00000000..7d98ef1f --- /dev/null +++ b/src/Connectors/IConnectorFactory.php @@ -0,0 +1,43 @@ + + * @package FastyBird:DevicesModule! + * @subpackage Connectors + * @since 0.67.0 + * + * @date 03.07.22 + */ + +namespace FastyBird\DevicesModule\Connectors; + +use FastyBird\Metadata\Entities as MetadataEntities; + +/** + * Connector factory interface + * + * @package FastyBird:DevicesModule! + * @subpackage Connectors + * + * @author Adam Kadlec + */ +interface IConnectorFactory +{ + + /** + * @return string + */ + public function getType(): string; + + /** + * @param MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + * + * @return IConnector + */ + public function create(MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector): IConnector; + +} diff --git a/src/DI/DevicesModuleExtension.php b/src/DI/DevicesModuleExtension.php index a39d2fbe..2aaa0e7f 100644 --- a/src/DI/DevicesModuleExtension.php +++ b/src/DI/DevicesModuleExtension.php @@ -382,6 +382,9 @@ public function loadConfiguration(): void ->setType(Models\DataStorage\ChannelControlsRepository::class); // Connector services + $builder->addDefinition($this->prefix('connector.factory'), new DI\Definitions\ServiceDefinition()) + ->setType(Connectors\ConnectorFactory::class); + $builder->addDefinition($this->prefix('connector.service'), new DI\Definitions\ServiceDefinition()) ->setType(Connectors\Connector::class); diff --git a/src/DataStorage/Writer.php b/src/DataStorage/Writer.php index 1cb0fd42..8c22123f 100644 --- a/src/DataStorage/Writer.php +++ b/src/DataStorage/Writer.php @@ -66,8 +66,10 @@ public function write(): void $findConnectors = new Queries\FindConnectorsQuery(); $connectors = $this->connectorsRepository->findAllBy($findConnectors); + var_dump(count($connectors)); foreach ($connectors as $connector) { + var_dump($connector->getIdentifier()); $devices = []; foreach ($connector->getDevices() as $device) { diff --git a/src/Events/AfterConnectorTerminateEvent.php b/src/Events/AfterConnectorTerminateEvent.php index fc0feadd..b62dc82a 100644 --- a/src/Events/AfterConnectorTerminateEvent.php +++ b/src/Events/AfterConnectorTerminateEvent.php @@ -15,7 +15,7 @@ namespace FastyBird\DevicesModule\Events; -use FastyBird\Metadata\Entities as MetadataEntities; +use FastyBird\DevicesModule\Connectors; use Symfony\Contracts\EventDispatcher; /** @@ -29,22 +29,22 @@ class AfterConnectorTerminateEvent extends EventDispatcher\Event { - /** @var MetadataEntities\Modules\DevicesModule\IConnectorEntity */ - private MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector; + /** @var Connectors\IConnector */ + private Connectors\IConnector $connector; /** - * @param MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + * @param Connectors\IConnector $connector */ public function __construct( - MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + Connectors\IConnector $connector ) { $this->connector = $connector; } /** - * @return MetadataEntities\Modules\DevicesModule\IConnectorEntity + * @return Connectors\IConnector */ - public function getConnector(): MetadataEntities\Modules\DevicesModule\IConnectorEntity + public function getConnector(): Connectors\IConnector { return $this->connector; } diff --git a/src/Events/BeforeConnectorTerminateEvent.php b/src/Events/BeforeConnectorTerminateEvent.php index 88dec1cf..7ce44676 100644 --- a/src/Events/BeforeConnectorTerminateEvent.php +++ b/src/Events/BeforeConnectorTerminateEvent.php @@ -15,7 +15,7 @@ namespace FastyBird\DevicesModule\Events; -use FastyBird\Metadata\Entities as MetadataEntities; +use FastyBird\DevicesModule\Connectors; use Symfony\Contracts\EventDispatcher; /** @@ -29,22 +29,22 @@ class BeforeConnectorTerminateEvent extends EventDispatcher\Event { - /** @var MetadataEntities\Modules\DevicesModule\IConnectorEntity */ - private MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector; + /** @var Connectors\IConnector */ + private Connectors\IConnector $connector; /** - * @param MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + * @param Connectors\IConnector $connector */ public function __construct( - MetadataEntities\Modules\DevicesModule\IConnectorEntity $connector + Connectors\IConnector $connector ) { $this->connector = $connector; } /** - * @return MetadataEntities\Modules\DevicesModule\IConnectorEntity + * @return Connectors\IConnector */ - public function getConnector(): MetadataEntities\Modules\DevicesModule\IConnectorEntity + public function getConnector(): Connectors\IConnector { return $this->connector; } diff --git a/tests/cases/Unit/Connectors/ConnectorFactoryTest.phpt b/tests/cases/Unit/Connectors/ConnectorFactoryTest.phpt new file mode 100644 index 00000000..84373037 --- /dev/null +++ b/tests/cases/Unit/Connectors/ConnectorFactoryTest.phpt @@ -0,0 +1,57 @@ +getContainer()->getByType(DataStorage\Writer::class); + + /** @var DataStorage\Reader $reader */ + $reader = $this->getContainer()->getByType(DataStorage\Reader::class); + + /** @var Connectors\ConnectorFactory $factory */ + $factory = $this->getContainer()->getByType(Connectors\ConnectorFactory::class); + + /** @var Models\DataStorage\ConnectorsRepository $connectorsRepository */ + $connectorsRepository = $this->getContainer()->getByType(Models\DataStorage\ConnectorsRepository::class); + + $writer->write(); + $reader->read(); + + foreach ($connectorsRepository as $connector) { + var_dump($connector); + } + + $connectorEntity = $connectorsRepository->findById(Uuid\Uuid::fromString('7a3dd94c-7294-46fd-8c61-1b375c313d4d')); + + Assert::notNull($connectorEntity); + + $connector = $factory->create($connectorEntity); + + Assert::type(Tools\DummyConnector::class, $connector); + } + +} + +$test_case = new ConnectorFactoryTest(); +$test_case->run(); diff --git a/tests/cases/Unit/DataStorage/ReaderTest.phpt b/tests/cases/Unit/DataStorage/ReaderTest.phpt index 8761d044..3c101e10 100644 --- a/tests/cases/Unit/DataStorage/ReaderTest.phpt +++ b/tests/cases/Unit/DataStorage/ReaderTest.phpt @@ -56,7 +56,7 @@ final class ReaderTest extends DbTestCase $reader->read(); - Assert::count(1, $connectorsRepository); + Assert::count(2, $connectorsRepository); Assert::count(0, $connectorPropertiesRepository); Assert::count(1, $connectorControlsRepository); diff --git a/tests/cases/Unit/Models/DataStorage/ConnectorsRepositoryTest.phpt b/tests/cases/Unit/Models/DataStorage/ConnectorsRepositoryTest.phpt index f300cf2e..a29ca03e 100644 --- a/tests/cases/Unit/Models/DataStorage/ConnectorsRepositoryTest.phpt +++ b/tests/cases/Unit/Models/DataStorage/ConnectorsRepositoryTest.phpt @@ -40,7 +40,7 @@ final class ConnectorsRepositoryTest extends DbTestCase $reader->read(); - Assert::count(1, $connectorsRepository); + Assert::count(2, $connectorsRepository); $connector = $connectorsRepository->findById(Uuid\Uuid::fromString('17c59dfa-2edd-438e-8c49-faa4e38e5a5e')); diff --git a/tests/common.neon b/tests/common.neon index 007c2bff..d3c0b4c1 100644 --- a/tests/common.neon +++ b/tests/common.neon @@ -43,6 +43,9 @@ services: - addMiddleware(@fbJsonApi.middlewares.jsonapi) - {factory: React\EventLoop\Loop::get} + - {factory: Tests\Tools\DummyConnectorFactory} + - {factory: Tests\Tools\DummyConnectorSchema} + contributteTranslation: locales: default: en_US @@ -98,7 +101,9 @@ nettrineOrm: proxyDir: %tempDir%/cache/doctrine.proxies nettrineOrmAnnotations: - mapping: [] + mapping: [ + Tests\Tools: %appDir%/tools + ] fbSimpleAuth: token: diff --git a/tests/fixtures/Controllers/responses/connectors.index.json b/tests/fixtures/Controllers/responses/connectors.index.json index 88af9141..a9e54012 100644 --- a/tests/fixtures/Controllers/responses/connectors.index.json +++ b/tests/fixtures/Controllers/responses/connectors.index.json @@ -73,6 +73,48 @@ "links" : { "self" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e" } + }, + { + "type" : "com.fastybird.devices-module/connector/dummy", + "id" : "7a3dd94c-7294-46fd-8c61-1b375c313d4d", + "attributes" : { + "identifier" : "dummy", + "name" : "Dummy", + "comment" : null, + "enabled" : true + }, + "relationships" : { + "devices" : { + "data" : [] + }, + "properties" : { + "links" : { + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/relationships/properties", + "related" : { + "href" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/properties", + "meta" : { + "count" : 0 + } + } + }, + "data" : [] + }, + "controls" : { + "links" : { + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/relationships/controls", + "related" : { + "href" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/controls", + "meta" : { + "count" : 0 + } + } + }, + "data" : [] + } + }, + "links" : { + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d" + } } ] } diff --git a/tests/fixtures/Controllers/responses/connectors.index.paging.json b/tests/fixtures/Controllers/responses/connectors.index.paging.json index e5f07c14..c1912cde 100644 --- a/tests/fixtures/Controllers/responses/connectors.index.paging.json +++ b/tests/fixtures/Controllers/responses/connectors.index.paging.json @@ -2,7 +2,7 @@ "meta" : { "author" : "FastyBird team", "copyright" : "FastyBird s.r.o", - "totalCount" : 1 + "totalCount" : 2 }, "jsonapi" : { "version" : "1.1" @@ -11,44 +11,27 @@ "self" : "/v1/connectors?page%5Boffset%5D=1&page%5Blimit%5D=1", "first" : "/v1/connectors?page%5Boffset%5D=0&page%5Blimit%5D=1", "prev" : "/v1/connectors?page%5Boffset%5D=0&page%5Blimit%5D=1", - "last" : "/v1/connectors?page%5Boffset%5D=0&page%5Blimit%5D=1" + "last" : "/v1/connectors?page%5Boffset%5D=1&page%5Blimit%5D=1" }, "data" : [ { - "type" : "com.fastybird.devices-module/connector/blank", - "id" : "17c59dfa-2edd-438e-8c49-faa4e38e5a5e", + "type" : "com.fastybird.devices-module/connector/dummy", + "id" : "7a3dd94c-7294-46fd-8c61-1b375c313d4d", "attributes" : { - "identifier" : "blank", - "name" : "Blank", + "identifier" : "dummy", + "name" : "Dummy", "comment" : null, "enabled" : true }, "relationships" : { "devices" : { - "data" : [ - { - "type" : "com.fastybird.devices-module/device/blank", - "id" : "69786d15-fd0c-4d9f-9378-33287c2009fa" - }, - { - "type" : "com.fastybird.devices-module/device/blank", - "id" : "a1036ff8-6ee8-4405-aaed-58bae0814596" - }, - { - "type" : "com.fastybird.devices-module/device/blank", - "id" : "bf4cd870-2aac-45f0-a85e-e1cefd2d6d9a" - }, - { - "type" : "com.fastybird.devices-module/device/blank", - "id" : "e36a2788-1ef8-4cdf-ab09-4735f191a509" - } - ] + "data" : [] }, "properties" : { "links" : { - "self" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e/relationships/properties", + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/relationships/properties", "related" : { - "href" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e/properties", + "href" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/properties", "meta" : { "count" : 0 } @@ -58,24 +41,19 @@ }, "controls" : { "links" : { - "self" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e/relationships/controls", + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/relationships/controls", "related" : { - "href" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e/controls", + "href" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d/controls", "meta" : { - "count" : 1 + "count" : 0 } } }, - "data" : [ - { - "type" : "com.fastybird.devices-module/control/connector", - "id" : "7c055b2b-60c3-4017-93db-e9478d8aa662" - } - ] + "data" : [] } }, "links" : { - "self" : "/v1/connectors/17c59dfa-2edd-438e-8c49-faa4e38e5a5e" + "self" : "/v1/connectors/7a3dd94c-7294-46fd-8c61-1b375c313d4d" } } ] diff --git a/tests/fixtures/DataStorage/devices-module-data.json b/tests/fixtures/DataStorage/devices-module-data.json index 80f84a6c..7848efc0 100644 --- a/tests/fixtures/DataStorage/devices-module-data.json +++ b/tests/fixtures/DataStorage/devices-module-data.json @@ -369,5 +369,17 @@ "channels" : [] } } + }, + "7a3dd94c-7294-46fd-8c61-1b375c313d4d": { + "id" : "7a3dd94c-7294-46fd-8c61-1b375c313d4d", + "type" : "dummy", + "identifier" : "dummy", + "name" : "Dummy", + "comment" : null, + "enabled" : true, + "owner" : null, + "properties" : [], + "controls" : [], + "devices" : [] } } \ No newline at end of file diff --git a/tests/pytests/entities.py b/tests/pytests/entities.py new file mode 100644 index 00000000..701923c0 --- /dev/null +++ b/tests/pytests/entities.py @@ -0,0 +1,21 @@ +from fastybird_devices_module.entities.connector import ConnectorEntity + + +class DummyConnectorEntity(ConnectorEntity): + """ + Dummy connector entity + + @package FastyBird:DevicesModule! + @module entities/connector + + @author Adam Kadlec + """ + + __mapper_args__ = {"polymorphic_identity": "dummy"} + + # ----------------------------------------------------------------------------- + + @property + def type(self) -> str: + """Connector type""" + return "dummy" diff --git a/tests/pytests/repositories/test_connectors.py b/tests/pytests/repositories/test_connectors.py index 47494744..402f66b0 100644 --- a/tests/pytests/repositories/test_connectors.py +++ b/tests/pytests/repositories/test_connectors.py @@ -32,7 +32,7 @@ class TestConnectorsRepository(DbTestCase): @inject def test_repository_iterator(self, connector_repository: ConnectorsRepository) -> None: - self.assertEqual(1, len(connector_repository.get_all())) + self.assertEqual(2, len(connector_repository.get_all())) # ----------------------------------------------------------------------------- diff --git a/tests/pytests/tests.py b/tests/pytests/tests.py index 0363e664..3c0e940d 100644 --- a/tests/pytests/tests.py +++ b/tests/pytests/tests.py @@ -38,6 +38,9 @@ from fastybird_devices_module.bootstrap import register_services from fastybird_devices_module.entities.base import Base +# Tests libs +from tests.pytests.entities import DummyConnectorEntity + class DbTestCase(unittest.TestCase): __db_name: str diff --git a/tests/sql/dummy.data.sql b/tests/sql/dummy.data.sql index 29771051..1480ebb2 100644 --- a/tests/sql/dummy.data.sql +++ b/tests/sql/dummy.data.sql @@ -1,6 +1,7 @@ INSERT IGNORE INTO `fb_devices_module_connectors` (`connector_id`, `connector_identifier`, `connector_name`, `connector_comment`, `connector_enabled`, `connector_type`, `created_at`, `updated_at`) VALUES -(_binary 0x17C59DFA2EDD438E8C49FAA4E38E5A5E, 'blank', 'Blank', null, true, 'blank', '2020-03-20 09:18:20', '2020-03-20 09:18:20'); +(_binary 0x17C59DFA2EDD438E8C49FAA4E38E5A5E, 'blank', 'Blank', null, true, 'blank', '2020-03-20 09:18:20', '2020-03-20 09:18:20'), +(_binary 0x7A3DD94C729446FD8C611B375C313D4D, 'dummy', 'Dummy', null, true, 'dummy', '2022-07-03 22:00:00', '2022-07-03 22:00:00'); INSERT IGNORE INTO `fb_devices_module_connectors_controls` (`control_id`, `connector_id`, `control_name`, `created_at`, `updated_at`) VALUES diff --git a/tests/tools/DummyConnector.php b/tests/tools/DummyConnector.php new file mode 100644 index 00000000..dee6c1fa --- /dev/null +++ b/tests/tools/DummyConnector.php @@ -0,0 +1,43 @@ +