/**
  * Determine the required process type based on given message and the message handler which will receive the message.
  *
  * @param Message $message
  * @param MessageHandler $messageHandler
  * @return ProcessType
  * @throws Workflow\Exception\MessageIsNotManageable
  */
 private function determineProcessType(Message $message, MessageHandler $messageHandler)
 {
     if ($messageHandler->canHandleMessage($message)) {
         if ($message->processingMetadata()->shouldCollectionBeSplitIntoChunks()) {
             $processType = ProcessType::parallelChunk();
         } else {
             $processType = ProcessType::linearMessaging();
         }
     } else {
         //We create the error before trying the foreach alternative to provide the client with the original error message
         //if the alternative fails too.
         $originalError = MessageIsNotManageable::byMessageHandler($messageHandler, $message);
         //Check if we can use a foreach process to avoid the rejection of the message
         if ($this->isForeachProcessPossible($message, $messageHandler)) {
             $processType = ProcessType::parallelForeach();
         } else {
             throw $originalError;
         }
     }
     return $processType;
 }
 /**
  * @test
  */
 function it_can_be_a_parallel_for_each_type()
 {
     $type = ProcessType::parallelForeach();
     $this->assertTrue($type->isParallelForeach());
     $this->assertEquals(ProcessType::TYPE_PARALLEL_FOREACH, $type->toString());
 }