function MetadataAssertionTest::testAssertingWithLogicalOperations

Tests asserted metadata is handled correctly in OR and AND containers.

File

tests/src/Kernel/Engine/MetadataAssertionTest.php, line 102

Class

MetadataAssertionTest
Tests asserting metadata works correctly.

Namespace

Drupal\Tests\rules\Kernel\Engine

Code

public function testAssertingWithLogicalOperations() {
    // Add an nested AND and make sure it keeps working.
    $rule = $this->expressionManager
        ->createRule();
    $and = $this->expressionManager
        ->createAnd();
    $and->addCondition('rules_entity_is_of_bundle', ContextConfig::create()->map('entity', 'node')
        ->setValue('type', 'node')
        ->setValue('bundle', 'page'));
    $rule->addExpressionObject($and);
    $rule->addAction('rules_system_message', ContextConfig::create()->map('message', 'node.field_text.value')
        ->setValue('type', 'status'));
    $violation_list = RulesComponent::create($rule)->addContextDefinition('node', ContextDefinition::create('entity:node'))
        ->checkIntegrity();
    $this->assertCount(0, $violation_list);
    // Add an nested OR and make sure it is ignored.
    $rule = $this->expressionManager
        ->createRule();
    $or = $this->expressionManager
        ->createOr();
    $or->addCondition('rules_entity_is_of_bundle', ContextConfig::create()->map('entity', 'node')
        ->setValue('type', 'node')
        ->setValue('bundle', 'page'));
    $rule->addExpressionObject($or);
    $rule->addAction('rules_system_message', ContextConfig::create()->map('message', 'node.field_text.value')
        ->setValue('type', 'status'));
    $violation_list = RulesComponent::create($rule)->addContextDefinition('node', ContextDefinition::create('entity:node'))
        ->checkIntegrity();
    $this->assertCount(1, $violation_list);
}