/** * @param ContextInterface $context * * @throws ExecutionFailedException if some processor fired an exception */ protected function executeProcessors(ContextInterface $context) { $processors = $this->processorBag->getProcessors($context); /** @var ProcessorInterface $processor */ foreach ($processors as $processor) { try { $processor->process($context); } catch (\Exception $e) { throw new ExecutionFailedException($processors->getProcessorId(), $processors->getAction(), $processors->getGroup(), $e); } } }
public function testMinEndingCommonProcessorPriority() { $this->processorBag->addGroup('group1', 'action1'); $this->processorBag->addProcessor('processor1', [], 'action1', 'group1'); $this->processorBag->addProcessor('processor2', [], null, null, -256); $context = new Context(); $context->setAction('action1'); $this->processorBag->getProcessors($context); }
public function testExecuteProcessorsFailure() { $processor1 = $this->getMock('Oro\\Component\\ChainProcessor\\ProcessorInterface'); $processor2 = $this->getMock('Oro\\Component\\ChainProcessor\\ProcessorInterface'); $factory = $this->getMock('Oro\\Component\\ChainProcessor\\ProcessorFactoryInterface'); $factory->expects($this->exactly(2))->method('getProcessor')->willReturnOnConsecutiveCalls($processor1, $processor2); $processorBag = new ProcessorBag($factory); $processorBag->addGroup('group1', 'action1', 20); $processorBag->addGroup('group2', 'action1', 10); $processorBag->addProcessor('processor1', [], 'action1', 'group1', 20); $processorBag->addProcessor('processor2', [], 'action1', 'group2', 20); $processorBag->addProcessor('processor3', [], 'action1', 'group2', 10); $context = new Context(); $context->setAction('action1'); $processor1->expects($this->once())->method('process')->with($this->identicalTo($context)); $processor2->expects($this->once())->method('process')->with($this->identicalTo($context))->willThrowException(new \Exception('Some error.')); $chainProcessor = new ChainProcessor($processorBag); try { $chainProcessor->process($context); $this->fail('An exception expected'); } catch (ExecutionFailedException $e) { $this->assertEquals('Processor failed: "processor2". Reason: Some error.', $e->getMessage()); $this->assertEquals('processor2', $e->getProcessorId()); $this->assertEquals('action1', $e->getAction()); $this->assertEquals('group2', $e->getGroup()); $this->assertNotNull($e->getPrevious()); $this->assertEquals('Some error.', $e->getPrevious()->getMessage()); } catch (\Exception $e) { $this->fail(sprintf('ExecutionFailedException expected. Got: %s', get_class($e))); } }
/** * @param ProcessorBag $processorBag * @param string $processorId * @param string|null $dataType * @param string|string[]|null $requestType * * @return string */ protected function addProcessor(ProcessorBag $processorBag, $processorId, $dataType = null, $requestType = null) { $attributes = []; if (null !== $dataType) { $attributes['dataType'] = $dataType; } if (null !== $requestType) { $attributes['requestType'] = $requestType; } $processorBag->addProcessor($processorId, $attributes, 'normalize_value', null, -10); return $processorId; }
public function testGroupRangeApplicableCheckerWithLastGroupOnly() { $context = new Context(); $context->setAction('action1'); $context->setLastGroup('group5'); $processorBag = new ProcessorBag($this->getProcessorFactory()); $processorBag->addGroup('group1', 'action1', -10); $processorBag->addGroup('group2', 'action1', -20); $processorBag->addGroup('group4', 'action1', -30); $processorBag->addGroup('group3', 'action1', -40); $processorBag->addGroup('group5', 'action1', -50); $processorBag->addGroup('group6', 'action1', -60); $processorBag->addProcessor('processor1_no_action', []); $processorBag->addProcessor('processor2_no_action', [], null, null, -65536); $processorBag->addProcessor('processor1_no_group', [], 'action1'); $processorBag->addProcessor('processor2_no_group', [], 'action1', null, -65280); $processorBag->addProcessor('processor1', [], 'action1', 'group1'); $processorBag->addProcessor('processor2', [], 'action1', 'group2'); $processorBag->addProcessor('processor3', [], 'action1', 'group3'); $processorBag->addProcessor('processor4', [], 'action1', 'group4'); $processorBag->addProcessor('processor5', [], 'action1', 'group5'); $processorBag->addProcessor('processor6', [], 'action1', 'group6'); $this->assertProcessors(['processor1_no_action', 'processor1_no_group', 'processor1', 'processor2', 'processor4', 'processor3', 'processor5', 'processor2_no_group', 'processor2_no_action'], $processorBag->getProcessors($context)); }