RdfaMarkupTest.php

Definition of Drupal\rdf\Tests\RdfaMarkupTest.

Namespace

Drupal\rdf\Tests

File

drupal/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
View source
<?php

/**
 * @file
 * Definition of Drupal\rdf\Tests\RdfaMarkupTest.
 */
namespace Drupal\rdf\Tests;

use Drupal\Core\Language\Language;
use Drupal\simpletest\WebTestBase;

/**
 * Tests RDFa markup generation.
 */
class RdfaMarkupTest extends WebTestBase {

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = array(
    'rdf',
    'entity_test',
    'rdf_test',
  );
  protected $profile = 'standard';
  public static function getInfo() {
    return array(
      'name' => 'RDFa markup',
      'description' => 'Test RDFa markup generation.',
      'group' => 'RDF',
    );
  }

  /**
   * Tests rdf_rdfa_attributes().
   */
  function testDrupalRdfaAttributes() {

    // Same value as the one in the HTML tag (no callback function).
    $expected_attributes = array(
      'property' => array(
        'dc:title',
      ),
    );
    $mapping = rdf_mapping_load('entity_test', 'entity_test');
    $attributes = rdf_rdfa_attributes($mapping['title']);
    ksort($expected_attributes);
    ksort($attributes);
    $this
      ->assertEqual($expected_attributes, $attributes);

    // Value different from the one in the HTML tag (callback function).
    $date = 1252750327;
    $isoDate = date('c', $date);
    $expected_attributes = array(
      'datatype' => 'xsd:dateTime',
      'property' => array(
        'dc:created',
      ),
      'content' => $isoDate,
    );
    $mapping = rdf_mapping_load('entity_test', 'entity_test');
    $attributes = rdf_rdfa_attributes($mapping['created'], $date);
    ksort($expected_attributes);
    ksort($attributes);
    $this
      ->assertEqual($expected_attributes, $attributes);

    // Same value as the one in the HTML tag with datatype.
    $expected_attributes = array(
      'datatype' => 'foo:bar1type',
      'property' => array(
        'foo:bar1',
      ),
    );
    $mapping = rdf_mapping_load('entity_test', 'entity_test');
    $attributes = rdf_rdfa_attributes($mapping['foobar1']);
    ksort($expected_attributes);
    ksort($attributes);
    $this
      ->assertEqual($expected_attributes, $attributes);

    // ObjectProperty mapping (rel).
    $expected_attributes = array(
      'rel' => array(
        'sioc:has_creator',
        'dc:creator',
      ),
    );
    $mapping = rdf_mapping_load('entity_test', 'entity_test');
    $attributes = rdf_rdfa_attributes($mapping['foobar_objproperty1']);
    ksort($expected_attributes);
    ksort($attributes);
    $this
      ->assertEqual($expected_attributes, $attributes);

    // Inverse ObjectProperty mapping (rev).
    $expected_attributes = array(
      'rev' => array(
        'sioc:reply_of',
      ),
    );
    $mapping = rdf_mapping_load('entity_test', 'entity_test');
    $attributes = rdf_rdfa_attributes($mapping['foobar_objproperty2']);
    ksort($expected_attributes);
    ksort($attributes);
    $this
      ->assertEqual($expected_attributes, $attributes);
  }

  /**
   * Tests if file fields in teasers have correct resources.
   *
   * Ensure that file fields have the correct resource as the object in RDFa
   * when displayed as a teaser.
   */
  function testAttributesInMarkupFile() {

    // Create a user to post the image.
    $admin_user = $this
      ->drupalCreateUser(array(
      'edit own article content',
      'revert article revisions',
      'administer content types',
    ));
    $this
      ->drupalLogin($admin_user);
    $langcode = Language::LANGCODE_NOT_SPECIFIED;
    $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,
    );
    field_create_instance($instance);
    entity_get_form_display('node', $bundle_name, 'default')
      ->setComponent($field_name, array(
      'type' => 'file_generic',
    ))
      ->save();
    entity_get_display('node', $bundle_name, 'teaser')
      ->setComponent($field_name, array(
      'type' => 'file_default',
    ))
      ->save();

