RulesComponentTest.php

Namespace

Drupal\Tests\rules\Unit\Integration\Engine

File

tests/src/Unit/Integration/Engine/RulesComponentTest.php

View source
<?php

namespace Drupal\Tests\rules\Unit\Integration\Engine;

use Drupal\rules\Context\ContextConfig;
use Drupal\rules\Context\ContextDefinition;
use Drupal\rules\Engine\RulesComponent;
use Drupal\rules\Context\ExecutionStateInterface;
use Drupal\Tests\rules\Unit\Integration\RulesIntegrationTestBase;

/**
 * Tests the Rules component class.
 *
 * @coversDefaultClass \Drupal\rules\Engine\RulesComponent
 * @group Rules
 */
class RulesComponentTest extends RulesIntegrationTestBase {
  
  /**
   * Tests executing a rule providing context based upon given context.
   */
  public function testRuleExecutionWithContext() {
    $rule = $this->rulesExpressionManager
      ->createRule();
    $rule->addAction('rules_test_string', ContextConfig::create()->map('text', 'text'));
    $result = RulesComponent::create($rule)->addContextDefinition('text', ContextDefinition::create('string'))
      ->provideContext('concatenated')
      ->setContextValue('text', 'foo')
      ->execute();
    // Ensure the provided context is returned.
    $this->assertArrayHasKey('concatenated', $result);
    // cspell:ignore foofoo
    $this->assertEquals('foofoo', $result['concatenated']);
  }
  
  /**
   * @covers ::getExpression
   */
  public function testGetExpression() {
    $rule = $this->rulesExpressionManager
      ->createRule();
    $this->assertSame(RulesComponent::create($rule)->getExpression(), $rule);
  }
  
  /**
   * @covers ::getContextDefinitions
   */
  public function testGetContextDefinitions() {
    $rule = $this->rulesExpressionManager
      ->createRule();
    $definition = ContextDefinition::create('string');
    $component = RulesComponent::create($rule)->addContextDefinition('test', $definition);
    $this->assertEquals(array_keys($component->getContextDefinitions()), [
      'test',
    ]);
    $this->assertSame($component->getContextDefinitions()['test'], $definition);
  }
  
  /**
   * @covers ::getProvidedContext
   */
  public function testGetProvidedContext() {
    $rule = $this->rulesExpressionManager
      ->createRule();
    $component = RulesComponent::create($rule)->provideContext('test');
    $this->assertEquals($component->getProvidedContext(), [
      'test',
    ]);
  }
  
  /**
   * @covers ::getState
   */
  public function testGetState() {
    $rule = $this->rulesExpressionManager
      ->createRule();
    $component = RulesComponent::create($rule);
    $this->assertInstanceOf(ExecutionStateInterface::class, $component->getState());
    // Test that set context values are available in the state.
    $component->addContextDefinition('foo', ContextDefinition::create('string'))
      ->setContextValue('foo', 'bar');
    $this->assertEquals($component->getState()
      ->getVariableValue('foo'), 'bar');
  }

}

Classes

Title Deprecated Summary
RulesComponentTest Tests the Rules component class.