/** * @dataProvider configurationDataProvider * @param array $configuration * @param array $transitionDefinition * @SuppressWarnings(PHPMD.NPathComplexity) */ public function testAssemble(array $configuration, array $transitionDefinition) { $steps = array('step' => $this->createStep()); $attributes = array('attribute' => $this->createAttribute()); $expectedCondition = null; $expectedAction = null; $conditionFactoryCallCount = 0; if (array_key_exists('pre_conditions', $transitionDefinition)) { $conditionFactoryCallCount++; } if (array_key_exists('conditions', $transitionDefinition)) { $conditionFactoryCallCount++; } if ($conditionFactoryCallCount) { $expectedCondition = $this->createCondition(); $this->conditionFactory->expects($this->exactly($conditionFactoryCallCount))->method('create')->with(ConfigurableCondition::ALIAS, $transitionDefinition['conditions'])->will($this->returnValue($expectedCondition)); } $actionFactoryCallCount = 0; if (array_key_exists('post_actions', $transitionDefinition)) { $actionFactoryCallCount++; } if (array_key_exists('init_actions', $transitionDefinition)) { $actionFactoryCallCount++; } if ($actionFactoryCallCount) { $expectedAction = $this->createAction(); $this->actionFactory->expects($this->exactly($actionFactoryCallCount))->method('create')->with(ConfigurableAction::ALIAS, $transitionDefinition['post_actions'])->will($this->returnValue($this->createAction())); } $this->formOptionsAssembler->expects($this->once())->method('assemble')->with(isset($configuration['form_options']) ? $configuration['form_options'] : array(), $attributes, 'transition', 'test')->will($this->returnArgument(0)); $transitions = $this->assembler->assemble(array('test' => $configuration), $this->transitionDefinitions, $steps, $attributes); $configuration = array_merge(array('is_start' => false, 'form_type' => WorkflowTransitionType::NAME, 'form_options' => array(), 'frontend_options' => array()), $configuration); $this->assertInstanceOf('Doctrine\\Common\\Collections\\ArrayCollection', $transitions); $this->assertCount(1, $transitions); $this->assertTrue($transitions->containsKey('test')); /** @var Transition $actualTransition */ $actualTransition = $transitions->get('test'); $this->assertEquals('test', $actualTransition->getName()); $this->assertEquals($steps['step'], $actualTransition->getStepTo()); $this->assertEquals($configuration['label'], $actualTransition->getLabel()); $this->assertEquals($configuration['frontend_options'], $actualTransition->getFrontendOptions()); $this->assertEquals($configuration['is_start'], $actualTransition->isStart()); $this->assertEquals($configuration['form_type'], $actualTransition->getFormType()); $this->assertEquals($configuration['form_options'], $actualTransition->getFormOptions()); $this->assertEquals($expectedCondition, $actualTransition->getCondition()); $this->assertEquals($expectedAction, $actualTransition->getPostAction()); }
/** * @dataProvider configurationDataProvider * @param array $configuration * @param array $transitionDefinition * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testAssemble(array $configuration, array $transitionDefinition) { $steps = array('step' => $this->createStep()); $attributes = array('attribute' => $this->createAttribute()); $expectedCondition = null; $expectedPreCondition = $this->createCondition(); $expectedAction = null; $defaultAclPrecondition = array(); $preConditions = array(); if (isset($configuration['acl_resource'])) { $defaultAclPrecondition = array('@acl_granted' => array('parameters' => array($configuration['acl_resource']))); if (isset($configuration['acl_message'])) { $defaultAclPrecondition['@acl_granted']['message'] = $configuration['acl_message']; } } if (isset($transitionDefinition['pre_conditions']) && $defaultAclPrecondition) { $preConditions = array('@and' => array($defaultAclPrecondition, $transitionDefinition['pre_conditions'])); } elseif (isset($transitionDefinition['pre_conditions'])) { $preConditions = $transitionDefinition['pre_conditions']; } $count = 0; if ($preConditions) { $this->conditionFactory->expects($this->at($count))->method('create')->with(ConfigurableCondition::ALIAS, $preConditions)->will($this->returnValue($expectedPreCondition)); $count++; } if (array_key_exists('conditions', $transitionDefinition)) { $expectedCondition = $this->createCondition(); $this->conditionFactory->expects($this->at($count))->method('create')->with(ConfigurableCondition::ALIAS, $transitionDefinition['conditions'])->will($this->returnValue($expectedCondition)); } $actionFactoryCallCount = 0; if (array_key_exists('post_actions', $transitionDefinition)) { $actionFactoryCallCount++; } if (array_key_exists('init_actions', $transitionDefinition)) { $actionFactoryCallCount++; } if ($actionFactoryCallCount) { $expectedAction = $this->createAction(); $this->actionFactory->expects($this->exactly($actionFactoryCallCount))->method('create')->with(ConfigurableAction::ALIAS, $transitionDefinition['post_actions'])->will($this->returnValue($this->createAction())); } $this->formOptionsAssembler->expects($this->once())->method('assemble')->with(isset($configuration['form_options']) ? $configuration['form_options'] : array(), $attributes, 'transition', 'test')->will($this->returnArgument(0)); $transitions = $this->assembler->assemble(array('test' => $configuration), $this->transitionDefinitions, $steps, $attributes); $configuration = array_merge(array('is_start' => false, 'form_type' => WorkflowTransitionType::NAME, 'form_options' => array(), 'frontend_options' => array()), $configuration); $this->assertInstanceOf('Doctrine\\Common\\Collections\\ArrayCollection', $transitions); $this->assertCount(1, $transitions); $this->assertTrue($transitions->containsKey('test')); /** @var Transition $actualTransition */ $actualTransition = $transitions->get('test'); $this->assertEquals('test', $actualTransition->getName(), 'Incorrect name'); $this->assertEquals($steps['step'], $actualTransition->getStepTo(), 'Incorrect step_to'); $this->assertEquals($configuration['label'], $actualTransition->getLabel(), 'Incorrect label'); $expectedDisplayType = WorkflowConfiguration::DEFAULT_TRANSITION_DISPLAY_TYPE; if (isset($configuration['display_type'])) { $expectedDisplayType = $configuration['display_type']; } $this->assertEquals($expectedDisplayType, $actualTransition->getDisplayType(), 'Incorrect display type'); $this->assertEquals($configuration['frontend_options'], $actualTransition->getFrontendOptions(), 'Incorrect frontend_options'); $this->assertEquals($configuration['is_start'], $actualTransition->isStart(), 'Incorrect is_start'); $this->assertEquals($configuration['form_type'], $actualTransition->getFormType(), 'Incorrect form_type'); $this->assertEquals($configuration['form_options'], $actualTransition->getFormOptions(), 'Incorrect form_options'); $this->assertTemplate('page', $configuration, $actualTransition); $this->assertTemplate('dialog', $configuration, $actualTransition); if ($preConditions) { $this->assertEquals($expectedPreCondition, $actualTransition->getPreCondition(), 'Incorrect Precondition'); } else { $this->assertNull($actualTransition->getPreCondition(), 'Incorrect Precondition'); } $this->assertEquals($expectedCondition, $actualTransition->getCondition(), 'Incorrect condition'); $this->assertEquals($expectedAction, $actualTransition->getPostAction(), 'Incorrect post_action'); }
/** * @param array $configuration * @param Collection $steps * @param Collection $attributes * @return Transition[]|Collection */ protected function assembleTransitions(array $configuration, Collection $steps, Collection $attributes) { $transitionsConfiguration = $this->getOption($configuration, WorkflowConfiguration::NODE_TRANSITIONS, array()); $transitionDefinitionsConfiguration = $this->getOption($configuration, WorkflowConfiguration::NODE_TRANSITION_DEFINITIONS, array()); return $this->transitionAssembler->assemble($transitionsConfiguration, $transitionDefinitionsConfiguration, $steps, $attributes); }