function ReadMoreControlTestCase::testNodeEntities in Read More Control 7
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)
File
- ./
readmorecontrol.test, line 107 - Tests for readmorecontrol.module.
Class
- ReadMoreControlTestCase
- Tests for number field types.
Code
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);
}