function viewsFieldApiDataTest::testViewsData

Unit testing the views data structure.

We check data structure for both node and node revision tables.

File

tests/field/views_fieldapi.test, line 198

Class

viewsFieldApiDataTest
Test the produced views_data.

Code

public function testViewsData() {
    $data = views_fetch_data();
    // Check the table and the joins of the first field.
    // Attached to node only.
    $field = $this->fields[0];
    $current_table = _field_sql_storage_tablename($field);
    $revision_table = _field_sql_storage_revision_tablename($field);
    $this->assertTrue(isset($data[$current_table]));
    $this->assertTrue(isset($data[$revision_table]));
    // The node field should join against node.
    $this->assertTrue(isset($data[$current_table]['table']['join']['node']));
    $this->assertTrue(isset($data[$revision_table]['table']['join']['node_revision']));
    $expected_join = array(
        'left_field' => 'nid',
        'field' => 'entity_id',
        'extra' => array(
            array(
                'field' => 'entity_type',
                'value' => 'node',
            ),
            array(
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ),
        ),
    );
    $this->assertEqual($expected_join, $data[$current_table]['table']['join']['node']);
    $expected_join = array(
        'left_field' => 'vid',
        'field' => 'revision_id',
        'extra' => array(
            array(
                'field' => 'entity_type',
                'value' => 'node',
            ),
            array(
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ),
        ),
    );
    $this->assertEqual($expected_join, $data[$revision_table]['table']['join']['node_revision']);
    // Check the table and the joins of the second field.
    // Attached to both node and user.
    $field_2 = $this->fields[2];
    $current_table_2 = _field_sql_storage_tablename($field_2);
    $revision_table_2 = _field_sql_storage_revision_tablename($field_2);
    $this->assertTrue(isset($data[$current_table_2]));
    $this->assertTrue(isset($data[$revision_table_2]));
    // The second field should join against both node and users.
    $this->assertTrue(isset($data[$current_table_2]['table']['join']['node']));
    $this->assertTrue(isset($data[$revision_table_2]['table']['join']['node_revision']));
    $this->assertTrue(isset($data[$current_table_2]['table']['join']['users']));
    $expected_join = array(
        'left_field' => 'nid',
        'field' => 'entity_id',
        'extra' => array(
            array(
                'field' => 'entity_type',
                'value' => 'node',
            ),
            array(
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ),
        ),
    );
    $this->assertEqual($expected_join, $data[$current_table_2]['table']['join']['node']);
    $expected_join = array(
        'left_field' => 'vid',
        'field' => 'revision_id',
        'extra' => array(
            array(
                'field' => 'entity_type',
                'value' => 'node',
            ),
            array(
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ),
        ),
    );
    $this->assertEqual($expected_join, $data[$revision_table_2]['table']['join']['node_revision']);
    $expected_join = array(
        'left_field' => 'uid',
        'field' => 'entity_id',
        'extra' => array(
            array(
                'field' => 'entity_type',
                'value' => 'user',
            ),
            array(
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ),
        ),
    );
    $this->assertEqual($expected_join, $data[$current_table_2]['table']['join']['users']);
    // @todo Check the fields.
    // @todo Check the arguments.
    // @todo Check the sort criterias.
    // @todo Check the relationships.
}