From dc5ea39430ac77e9fc4f637fa86ffb9163b8bee0 Mon Sep 17 00:00:00 2001 From: zerai Date: Sat, 21 Sep 2024 19:28:03 +0200 Subject: [PATCH] Init MetadataUpdaterWorkflow. --- .../Core/Process/MetadataUpdaterWorkflow.php | 127 ++++++++++++++++++ .../Core/Process/ModuleMetadataDetected.php | 27 ++++ .../src/Core/Process/UpdateModuleMetadata.php | 25 ++++ .../Process/MetadataUpdaterWorkflowTest.php | 85 ++++++++++++ 4 files changed, 264 insertions(+) create mode 100644 _metadata/src/Core/Process/MetadataUpdaterWorkflow.php create mode 100644 _metadata/src/Core/Process/ModuleMetadataDetected.php create mode 100644 _metadata/src/Core/Process/UpdateModuleMetadata.php create mode 100644 _metadata/tests/Unit/Core/Process/MetadataUpdaterWorkflowTest.php diff --git a/_metadata/src/Core/Process/MetadataUpdaterWorkflow.php b/_metadata/src/Core/Process/MetadataUpdaterWorkflow.php new file mode 100644 index 0000000..10cbc6b --- /dev/null +++ b/_metadata/src/Core/Process/MetadataUpdaterWorkflow.php @@ -0,0 +1,127 @@ +logger->info('MetadataUpdater - initialize update process for module id: ' . $command->moduleId); + + try { + $repository = Repository::createFromRepositoryUrl($command->repositoryUrl); + + if ($repository->isSupported()) { + return $command; + } else { + $this->logger->info('MetadataUpdater - unsupported repository detected url: ' . $command->repositoryUrl); + } + } catch (UnexpectedValueException $exception) { + $this->logger->info('MetadataUpdater - error: ' . $exception->getMessage()); + } + + return null; + } + + #[InternalHandler( + inputChannelName: 'process.enrich', + outputChannelName: 'process.readMetadata', + changingHeaders: true, + )] + public function enrichCommand(UpdateModuleMetadata $command): array + { + $repository = Repository::createFromRepositoryUrl($command->repositoryUrl); + + return [ + 'repository' => $repository, + ]; + } + + #[InternalHandler( + inputChannelName: 'process.readMetadata', + outputChannelName: 'process.validateMetadata', + changingHeaders: true, + )] + public function readMetadata( + UpdateModuleMetadata $command, + ): ?array { + /** + * if no error enrich command or fail + */ + $metadataDto = $this->metadataReader->readMetadataFromExternalSource($command->repositoryUrl); + + return [ + 'metadata_dto' => $metadataDto, + ]; + } + + #[InternalHandler( + inputChannelName: 'process.validateMetadata', + outputChannelName: 'process.notifyProcessResult', + changingHeaders: true, + )] + public function validateMetadata( + #[Header('metadata_dto')] + ExternalMetadataDto $metadataDto, + MetadataValidator $metadataValidator + ): array { + $metadataValidationResult = $metadataValidator->validate($metadataDto->toArray()); + + return [ + 'metadata_validation_result' => $metadataValidationResult, + ]; + } + + #[InternalHandler( + inputChannelName: 'process.notifyProcessResult', + )] + public function triggerMetadataUpdate( + UpdateModuleMetadata $command, + #[Header('metadata_validation_result')] + bool $validationStatus, + #[Header('metadata_dto')] + ExternalMetadataDto $metadataDto, + EventBus $eventBus + ): void { + if ($validationStatus) { + $eventBus->publish(new ModuleMetadataDetected($command->moduleId, $metadataDto)); + } else { + echo 'complete with no metadata'; + //$eventBus->publish(new ModuleMetadataDetected($command->moduleId, $metadataDto)); + } + } +} diff --git a/_metadata/src/Core/Process/ModuleMetadataDetected.php b/_metadata/src/Core/Process/ModuleMetadataDetected.php new file mode 100644 index 0000000..5701240 --- /dev/null +++ b/_metadata/src/Core/Process/ModuleMetadataDetected.php @@ -0,0 +1,27 @@ + new MetadataUpdaterWorkflow(new NullLogger(), $stubAdapterForReadingExternalMetadataSource), + MetadataValidator::class => new MetadataValidator(), + ] + ); + + $moduleId = Uuid::uuid4()->toString(); + $repositoryUrl = 'https://github.com/MedicalMundi/oe-module-todo-list'; + + + $aMetadataDto = new ExternalMetadataDto( + enableSync: true, + category: 'billing', + tags: ['sms', 'fax'] + ); + + $stubAdapterForReadingExternalMetadataSource->setExternalMetadataDto($repositoryUrl, $aMetadataDto); + + $expectedMessage = new ModuleMetadataDetected($moduleId, $aMetadataDto); + + + + $this->assertEquals( + [$expectedMessage], + $ecotoneLite + ->sendCommand(new UpdateModuleMetadata($moduleId, $repositoryUrl)) + // no -- ->getRecordedCommandHeaders() + + // no + // no -- ->getMessageChannel('module.getDefaultBranch') + // no -- ->getRecordedCommandsWithRouting() + // no -- ->getRecordedCommands() + // no -- ->getRecordedCommandHeaders() + // no -- ->getRecordedEcotoneMessagesFrom('module.getDefaultBranch') + // + // no -- ->receiveMessageFrom('module.getDefaultBranch') + + + ->getRecordedEvents() + ); + } +}