Пример #1
0
 /**
  * @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());
 }
Пример #2
0
 /**
  * @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;
     }
 }
Пример #3
0
 /**
  * @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());
 }