You are here

public function CoreIntegrationTest::testGlobalContext in Rules 8.3

Tests using global context.

File

tests/src/Kernel/CoreIntegrationTest.php, line 290

Class

CoreIntegrationTest
Test using Drupal core integration of Rules API.

Namespace

Drupal\Tests\rules\Kernel

Code

public function testGlobalContext() {
  $account = User::create([
    'name' => 'hubert',
  ]);
  $account
    ->save();
  $this->container
    ->get('current_user')
    ->setAccount($account);
  $rule = $this->expressionManager
    ->createRule()
    ->addAction('rules_system_message', ContextConfig::create()
    ->map('message', '@user.current_user_context:current_user.name.value')
    ->setValue('type', 'status'));
  $component = RulesComponent::create($rule);
  $this
    ->assertEquals(0, $component
    ->checkIntegrity()
    ->count());

  // Ensure the execution-state is aware of global context.
  $result = $component
    ->getState()
    ->hasVariable('@user.current_user_context:current_user');
  $this
    ->assertTrue($result);

  // Test asking for non-existing variables.
  $this
    ->assertFalse($component
    ->getState()
    ->hasVariable('@user.current_user_context:invalid'));
  $this
    ->assertFalse($component
    ->getState()
    ->hasVariable('@user.invalid_service'));
  $this
    ->assertFalse($component
    ->getState()
    ->hasVariable('invalid-var'));

  // Test using global context during execution.
  $component
    ->execute();
  $messages = $this->messenger
    ->all();
  $this
    ->assertEquals((string) $messages[MessengerInterface::TYPE_STATUS][0], 'hubert');
}