/**
  * @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);
 }