1 node.test | PagePreviewTestCase::testPagePreview() |
Checks the node preview functionality.
File
- core/
modules/ node/ tests/ node.test, line 598 - Tests for node.module.
Class
- PagePreviewTestCase
- Tests the node entity preview functionality.
Code
function testPagePreview() {
$langcode = LANGUAGE_NONE;
$title_key = "title";
$body_key = "body[$langcode][0][value]";
$term_key = "{$this->field_name}[$langcode]";
$email_key = "{$this->field_email_name}[$langcode][0][email]";
// Test turning off preview.
$edit = array(
'node_preview' => 0,
);
$this->backdropPost('admin/structure/types/manage/page', $edit, t('Save content type'));
// Refresh the field information for the rest of the test.
field_info_cache_clear();
$this->backdropGet('node/add/page');
$this->assertNoFieldById('edit-preview', t('Preview'), 'Preview button not found.');
// Turn it back on and test functionality.
$edit = array(
'node_preview' => 1,
);
$this->backdropPost('admin/structure/types/manage/page', $edit, t('Save content type'));
// Refresh the field information for the rest of the test.
field_info_cache_clear();
// Fill in node creation form and preview node.
$edit = array();
$edit[$title_key] = $this->randomName(8);
$edit[$body_key] = $this->randomName(16);
$edit[$term_key] = $this->term->tid;
$edit[$email_key] = 'email_key@example.com';
$this->backdropPost('node/add/page', $edit, t('Preview'));
// Check that the preview is displaying the title and body, but not term.
$this->assertTitle(t('@title | Backdrop CMS', array('@title' => $edit[$title_key])), 'Basic page title is preview.');
$this->assertLink(t('Back to content editing'));
$this->assertText($edit[$title_key], 'Title displayed.');
$this->assertText($edit[$body_key], 'Body displayed.');
$this->assertText($edit[$email_key], 'Email displayed.');
$this->assertNoText($this->term->name, 'Term not displayed.');
// Make sure that the preview warnings are only shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
// Change the view mode.
$teaser_edit = array();
$teaser_edit['view_mode'] = 'teaser';
$this->backdropPost(NULL, $teaser_edit, t('Switch'));
// Make sure that the warnings are still shown, and that they are only shown
// once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
// Check that the preview is displaying the title, body, and term.
$this->assertText($edit[$title_key], 'Title displayed.');
$this->assertText($edit[$body_key], 'Body displayed.');
$this->assertNoText($edit[$email_key], 'Email not displayed.');
$this->assertText($this->term->name, 'Term displayed.');
// Return to the node edit page and check field values.
$this->clickLink('Back to content editing');
$this->assertFieldByName($title_key, $edit[$title_key], 'Title field displayed.');
$this->assertFieldByName($body_key, $edit[$body_key], 'Body field displayed.');
$this->assertFieldByName($term_key, $edit[$term_key], 'Term field displayed.');
$this->assertFieldByName($email_key, $edit[$email_key], 'Email field displayed.');
// Return to preview and save.
$this->backdropPost(NULL, $edit, t('Preview'));
$this->assertText($edit[$title_key], 'Title displayed.');
$this->assertText($edit[$body_key], 'Body displayed.');
$this->assertText($edit[$email_key], 'Email displayed.');
$this->assertNoText($this->term->name, 'Term not displayed.');
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
$this->backdropPost(NULL, array(), t('Save'));
$this->assertRaw(t('!post %title has been created.', array('!post' => 'Page', '%title' => $edit["title"])), 'Page created.');
$this->assertText($edit[$title_key], 'Title displayed.');
$this->assertText($edit[$body_key], 'Body displayed.');
$this->assertText($edit[$email_key], 'Email displayed.');
$this->assertNoText($this->term->name, 'Term not displayed.');
// Make sure that the preview warnings are NOT shown after saving the node.
$this->assertNoText(t('This is a preview. Links within the page are disabled.'), 'Preview warning NOT displayed.');
$this->assertNoText(t('Changes are stored temporarily.'), 'Temporary changes warning NOT displayed.');
// Edit an existing node to check preview works.
$this->clickLink('Edit');
$this->backdropPost(NULL, $edit, t('Preview'));
$this->assertText($edit[$title_key], 'Title displayed.');
$this->assertText($edit[$body_key], 'Body displayed.');
$this->assertText($edit[$email_key], 'Email displayed.');
$this->assertNoText($this->term->name, 'Term not displayed.');
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
// Login as a second user with path permissions.
$web_user = $this->backdropCreateUser(array('bypass node access', 'administer nodes'));
$this->backdropLogin($web_user);
// Test node settings during preview.
$edit = array();
$name = $this->randomName(8);
$edit[$title_key] = $name;
$edit[$body_key] = $this->randomName(16);
$edit['status'] = 0;
$this->backdropPost('node/add/page', $edit, t('Preview'));
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
$this->assertNoText('This Page is unpublished.', 'Page is not in draft state.');
// Return to the node edit page and check field values.
$this->clickLink('Back to content editing');
$this->assertFieldByName('status', 0, 'Status is set to unpublished.');
// Save changes.
$this->assertNoText('This Page is unpublished.', 'Page is not in draft state.');
$this->backdropPost(NULL, array(), t('Save'));
// Make sure that the preview warnings are NOT shown after saving the node.
$this->assertNoText(t('This is a preview. Links within the page are disabled.'), 'Preview warning NOT displayed.');
$this->assertNoText(t('Changes are stored temporarily.'), 'Temporary changes warning NOT displayed.');
$node = $this->backdropGetNodeByTitle($name);
$this->assertEqual($node->status, '0', 'The node is in the state Draft.');
// Edit the node, check status, then preview and save.
$this->clickLink('Edit');
$this->assertFieldByName('status', 0, 'Status is set to unpublished.');
$name = $this->randomName(8);
$edit = array();
$edit[$title_key] = $name;
$edit['status'] = 2;
$edit['scheduled[date]'] = format_date(REQUEST_TIME + 360, 'custom', 'Y-m-d', $web_user->timezone);
$edit['scheduled[time]'] = format_date(REQUEST_TIME + 360, 'custom', 'H:i:s', $web_user->timezone);
$this->backdropPost(NULL, $edit, t('Preview'));
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
$this->backdropPost(NULL, array(), t('Save'));
// Make sure that the preview warnings are NOT shown after saving the node.
$this->assertNoText(t('This is a preview. Links within the page are disabled.'), 'Preview warning NOT displayed.');
$this->assertNoText(t('Changes are stored temporarily.'), 'Temporary changes warning NOT displayed.');
$node = $this->backdropGetNodeByTitle($name, TRUE);
$this->assertEqual($node->status, '0', 'The node is in the state Draft.');
$this->assertNotEqual($node->scheduled, 0, 'The node has a non zero published date.');
// Test that a user with permissions to create, but not edit, can still
// access preview.
$no_edit_user = $this->backdropCreateUser(array(
'create page content',
'access content',
));
$this->backdropLogin($no_edit_user);
// Fill in node creation form and preview node.
$name = $this->randomName(8);
$edit = array();
$edit[$title_key] = $name;
$edit[$body_key] = $this->randomName(16);
$this->backdropPost('node/add/page', $edit, t('Preview'));
$this->assertText($edit[$title_key], 'Title displayed.');
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
// Test that a user with permissions to edit, but not create, can still
// access preview.
$no_create_user = $this->backdropCreateUser(array(
'edit any page content',
'access content',
));
$this->backdropLogin($no_create_user);
$name = $this->randomName(8);
$node = $this->backdropCreateNode(array('type' => 'page', 'title' => $name));
$this->backdropGet('node/' . $node->nid);
$this->clickLink('Edit');
$this->backdropPost(NULL, array(), t('Preview'));
$this->assertText($name, 'Title displayed.');
// Make sure that the preview warnings are shown, and that they are only
// shown once.
$this->assertUniqueText(t('This is a preview. Links within the page are disabled.'), 'Preview warning displayed.');
$this->assertUniqueText(t('Changes are stored temporarily.'), 'Temporary changes warning displayed.');
$url = $this->getUrl();
// Test that a user with no create or edit permissions cannot access
// preview.
$no_create_edit_user = $this->backdropCreateUser(array(
'access content',
));
$this->backdropLogin($no_create_edit_user);
$this->backdropGet($url);
$this->assertResponse(403, 'Received 404 response from user attempting to directly access preview.');
}