/** * @test */ public function it_injects_target_handler_to_event_dispatch_when_event_is_a_workflow_message() { $message = WorkflowMessage::newDataCollected(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']]), 'test-case', NodeName::defaultName()); $eventDispatch = new EventDispatch(); $eventDispatch->setEvent($message); $router = new SingleTargetMessageRouter($this->getTestWorkflowProcessor()); $router->onRouteEvent($eventDispatch); $this->assertSame($this->getTestWorkflowProcessor(), $eventDispatch->getEventListeners()[0]); }
/** * @test */ public function it_handles_a_process_data_message() { $taskListPosition = TaskListPosition::at(TaskListId::linkWith(NodeName::defaultName(), ProcessId::generate()), 2); $wfMessage = WorkflowMessage::newDataCollected(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']]), 'test-case', NodeName::defaultName()); $wfMessage->connectToProcessTask($taskListPosition); $wfMessage = $wfMessage->prepareDataProcessing($taskListPosition, 'message-handler'); $this->workflowMessageHandler->handleWorkflowMessage($wfMessage); $this->assertSame($wfMessage, $this->workflowMessageHandler->lastProcessDataMessage()); $this->assertInstanceOf('Prooph\\Processing\\Message\\LogMessage', $this->lastProcessingMessage); }
/** * @test */ public function it_returns_start_sub_process_command_including_previous_message() { $subProcessDefinition = ["process_type" => Definition::PROCESS_LINEAR_MESSAGING, "tasks" => [["task_type" => Definition::TASK_COLLECT_DATA, "source" => 'test-case', "processing_type" => 'Prooph\\ProcessingTest\\Mock\\UserDictionary']]]; $task = RunSubProcess::setUp(NodeName::defaultName(), $subProcessDefinition); $parentTaskListPosition = TaskListPosition::at(TaskListId::linkWith(NodeName::defaultName(), ProcessId::generate()), 1); $previousMessage = WorkflowMessage::newDataCollected(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']]), 'test-case', NodeName::defaultName()); $startSubProcess = $task->generateStartCommandForSubProcess($parentTaskListPosition, $previousMessage); $this->assertTrue($parentTaskListPosition->equals($startSubProcess->parentTaskListPosition())); $this->assertEquals($subProcessDefinition, $startSubProcess->subProcessDefinition()); $this->assertEquals($previousMessage->messageName(), $startSubProcess->previousWorkflowMessage()->messageName()); }
/** * @test */ public function it_creates_an_event_bus_that_dispatches_a_message_to_a_workflow_processor() { $env = Environment::setUp(); $processor = new StupidWorkflowProcessorMock(); $env->services()->set(Definition::SERVICE_WORKFLOW_PROCESSOR, $processor, true); $eventBus = $env->services()->get('processing.event_bus.' . Definition::SERVICE_WORKFLOW_PROCESSOR); $this->assertInstanceOf('Prooph\\ServiceBus\\EventBus', $eventBus); $message = WorkflowMessage::newDataCollected(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']]), 'test-case', NodeName::defaultName()); $eventBus->dispatch($message); $this->assertSame($message, $processor->getLastReceivedMessage()); }
/** * @test */ public function it_collects_information_for_the_sub_process() { $subProcessDefinition = ["process_type" => Definition::PROCESS_LINEAR_MESSAGING, "tasks" => [["task_type" => Definition::TASK_COLLECT_DATA, "source" => 'test-case', "processing_type" => 'Prooph\\ProcessingTest\\Mock\\UserDictionary']]]; $previousMessage = WorkflowMessage::newDataCollected(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']]), 'test-case', 'processor'); $parentTaskListPosition = TaskListPosition::at(TaskListId::linkWith(NodeName::defaultName(), ProcessId::generate()), 1); $command = StartSubProcess::at($parentTaskListPosition, $subProcessDefinition, true, 'sub-processor', $previousMessage); $this->assertTrue($parentTaskListPosition->equals($command->parentTaskListPosition())); $this->assertTrue($command->syncLogMessages()); $this->assertEquals($subProcessDefinition, $command->subProcessDefinition()); $this->assertEquals($previousMessage->messageName(), $command->previousWorkflowMessage()->messageName()); $this->assertEquals(NodeName::defaultName()->toString(), $command->origin()); $this->assertEquals('sub-processor', $command->target()); }
/** * @test */ public function it_invokes_processing_event_on_workflow_message_handler() { $userData = array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City')); $user = UserDictionary::fromNativeValue($userData); $wfEvent = WorkflowMessage::newDataCollected($user, 'test-case', NodeName::defaultName()); $eventBus = new EventBus(); $eventRouter = new EventRouter(); $eventRouter->route($wfEvent->messageName())->to($this->workflowMessageHandler); $eventBus->utilize($eventRouter); $eventBus->utilize(new HandleWorkflowMessageInvokeStrategy()); $eventBus->dispatch($wfEvent); $this->assertSame($wfEvent, $this->workflowMessageHandler->lastWorkflowMessage()); }
/** * @return WorkflowMessage */ protected function getUserDataCollectedTestMessage() { $userData = array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City')); $user = UserDictionary::fromNativeValue($userData); return WorkflowMessage::newDataCollected($user, 'test-case', NodeName::defaultName()->toString()); }
/** * @test */ public function it_sets_wf_message_target_to_target_defined_in_the_process_task() { $task = ProcessData::address('test-target', ['Prooph\\ProcessingTest\\Mock\\TargetUserDictionary']); $process = LinearProcess::setUp(NodeName::defaultName(), [$task]); $wfm = WorkflowMessage::collectDataOf(UserDictionary::prototype(), 'test-case', NodeName::defaultName()); $answer = $wfm->answerWith(UserDictionary::fromNativeValue(['id' => 1, 'name' => 'John Doe', 'address' => ['street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City']])); $this->commandRouter->route(MessageNameUtils::getProcessDataCommandName('Prooph\\ProcessingTest\\Mock\\TargetUserDictionary'))->to($this->workflowMessageHandler); $process->perform($this->workflowEngine, $answer); $receivedMessage = $this->workflowMessageHandler->lastWorkflowMessage(); $this->assertEquals('test-target', $receivedMessage->target()); }
/** * @test */ public function it_dispatches_a_workflow_message_event() { $userData = array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City')); $user = UserDictionary::fromNativeValue($userData); $wfMessage = WorkflowMessage::newDataCollected($user, 'test-case', NodeName::defaultName(), []); $this->workflowEngine->dispatch($wfMessage); $this->assertSame($wfMessage, $this->receivedMessage); }
/** * @test */ public function it_compares_dictionaries_with_identifier_by_identifier_value() { $user = UserDictionary::fromNativeValue(array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City'))); $sameUserWithChangedName = UserDictionary::fromNativeValue(array('id' => 1, 'name' => 'Alexander', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City'))); $otherUser = UserDictionary::fromNativeValue(array('id' => 2, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City'))); $this->assertTrue($user->sameAs($sameUserWithChangedName)); $this->assertFalse($user->sameAs($otherUser)); }
/** * @test */ public function it_changes_processing_type_in_message_name_and_payload() { $userData = array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City')); $user = UserDictionary::fromNativeValue($userData); $wfMessage = WorkflowMessage::newDataCollected($user, 'test-case', NodeName::defaultName()->toString()); $wfMessage->changeProcessingType('Prooph\\ProcessingTest\\Mock\\TargetUserDictionary'); $this->assertEquals(MessageNameUtils::MESSAGE_NAME_PREFIX . 'proophprocessingtestmocktargetuserdictionary-data-collected', $wfMessage->messageName()); $this->assertEquals('Prooph\\ProcessingTest\\Mock\\TargetUserDictionary', $wfMessage->payload()->getTypeClass()); }
/** * @test */ public function it_is_possible_to_change_type_class() { $userData = array('id' => 1, 'name' => 'Alex', 'address' => array('street' => 'Main Street', 'streetNumber' => 10, 'zip' => '12345', 'city' => 'Test City')); $user = UserDictionary::fromNativeValue($userData); $payload = Payload::fromType($user); $payload->changeTypeClass('Prooph\\ProcessingTest\\Mock\\AddressDictionary'); //Current data should be the user data even if type is already changed $this->assertEquals($userData, $payload->extractTypeData()); $payload->replaceData($userData['address']); $address = $payload->toType(); $this->assertInstanceOf('Prooph\\ProcessingTest\\Mock\\AddressDictionary', $address); $this->assertTrue($user->property("address")->type()->sameAs($address)); }