You are here

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);
}