Commit 1af32393 authored by Dries's avatar Dries

Issue #1869914 by scor: Refactor RdfMappingDefinitionTestCase and split it in dedicated test cases.

parent 71364b1a
......@@ -2,17 +2,17 @@
/**
* @file
* Definition of Drupal\rdf\Tests\MappingDefinitionTest.
* Contains Drupal\rdf\Tests\MappingDefinitionTest.
*/
namespace Drupal\rdf\Tests;
use Drupal\taxonomy\Tests\TaxonomyTestBase;
use Drupal\node\Tests\NodeTestBase;
/**
* Tests the RDF mapping definition functionality.
*/
class MappingDefinitionTest extends TaxonomyTestBase {
class MappingDefinitionTest extends NodeTestBase {
/**
* Modules to enable.
......@@ -21,139 +21,115 @@ class MappingDefinitionTest extends TaxonomyTestBase {
*/
public static $modules = array('rdf', 'rdf_test');
protected $profile = 'standard';
public static function getInfo() {
return array(
'name' => 'RDF mapping definition functionality',
'description' => 'Test the different types of RDF mappings and ensure the proper RDFa markup in included in nodes and user profile pages.',
'description' => 'Tests that RDF definitions are properly attached to entities.',
'group' => 'RDF',
);
}
function setUp() {
parent::setUp();
// NodeTestBase creates page content type for us.
// Defines RDF mapping for page content type.
$page_rdf_mapping = array(
'type' => 'node',
'bundle' => 'page',
'mapping' => array(
'rdftype' => array('foaf:DocumentBar'),
'body' => array(
'predicates' => array('dc:dummy-property'),
),
'created' => array(
'predicates' => array('dc:dummy-date'),
'callback' => 'date_iso8601_foo',
'datatype' => 'xsd:dateTimeFoo',
),
),
);
rdf_mapping_save($page_rdf_mapping);
}
/**
* Create a node of type article and test whether the RDF mapping defined for
* this node type in rdf_test.module is used in the node page.
* Creates a node of type page and tests whether the RDF mapping is
* attached to the node.
*/
function testAttributesInMarkup1() {
$node = $this->drupalCreateNode(array('type' => 'article'));
$isoDate = date('c', $node->changed);
$url = url('node/' . $node->nid);
$this->drupalGet('node/' . $node->nid);
// Ensure the default bundle mapping for node is used. These attributes come
// from the node default bundle definition.
$node_title = $this->xpath("//meta[@property='dc:title' and @content='$node->title']");
$node_meta = $this->xpath("//article[(@about='$url')]//span[contains(@property, 'dc:date') and contains(@property, 'dc:created') and @datatype='xsd:dateTime' and @content='$isoDate']");
$this->assertTrue(!empty($node_title), 'Property dc:title is present in meta tag.');
$this->assertTrue(!empty($node_meta), 'RDF type is present on post. Properties dc:date and dc:created are present on post date.');
function testMappingDefinitionPage() {
$node = $this->drupalCreateNode(array('type' => 'page'));
$expected_mapping = array(
'rdftype' => array('foaf:DocumentBar'),
'title' => array(
'predicates' => array('dc:title'),
),
'body' => array(
'predicates' => array('dc:dummy-property'),
),
'created' => array(
'predicates' => array('dc:dummy-date'),
'callback' => 'date_iso8601_foo',
'datatype' => 'xsd:dateTimeFoo',
),
);
$node = node_load($node->nid);
foreach ($expected_mapping as $key => $mapping) {
$this->assertEqual($node->rdf_mapping[$key], $mapping, format_string('Expected mapping found for @key.', array('@key' => $key)));
}
}
/**
* Tests if RDF mapping defined in rdf_test.install is used.
*
* Creates a content type and a node of type test_bundle_hook_install and
* tests whether the RDF mapping defined in rdf_test.install is used.
*/
function testAttributesInMarkup2() {
$type = $this->drupalCreateContentType(array('type' => 'test_bundle_hook_install'));
function testMappingDefinitionTestBundleInstall() {
$this->drupalCreateContentType(array('type' => 'test_bundle_hook_install'));
$node = $this->drupalCreateNode(array('type' => 'test_bundle_hook_install'));
$isoDate = date('c', $node->changed);
$url = url('node/' . $node->nid);
$this->drupalGet('node/' . $node->nid);
// Ensure the mapping defined in rdf_module.test is used.
$test_bundle_title = $this->xpath("//meta[@property='dc:title' and @content='$node->title']");
$test_bundle_meta = $this->xpath("//article[(@about='$url') and contains(@typeof, 'foo:mapping_install1') and contains(@typeof, 'bar:mapping_install2')]//span[contains(@property, 'dc:date') and contains(@property, 'dc:created') and @datatype='xsd:dateTime' and @content='$isoDate']");
$this->assertTrue(!empty($test_bundle_title), 'Property dc:title is present in meta tag.');
$this->assertTrue(!empty($test_bundle_meta), 'RDF type is present on post. Properties dc:date and dc:created are present on post date.');
$expected_mapping = array(
'rdftype' => array('foo:mapping_install1', 'bar:mapping_install2'),
'title' => array(
'predicates' => array('dc:title'),
),
'body' => array(
'predicates' => array('content:encoded'),
),
'created' => array(
'predicates' => array('dc:date', 'dc:created'),
'callback' => 'date_iso8601',
'datatype' => 'xsd:dateTime',
),
);
$node = node_load($node->nid);
foreach ($expected_mapping as $key => $mapping) {
$this->assertEqual($node->rdf_mapping[$key], $mapping, format_string('Expected mapping found for @key.', array('@key' => $key)));
}
}
/**
* Tests if the default mapping for a node is being used.
*
* Creates a random content type and node and ensures the default mapping for
* the node is being used.
*/
function testAttributesInMarkup3() {
function testMappingDefinitionRandomContentType() {
$type = $this->drupalCreateContentType();
$node = $this->drupalCreateNode(array('type' => $type->type));
$isoDate = date('c', $node->changed);
$url = url('node/' . $node->nid);
$this->drupalGet('node/' . $node->nid);
// Ensure the default bundle mapping for node is used. These attributes come
// from the node default bundle definition.
$random_bundle_title = $this->xpath("//meta[@property='dc:title' and @content='$node->title']");
$random_bundle_meta = $this->xpath("//article[(@about='$url') and contains(@typeof, 'sioc:Item') and contains(@typeof, 'foaf:Document')]//span[contains(@property, 'dc:date') and contains(@property, 'dc:created') and @datatype='xsd:dateTime' and @content='$isoDate']");
$this->assertTrue(!empty($random_bundle_title), 'Property dc:title is present in meta tag.');
$this->assertTrue(!empty($random_bundle_meta), 'RDF type is present on post. Properties dc:date and dc:created are present on post date.');
}
/**
* Tests if default mapping for user is being used.
*
* Creates a random user and ensures the default mapping for the user is
* being used.
*/
function testUserAttributesInMarkup() {
// Create two users, one with access to user profiles.
$user1 = $this->drupalCreateUser(array('access user profiles'));
$user2 = $this->drupalCreateUser();
$username = $user2->name;
$this->drupalLogin($user1);
// Browse to the user profile page.
$this->drupalGet('user/' . $user2->uid);
// Ensure the default bundle mapping for user is used on the user profile
// page. These attributes come from the user default bundle definition.
$account_uri = url('user/' . $user2->uid);
$person_uri = url('user/' . $user2->uid, array('fragment' => 'me'));
$user2_profile_about = $this->xpath('//article[@class="profile" and @typeof="sioc:UserAccount" and @about=:account-uri]', array(
':account-uri' => $account_uri,
));
$this->assertTrue(!empty($user2_profile_about), 'RDFa markup found on user profile page');
$user_account_holder = $this->xpath('//meta[contains(@typeof, "foaf:Person") and @about=:person-uri and @resource=:account-uri and contains(@rel, "foaf:account")]', array(
':person-uri' => $person_uri,
':account-uri' => $account_uri,
));
$this->assertTrue(!empty($user_account_holder), 'URI created for account holder and username set on sioc:UserAccount.');
$user_username = $this->xpath('//meta[@about=:account-uri and contains(@property, "foaf:name") and @content=:username]', array(
':account-uri' => $account_uri,
':username' => $username,
));
$this->assertTrue(!empty($user_username), 'foaf:name set on username.');
// User 2 creates node.
$this->drupalLogin($user2);
$node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
$this->drupalLogin($user1);
$this->drupalGet('node/' . $node->nid);
// Ensures the default bundle mapping for user is used on the Authored By
// information on the node.
$author_about = $this->xpath('//a[@typeof="sioc:UserAccount" and @about=:account-uri and @property="foaf:name" and @datatype="" and contains(@lang, "")]', array(
':account-uri' => $account_uri,
));
$this->assertTrue(!empty($author_about), 'RDFa markup found on author information on post. The lang attribute on username is set to empty string.');
}
/**
* Creates a random term and ensures the right RDFa markup is used.
*/
function testTaxonomyTermRdfaAttributes() {
$vocabulary = $this->createVocabulary();
$term = $this->createTerm($vocabulary);
// Views the term and checks that the RDFa markup is correct.
$this->drupalGet('taxonomy/term/' . $term->tid);
$term_url = url('taxonomy/term/' . $term->tid);
$term_label = $term->label();
$term_rdfa_meta = $this->xpath('//meta[@typeof="skos:Concept" and @about=:term-url and contains(@property, "rdfs:label") and contains(@property, "skos:prefLabel") and @content=:term-label]', array(
':term-url' => $term_url,
':term-label' => $term_label,
));
$this->assertTrue(!empty($term_rdfa_meta), 'RDFa markup found on term page.');
$expected_mapping = array(
'rdftype' => array('sioc:Item', 'foaf:Document'),
'title' => array(
'predicates' => array('dc:title'),
),
'body' => array(
'predicates' => array('content:encoded'),
),
'created' => array(
'predicates' => array('dc:date', 'dc:created'),
'callback' => 'date_iso8601',
'datatype' => 'xsd:dateTime',
),
);
$node = node_load($node->nid);
foreach ($expected_mapping as $key => $mapping) {
$this->assertEqual($node->rdf_mapping[$key], $mapping, format_string('Expected mapping found for @key.', array('@key' => $key)));
}
}
}
<?php
/**
* @file
* Contains Drupal\rdf\Tests\NodeAttributesTest.
*/
namespace Drupal\rdf\Tests;
use Drupal\node\Tests\NodeTestBase;
/**
* Tests the RDFa markup of Nodes.
*/
class NodeAttributesTest extends NodeTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('rdf');
public static function getInfo() {
return array(
'name' => 'RDFa markup for nodes',
'description' => 'Tests the RDFa markup of nodes.',
'group' => 'RDF',
);
}
/**
* Creates a node of type article and tests its RDFa markup.
*/
function testNodeAttributes() {
$node = $this->drupalCreateNode(array('type' => 'article'));
$node_uri = url('node/' . $node->nid, array('absolute' => TRUE));
$base_uri = url('<front>', 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/' . $node->nid), 'rdfa', $base_uri);
// Inspects RDF graph output.
// Node type.
$expected_value = array(
'type' => 'uri',
'value' => 'http://rdfs.org/sioc/ns#Item',
);
$this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (sioc:Item).');
// Node type.
$expected_value = array(
'type' => 'uri',
'value' => 'http://xmlns.com/foaf/0.1/Document',
);
$this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Node type found in RDF output (foaf:Document).');
// Node title.
$expected_value = array(
'type' => 'literal',
'value' => $node->title,
'lang' => 'en',
);
$this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Node title found in RDF output (dc:title).');
// Node date.
$expected_value = array(
'type' => 'literal',
'value' => date('c', $node->created),
'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
);
$this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Node date found in RDF output (dc:date).');
// Node date.
$expected_value = array(
'type' => 'literal',
'value' => date('c', $node->created),
'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
);
$this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Node date found in RDF output (dc:created).');
}
}
<?php
/**
* @file
* Contains Drupal\rdf\Tests\TaxonomyAttributesTest.
*/
namespace Drupal\rdf\Tests;
use Drupal\taxonomy\Tests\TaxonomyTestBase;
/**
* Tests the RDFa markup of Taxonomy terms.
*/
class TaxonomyAttributesTest extends TaxonomyTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('rdf');
public static function getInfo() {
return array(
'name' => 'RDFa markup for taxonomy terms',
'description' => 'Tests the RDFa markup of taxonomy terms.',
'group' => 'RDF',
);
}
/**
* Creates a random term and ensures the RDF output is correct.
*/
function testTaxonomyTermRdfaAttributes() {
$vocabulary = $this->createVocabulary();
$term = $this->createTerm($vocabulary);
$term_uri = url('taxonomy/term/' . $term->tid, array('absolute' => TRUE));
// Parses the term's page and checks that the RDF output is correct.
$parser = new \EasyRdf_Parser_Rdfa();
$graph = new \EasyRdf_Graph();
$base_uri = url('<front>', array('absolute' => TRUE));
$parser->parse($graph, $this->drupalGet('taxonomy/term/' . $term->tid), 'rdfa', $base_uri);
// Inspects RDF graph output.
// Term type.
$expected_value = array(
'type' => 'uri',
'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
);
$this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Term type found in RDF output (skos:Concept).');
// Term label.
$expected_value = array(
'type' => 'literal',
'value' => $term->label(),
'lang' => 'en',
);
$this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Term label found in RDF output (rdfs:label).');
// Term label.
$expected_value = array(
'type' => 'literal',
'value' => $term->label(),
'lang' => 'en',
);
$this->assertTrue($graph->hasProperty($term_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Term label found in RDF output (skos:prefLabel).');
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment