function RdfRdfaMarkupTestCase::testAttributesInMarkupFile

Ensure that file fields have the correct resource as the object in RDFa when displayed as a teaser.

File

modules/rdf/rdf.test, line 121

Class

RdfRdfaMarkupTestCase
Test RDFa markup generation.

Code

function testAttributesInMarkupFile() {
    // Create a user to post the image.
    $admin_user = $this->drupalCreateUser(array(
        'edit own article content',
        'revert revisions',
        'administer content types',
    ));
    $this->drupalLogin($admin_user);
    $langcode = LANGUAGE_NONE;
    $bundle_name = "article";
    $field_name = 'file_test';
    $field = array(
        'field_name' => $field_name,
        'type' => 'file',
    );
    field_create_field($field);
    $instance = array(
        'field_name' => $field_name,
        'entity_type' => 'node',
        'bundle' => $bundle_name,
        'display' => array(
            'teaser' => array(
                'type' => 'file_default',
            ),
        ),
    );
    field_create_instance($instance);
    // Set the RDF mapping for the new field.
    $rdf_mapping = rdf_mapping_load('node', $bundle_name);
    $rdf_mapping += array(
        $field_name => array(
            'predicates' => array(
                'rdfs:seeAlso',
            ),
            'type' => 'rel',
        ),
    );
    $rdf_mapping_save = array(
        'mapping' => $rdf_mapping,
        'type' => 'node',
        'bundle' => $bundle_name,
    );
    rdf_mapping_save($rdf_mapping_save);
    // Get the test file that simpletest provides.
    $file = current($this->drupalGetTestFiles('text'));
    // Prepare image variables.
    $image_field = "field_image";
    // Get the test image that simpletest provides.
    $image = current($this->drupalGetTestFiles('image'));
    // Create an array for drupalPost with the field names as the keys and
    // the URIs for the test files as the values.
    $edit = array(
        "files[" . $field_name . "_" . $langcode . "_0]" => drupal_realpath($file->uri),
        "files[" . $image_field . "_" . $langcode . "_0]" => drupal_realpath($image->uri),
    );
    // Create node and save, then edit node to upload files.
    $node = $this->drupalCreateNode(array(
        'type' => 'article',
        'promote' => 1,
    ));
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
    // Get filenames and nid for comparison with HTML output.
    $file_filename = $file->filename;
    $image_filename = $image->filename;
    $nid = $node->nid;
    // Navigate to front page, where node is displayed in teaser form.
    $this->drupalGet('node');
    // We only check to make sure that the resource attribute contains '.txt'
    // instead of the full file name because the filename is altered on upload.
    $file_rel = $this->xpath('//div[contains(@about, :node-uri)]//div[contains(@rel, "rdfs:seeAlso") and contains(@resource, ".txt")]', array(
        ':node-uri' => 'node/' . $nid,
    ));
    $this->assertTrue(!empty($file_rel), "Attribute 'rel' set on file field. Attribute 'resource' is also set.");
    $image_rel = $this->xpath('//div[contains(@about, :node-uri)]//div[contains(@rel, "rdfs:seeAlso") and contains(@resource, :image)]//img[contains(@typeof, "foaf:Image")]', array(
        ':node-uri' => 'node/' . $nid,
        ':image' => $image_filename,
    ));
    $this->assertTrue(!empty($image_rel), "Attribute 'rel' set on image field. Attribute 'resource' is also set.");
    // Edits the node to add tags.
    $tag1 = $this->randomName(8);
    $tag2 = $this->randomName(8);
    $edit = array();
    $edit['field_tags[' . LANGUAGE_NONE . ']'] = "{$tag1}, {$tag2}";
    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
    // Ensures the RDFa markup for the relationship between the node and its
    // tags is correct.
    $term_rdfa_meta = $this->xpath('//div[@about=:node-url and contains(@typeof, "sioc:Item") and contains(@typeof, "foaf:Document")]//ul[@class="links"]/li[@rel="dc:subject"]/a[@typeof="skos:Concept" and @datatype="" and text()=:term-name]', array(
        ':node-url' => url('node/' . $node->nid),
        ':term-name' => $tag1,
    ));
    $this->assertTrue(!empty($term_rdfa_meta), 'Property dc:subject is present for the tag1 field item.');
    $term_rdfa_meta = $this->xpath('//div[@about=:node-url and contains(@typeof, "sioc:Item") and contains(@typeof, "foaf:Document")]//ul[@class="links"]/li[@rel="dc:subject"]/a[@typeof="skos:Concept" and @datatype="" and text()=:term-name]', array(
        ':node-url' => url('node/' . $node->nid),
        ':term-name' => $tag2,
    ));
    $this->assertTrue(!empty($term_rdfa_meta), 'Property dc:subject is present for the tag2 field item.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.