/** * @test * @dataProvider provideStartScenarios */ function it_determines_one_start_task_managed_by_one_process_as_long_as_message_handler_is_located_on_the_same_processing_node(Workflow\Message $startMessage, MessageHandler $firstMessageHandler, ProcessingMetadata $taskMetadata, $expectedTaskType, $expectedProcessType) { $workflow = Workflow::locatedOn(NodeName::defaultName(), WorkflowId::generate(), 'Article Export'); //Pop the WorkflowWasCreatedEvent $this->extractRecordedEvents($workflow); $tasks = $workflow->determineFirstTasks($startMessage, $firstMessageHandler, $taskMetadata); $this->assertEquals(1, count($tasks)); $this->assertInstanceOf(Task::class, $tasks[0]); $this->assertEquals($expectedTaskType, $tasks[0]->type()->toString()); $this->assertTrue($firstMessageHandler->messageHandlerId()->equals($tasks[0]->messageHandlerId())); $domainEvents = $this->extractRecordedEvents($workflow); $this->assertEquals(3, count($domainEvents)); $this->assertInstanceOf(Workflow\StartMessageWasAssignedToWorkflow::class, $domainEvents[0]); $this->assertInstanceOf(Workflow\ProcessWasAddedToWorkflow::class, $domainEvents[1]); $this->assertInstanceOf(Workflow\TaskWasAddedToProcess::class, $domainEvents[2]); foreach ($domainEvents as $domainEvent) { if ($domainEvent instanceof Workflow\ProcessWasAddedToWorkflow) { $this->assertEquals($expectedProcessType, $domainEvent->processType()->toString()); } } }
/** * @param WorkflowId $workflowId * @param string $workflowName * @return Workflow */ public function setUpNewWorkflow(WorkflowId $workflowId, $workflowName) { return Workflow::locatedOn($this->nodeName(), $workflowId, $workflowName); }