/** * @param StartSubProcess $command * @throws \Exception */ private function startSubProcess(StartSubProcess $command) { $subProcess = $this->processFactory->createProcessFromDefinition($command->subProcessDefinition(), $this->nodeName, $command->parentTaskListPosition()); $this->beginTransaction(); try { $subProcess->perform($this->workflowEngine, $command->previousWorkflowMessage()); $this->processRepository->add($subProcess); $this->commitTransaction(); } catch (\Exception $ex) { $this->rollbackTransaction(); throw $ex; } }
/** * @test * @dataProvider provideStringCollection */ public function it_performs_a_sub_process_for_each_chunk_of_a_collection(StringCollection $stringCollection) { $processDefinition = ['process_type' => Definition::PROCESS_PARALLEL_CHUNK, 'tasks' => [["task_type" => Definition::TASK_RUN_SUB_PROCESS, "target_node_name" => NodeName::defaultName()->toString(), "process_definition" => ["process_type" => Definition::PROCESS_LINEAR_MESSAGING, "tasks" => [["task_type" => Definition::TASK_PROCESS_DATA, "target" => 'test-target', "allowed_types" => ['Prooph\\Processing\\Type\\String']]]]]]]; $processFactory = new ProcessFactory(); $chunkProcess = $processFactory->createProcessFromDefinition($processDefinition, NodeName::defaultName()); $this->assertInstanceOf('Prooph\\Processing\\Processor\\ChunkProcess', $chunkProcess); $message = WorkflowMessage::newDataCollected($stringCollection, 'test-case', NodeName::defaultName(), [ChunkProcess::META_OFFSET => 0, ChunkProcess::META_LIMIT => 2, ChunkProcess::META_TOTAL_ITEMS => 6, ChunkProcess::META_COUNT_ONLY => true]); $chunkProcess->perform($this->workflowEngine, $message); $this->assertEquals(3, count($this->startSubProcessCommands)); $this->assertFalse($chunkProcess->isFinished()); foreach ($this->startSubProcessCommands as $i => $command) { $mockedMessage = WorkflowMessage::newDataCollected(String::fromNativeValue("Fake message"), 'test-case', NodeName::defaultName()); $mockedMessage->connectToProcessTask($command->parentTaskListPosition()); $chunkProcess->receiveMessage($mockedMessage, $this->workflowEngine); } $this->assertTrue($chunkProcess->isSuccessfulDone()); }
/** * @test */ function it_creates_linear_messaging_process_with_manipulate_payload_task_from_definition() { $definition = ["process_type" => Definition::PROCESS_LINEAR_MESSAGING, "tasks" => [["task_type" => Definition::TASK_MANIPULATE_PAYLOAD, 'manipulation_script' => __DIR__ . '/../Mock/manipulation/append_world.php']]]; $processFactory = new ProcessFactory(); $process = $processFactory->createProcessFromDefinition($definition, NodeName::defaultName()); $this->assertInstanceOf('Prooph\\Processing\\Processor\\LinearProcess', $process); $message = WorkflowMessage::newDataCollected(String::fromString('Hello'), 'test-case', NodeName::defaultName()); $process->perform($this->workflowEngine, $message); $this->assertTrue($process->isSuccessfulDone()); $this->assertEquals('Hello World', $message->payload()->extractTypeData()); }