function RulesTestCase::testReturningVariables

Same name in other branches
  1. 8.x-3.x d7-tests/rules_test_case.test \RulesTestCase::testReturningVariables()

Tests returning provided variables.

File

tests/rules.test, line 753

Class

RulesTestCase
Rules test cases.

Code

public function testReturningVariables() {
    $node = $this->drupalCreateNode();
    $action = rules_action('entity_fetch', array(
        'type' => 'node',
        'id' => $node->nid,
    ));
    list($node2) = $action->execute();
    $this->assertTrue($node2->nid == $node->nid, 'Action returned a variable.');
    // Create a simple set that just passed through the given node.
    $set = rules_rule_set(array(
        'node' => array(
            'type' => 'node',
        ),
    ), array(
        'node',
    ));
    $set->integrityCheck()
        ->save('rules_test_set_1');
    $provides = $set->providesVariables();
    $this->assertTrue($provides['node']['type'] == 'node', 'Rule set correctly passed through the node.');
    list($node2) = $set->execute($node);
    $this->assertTrue($node2->nid == $node->nid, 'Rule set returned a variable.');
    // Create an action set returning a variable that is no parameter.
    $set = rules_action_set(array(
        'node' => array(
            'type' => 'node',
            'parameter' => FALSE,
        ),
    ), array(
        'node',
    ));
    $set->action('entity_fetch', array(
        'type' => 'node',
        'id' => $node->nid,
    ))
        ->action('data_set', array(
        'data:select' => 'node',
        'value:select' => 'entity_fetched',
    ));
    $set->integrityCheck();
    list($node3) = $set->execute();
    $this->assertTrue($node3->nid == $node->nid, 'Action set returned a variable that has not been passed as parameter.');
    // Test the same again with a variable holding a not wrapped data type.
    $set = rules_action_set(array(
        'number' => array(
            'type' => 'integer',
            'parameter' => FALSE,
        ),
    ), array(
        'number',
    ));
    $set->action('data_set', array(
        'data:select' => 'number',
        'value' => 3,
    ));
    $set->integrityCheck();
    list($number) = $set->execute();
    $this->assertTrue($number == 3, 'Actions set returned a number.');
}