readmorecontrol.test in Read More Control 7
Tests for readmorecontrol.module.
File
readmorecontrol.testView source
<?php
/**
* @file
* Tests for readmorecontrol.module.
*/
/**
* Tests for number field types.
*/
class ReadMoreControlTestCase extends DrupalWebTestCase {
protected $field;
protected $instance;
protected $webUser;
/**
* Implements DrupalWebTestCase::getInfo().
*/
public static function getInfo() {
return array(
'name' => 'Base tests',
'description' => 'Test the creation of a number of fields and the responses found when looking for the Read more link on node entities.',
'group' => 'Read More Control',
);
}
/**
* Implements DrupalWebTestCase::setUp().
*/
function setUp() {
parent::setUp(array(
'field_test',
'readmorecontrol',
));
$this->webUser = $this
->drupalCreateUser(array(
'access field_test content',
'administer field_test content',
'administer content types',
'administer nodes',
'bypass node access',
));
$this
->drupalLogin($this->webUser);
}
/**
* Test that settings are saved against the node entity type and that these
* are updated if the content type is renamed.
*/
function testNodeTypeSettings() {
// See if our option shows up on the edit pages.
$this
->drupalGet('admin/structure/types/manage/page');
$this
->assertFieldChecked('edit-readmorecontrol-node-default');
$this
->assertNoFieldChecked('edit-readmorecontrol-node-when-required');
$this
->assertNoFieldChecked('edit-readmorecontrol-node-never');
$edit = array(
'readmorecontrol_behaviour__node_' => 'when_required',
);
$this
->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Basic page',
)));
// Check that there is no strange interaction with other types.
$this
->drupalGet('admin/structure/types/manage/article');
$this
->assertFieldChecked('edit-readmorecontrol-node-default');
$this
->drupalGet('admin/structure/types/manage/page');
$this
->assertFieldChecked('edit-readmorecontrol-node-when-required');
// Change type and test.
$edit = array(
'type' => 'pp',
);
$this
->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Basic page',
)));
$this
->drupalGet('admin/structure/types/manage/pp');
$this
->assertFieldChecked('edit-readmorecontrol-node-when-required');
// Check that there is no strange interaction with other types.
$this
->drupalGet('admin/structure/types/manage/article');
$this
->assertFieldChecked('edit-readmorecontrol-node-default');
$edit = array(
'readmorecontrol_behaviour__node_' => 'never',
);
$this
->drupalPost('admin/structure/types/manage/pp', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Basic page',
)));
$this
->drupalGet('admin/structure/types/manage/pp');
$this
->assertFieldChecked('edit-readmorecontrol-node-never');
// Revert type settings and test.
$edit = array(
'type' => 'page',
);
$this
->drupalPost('admin/structure/types/manage/pp', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Basic page',
)));
$this
->drupalGet('admin/structure/types/manage/page');
$this
->assertFieldChecked('edit-readmorecontrol-node-never');
$this
->drupalGet('admin/structure/types/manage/article');
$this
->assertFieldChecked('edit-readmorecontrol-node-default');
}
/**
* Tests three node content types and fields.
*
* The node bundles used are:
* - page
* - article
* - test
*
* We add one content type, test, and add fields to each:
* - long_text: A long text field with summary. (@todo)
* - number: An integer field.
* - short_text: An inline text field. (@todo)
* - options: A list field. (@todo)
*/
function testNodeEntities() {
// Add the third content type 'test'.
$this
->drupalGet('admin/structure/types/add');
$edit = array(
'name' => 'Test',
'type' => 'test',
);
$this
->drupalPost(NULL, $edit, t('Save and add fields'));
// Configure the settings for each type.
// Set the article type to always display.
$edit = array(
'readmorecontrol_behaviour__node_' => 'always',
);
$this
->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Basic page',
)));
// Set the article type to never display.
$edit = array(
'readmorecontrol_behaviour__node_' => 'never',
);
$this
->drupalPost('admin/structure/types/manage/article', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Article',
)));
// Set the test type to conditionally display.
$edit = array(
'readmorecontrol_behaviour__node_' => 'when_required',
);
$this
->drupalPost('admin/structure/types/manage/test', $edit, t('Save content type'));
$this
->assertRaw(t('The content type %type has been updated.', array(
'%type' => 'Test',
)));
// Creates the number field 'field_number' with display set to
// 'number_unformatted'.
$this
->addNumberIntegerField('node', 'page');
$this
->addNumberIntegerField('node', 'article');
$this
->addNumberIntegerField('node', 'test');
// Normalise the defaults formatter settings to be equal.
// Update all teaser displays to have the same settings as the full display.
$edit = array(
'fields[body][type]' => 'text_default',
'fields[field_number][type]' => 'number_integer',
);
$this
->drupalPost('admin/structure/types/manage/page/display', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/test/display', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/page/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/test/display/teaser', $edit, t('Save'));
// Article has tags and image too.
$edit = array(
'fields[body][type]' => 'text_default',
'fields[field_number][type]' => 'number_integer',
'fields[field_tags][type]' => 'taxonomy_term_reference_link',
'fields[field_image][type]' => 'hidden',
);
$this
->drupalPost('admin/structure/types/manage/article/display', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/article/display/teaser', $edit, t('Save'));
// Test empty fields. If all fields are empty, no read more should appear.
$langcode = LANGUAGE_NONE;
$edit = array();
$edit['status'] = 1;
$edit['promote'] = 1;
$node_page = $this
->createNode('page', $edit);
$page_more_link = t('Read more<span class="element-invisible"> about @title</span>', array(
'@title' => strip_tags($node_page->title),
));
$node_article = $this
->createNode('article', $edit);
$article_more_link = t('Read more<span class="element-invisible"> about @title</span>', array(
'@title' => strip_tags($node_article->title),
));
$node_test = $this
->createNode('test', $edit);
$test_more_link = t('Read more<span class="element-invisible"> about @title</span>', array(
'@title' => strip_tags($node_test->title),
));
// Page always displays, article never does and test is conditional.
$this
->drupalGet('node');
$this
->assertText($node_page->title);
$this
->assertText($node_article->title);
$this
->assertText($node_test->title);
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
// The empty fields should never trigger a read more link.
$this
->assertNoRaw($test_more_link);
// Create a large text chunk.
$text = $this
->randomName(10000);
$node_page->body[$langcode][0]['value'] = $text;
node_save($node_page);
$node_article->body[$langcode][0]['value'] = $text;
node_save($node_article);
$node_test->body[$langcode][0]['value'] = $text;
node_save($node_test);
$this
->drupalGet('node');
$this
->assertText($node_page->title);
$this
->assertText($node_article->title);
$this
->assertText($node_test->title);
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
// The body field shouldn't trigger a read more link as the displays are
// now the same.
$this
->assertNoRaw($test_more_link);
// Update all teaser displays to show reduced size, 600 by default.
$edit = array(
'fields[body][type]' => 'text_summary_or_trimmed',
);
$this
->drupalPost('admin/structure/types/manage/page/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/test/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/article/display/teaser', $edit, t('Save'));
// The body field should trigger a read more link.
$this
->drupalGet('node');
$this
->assertText($node_page->title);
$this
->assertText($node_article->title);
$this
->assertText($node_test->title);
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
$this
->assertRaw($test_more_link);
// Short text should not trigger it.
$text = $this
->randomName(10);
$node_page->body[$langcode][0]['value'] = $text;
node_save($node_page);
$node_article->body[$langcode][0]['value'] = $text;
node_save($node_article);
$node_test->body[$langcode][0]['value'] = $text;
node_save($node_test);
$this
->drupalGet('node');
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
$this
->assertNoRaw($test_more_link);
// Set an integer value.
$node_page->field_number[$langcode][0]['value'] = 123;
$node_page->body[$langcode][0]['value'] = '';
node_save($node_page);
$node_article->body[$langcode][0]['value'] = '';
$node_article->field_number[$langcode][0]['value'] = 123;
node_save($node_article);
$node_test->body[$langcode][0]['value'] = '';
$node_test->field_number[$langcode][0]['value'] = 123;
node_save($node_test);
$this
->drupalGet('node');
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
$this
->assertNoRaw($test_more_link);
// Update all teaser displays to have the same settings as the full display.
$edit = array(
'fields[field_number][type]' => 'hidden',
);
$this
->drupalPost('admin/structure/types/manage/page/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/test/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/article/display/teaser', $edit, t('Save'));
$this
->drupalGet('node');
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
$this
->assertRaw($test_more_link);
// A different display will trigger a read-more link.
$edit = array(
'fields[field_number][type]' => 'number_unformatted',
);
$this
->drupalPost('admin/structure/types/manage/page/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/test/display/teaser', $edit, t('Save'));
$this
->drupalPost('admin/structure/types/manage/article/display/teaser', $edit, t('Save'));
$this
->drupalGet('node');
$this
->assertRaw($page_more_link);
$this
->assertNoRaw($article_more_link);
$this
->assertRaw($test_more_link);
// The same display will not trigger a read-more link.
$edit = array(
'fields[field_number][type]' => 'number_integer',
);
$this
->drupalPost('admin/structure/types/manage/article/display/teaser', $edit, t('Save'));
$this
->drupalGet('node');
// Conditional.
$this
->assertRaw($test_more_link);
}
/**
* Adds a number_integer field and sets the default formatter options.
*/
function addNumberIntegerField($entity_type, $entity_bundle, $field_name = 'field_number', $display = 'number_unformatted') {
// Create a field with settings to validate.
$field = field_info_field($field_name);
if (empty($field)) {
$field = array(
'field_name' => $field_name,
'type' => 'number_integer',
'settings' => array(),
);
field_create_field($field);
}
$instance = field_info_instance($entity_type, $field_name, $entity_bundle);
if (!$instance) {
$instance = array(
'field_name' => $field_name,
'entity_type' => $entity_type,
'bundle' => $entity_bundle,
'widget' => array(
'type' => 'number',
),
'display' => array(
'default' => array(
'type' => $display,
),
),
);
field_create_instance($instance);
}
else {
// Updates the formatter if required.
$this
->setNodeFieldDisplay($entity_type, $field_name, $display);
}
}
/**
* Helper method to set a node field display.
*/
function setNodeFieldDisplay($entity_type, $field_name, $display) {
$this
->drupalGet("admin/structure/types/manage/{$entity_type}/display");
$edit = array(
"fields[{$field_name}][type]" => $display,
);
$this
->drupalPost(NULL, $edit, t('Save'));
}
/**
* Helper method to create a new node.
*/
function createNode($bundle, $edit = array()) {
$edit['title'] = $this
->randomName(8);
$this
->drupalPost("node/add/{$bundle}", $edit, t('Save'));
// Check that the node exists in the database.
return $this
->drupalGetNodeByTitle($edit['title']);
}
/**
* Helper method to load a node from a title.
*/
function drupalGetNodeByTitle($title, $reset = FALSE) {
// Load the first node returned from the database.
$nodes = node_load_multiple(array(), array(
'title' => $title,
), $reset);
$node = reset($nodes);
return $node;
}
}
Classes
Name | Description |
---|---|
ReadMoreControlTestCase | Tests for number field types. |