    // 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'));

    // Prepares filenames for lookup in RDF graph.
    $node = node_load($node->nid);
    $node_uri = url('node/' . $node->nid, array(
      'absolute' => TRUE,
    ));
    $file_uri = file_create_url(file_load($node->file_test['und'][0]['fid'])->uri);
    $image_uri = image_style_url('medium', file_load($node->field_image['und'][0]['fid'])->uri);
    $base_uri = url('<front>', array(
      'absolute' => TRUE,
    ));

    // Edits the node to add tags.
    $tag1 = $this
      ->randomName(8);
    $tag2 = $this
      ->randomName(8);
    $edit = array();
    $edit['field_tags[' . Language::LANGCODE_NOT_SPECIFIED . ']'] = "{$tag1}, {$tag2}";
    $this
      ->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
    $term_1_id = key(taxonomy_term_load_multiple_by_name($tag1));
    $taxonomy_term_1_uri = url('taxonomy/term/' . $term_1_id, array(
      'absolute' => TRUE,
    ));
    $term_2_id = key(taxonomy_term_load_multiple_by_name($tag2));
    $taxonomy_term_2_uri = url('taxonomy/term/' . $term_2_id, array(
      'absolute' => TRUE,
    ));

    // Parses front page where the node is displayed in its teaser form.
    $parser = new \EasyRdf_Parser_Rdfa();
    $graph = new \EasyRdf_Graph();
    $parser
      ->parse($graph, $this
      ->drupalGet('node'), 'rdfa', $base_uri);
    $rdf_output = $graph
      ->toArray();

    // Inspects RDF graph output.
    // Node relations to attached file.
    $expected_value = array(
      'type' => 'uri',
      'value' => $file_uri,
    );
    $this
      ->assertTrue($graph
      ->hasProperty($node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).');

    // Node relations to attached image.
    $expected_value = array(
      'type' => 'uri',
      'value' => $image_uri,
    );
    $this
      ->assertTrue($graph
      ->hasProperty($node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).');
    $expected_value = array(
      'type' => 'uri',
      'value' => $image_uri,
    );
    $this
      ->assertTrue($graph
      ->hasProperty($node_uri, 'http://ogp.me/ns#image', $expected_value), 'Node to file relation found in RDF output (og:image).');

    // Image type.
    $expected_value = array(
      'type' => 'uri',
      'value' => 'http://xmlns.com/foaf/0.1/Image',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($image_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Image type found in RDF output (foaf:Image).');

    // Node relations to taxonomy terms.
    $expected_value = array(
      'type' => 'uri',
      'value' => $taxonomy_term_1_uri,
    );
    $this
      ->assertTrue($graph
      ->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).');
    $expected_value = array(
      'type' => 'uri',
      'value' => $taxonomy_term_2_uri,
    );
    $this
      ->assertTrue($graph
      ->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).');

    // Taxonomy terms triples.
    // Term 1.
    $expected_value = array(
      'type' => 'uri',
      'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
    $expected_value = array(
      'type' => 'literal',
      'value' => $tag1,
      'lang' => 'en',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
    $expected_value = array(
      'type' => 'literal',
      'value' => $tag1,
      'lang' => 'en',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Taxonomy term name found in RDF output (skos:prefLabel).');

    // Term 2.
    $expected_value = array(
      'type' => 'uri',
      'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
    $expected_value = array(
      'type' => 'literal',
      'value' => $tag2,
      'lang' => 'en',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
    $expected_value = array(
      'type' => 'literal',
      'value' => $tag2,
      'lang' => 'en',
    );
    $this
      ->assertTrue($graph
      ->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Taxonomy term name found in RDF output (skos:prefLabel).');
  }

}

Classes

Namesort descending Description
RdfaMarkupTest Tests RDFa markup generation.