You are here

public function ConditionExpressionTest::testDataProcessor in Rules 8.3

Tests that context values get data processed with processor mappings.

File

tests/src/Unit/ConditionExpressionTest.php, line 83

Class

ConditionExpressionTest
@coversDefaultClass \Drupal\rules\Plugin\RulesExpression\ConditionExpression @group Rules

Namespace

Drupal\Tests\rules\Unit

Code

public function testDataProcessor() {
  $this->conditionManager
    ->createInstance('test_condition', [
    'negate' => FALSE,
  ])
    ->willReturn($this->trueCondition
    ->reveal())
    ->shouldBeCalledTimes(1);
  $this->conditionManager
    ->getDefinition('test_condition')
    ->willReturn([
    'label' => 'Test Condition',
  ])
    ->shouldBeCalledTimes(1);
  $condition = new ConditionExpression([
    'condition_id' => 'test_condition',
  ] + ContextConfig::create()
    ->process('test', 'foo', [])
    ->toArray(), '', [
    'label' => 'Test Condition',
  ], $this->conditionManager
    ->reveal(), $this->processorManager
    ->reveal(), $this->rulesDebugLogger
    ->reveal());
  $this->trueCondition
    ->getContextDefinitions()
    ->willReturn([
    'test' => $this
      ->prophesize(ContextDefinitionInterface::class)
      ->reveal(),
  ])
    ->shouldBeCalledTimes(1);
  $this->trueCondition
    ->getContextDefinition('test')
    ->willReturn($this
    ->prophesize(ContextDefinitionInterface::class)
    ->reveal())
    ->shouldBeCalledTimes(1);
  $this->trueCondition
    ->getProvidedContextDefinitions()
    ->willReturn([])
    ->shouldBeCalledTimes(1);

  // Mock some original old value that will be replaced by the data processor.
  $this->trueCondition
    ->getContextValue('test')
    ->willReturn('old_value')
    ->shouldBeCalled();

  // The outcome of the data processor needs to get set on the condition.
  $this->trueCondition
    ->setContextValue('test', 'new_value')
    ->shouldBeCalledTimes(1);
  $this->trueCondition
    ->refineContextDefinitions([])
    ->shouldBeCalledTimes(1);
  $data_processor = $this
    ->prophesize(DataProcessorInterface::class);
  $data_processor
    ->process('old_value', Argument::any())
    ->willReturn('new_value')
    ->shouldBeCalledTimes(1);
  $this->processorManager
    ->createInstance('foo', [])
    ->willReturn($data_processor
    ->reveal())
    ->shouldBeCalledTimes(1);

  // Build some mocked execution state.
  $state = $this
    ->prophesize(ExecutionStateInterface::class);
  $prophecy = $state
    ->getVariable('test');

  /** @var \Prophecy\Prophecy\MethodProphecy $prophecy */
  $prophecy
    ->willReturn('old_value');
  $this
    ->assertTrue($condition
    ->executeWithState($state
    ->reveal()));
}