1 node.test | NodeBlockFunctionalTest::testRecentNodeBlock() |
Tests the recent content block.
File
- core/
modules/ node/ tests/ node.test, line 2735 - Tests for node.module.
Class
- NodeBlockFunctionalTest
- Functional tests for the node module blocks.
Code
function testRecentNodeBlock() {
$this->backdropLogin($this->admin_user);
// Disallow anonymous users to view content.
user_role_change_permissions(BACKDROP_ANONYMOUS_ROLE, array(
'access content' => FALSE,
));
// Set the block to a region to confirm block is available.
$layout = layout_load('home');
$block = $layout->addBlock('node', 'recent', 'content');
// Set block title and variables.
$block_title = $this->randomName();
$block->settings['title'] = $block_title;
$block->settings['title_display'] = LAYOUT_TITLE_CUSTOM;
$block->settings['block_settings'] = array(
'node_count' => 2,
);
$layout->save();
// Test that block is not visible without nodes
$this->backdropGet('');
$this->assertText(t('No content available.'), 'Block with "No content available." found.');
// Add some test nodes.
$default_settings = array('uid' => $this->web_user->uid, 'type' => 'post');
$node1 = $this->backdropCreateNode($default_settings);
$node2 = $this->backdropCreateNode($default_settings);
$node3 = $this->backdropCreateNode($default_settings);
// Change the changed time for node so that we can test ordering.
db_update('node')
->fields(array(
'changed' => $node1->changed + 100,
))
->condition('nid', $node2->nid)
->execute();
db_update('node')
->fields(array(
'changed' => $node1->changed + 200,
))
->condition('nid', $node3->nid)
->execute();
// Test that a user without the 'access content' permission cannot
// see the block.
$this->backdropLogout();
$this->backdropGet('');
$this->assertNoText($block_title, t('Block was not found.'));
// Test that only the 2 latest nodes are shown.
$this->backdropLogin($this->web_user);
$this->backdropGet('');
$this->assertNoText($node1->title, t('Node not found in block.'));
$this->assertText($node2->title, t('Node found in block.'));
$this->assertText($node3->title, t('Node found in block.'));
// Check to make sure nodes are in the right order.
$this->assertTrue($this->xpath('//*[contains(@class,"block-node-recent")]/div/table/tbody/tr[position() = 1]/td/div/a[text() = "' . $node3->title . '"]'), t('Nodes were ordered correctly in block.'));
// Set the number of recent nodes to show to 10.
$this->backdropLogout();
$this->backdropLogin($this->admin_user);
$block->settings['block_settings'] = array(
'node_count' => 10,
);
$layout->save();
// Post an additional node.
$default_settings['type'] = 'page';
$node4 = $this->backdropCreateNode($default_settings);
// Clear page caches.
cache_clear_all();
// Test that all four nodes are shown.
$this->backdropGet('');
$this->assertText($node1->title, t('Node found in block.'));
$this->assertText($node2->title, t('Node found in block.'));
$this->assertText($node3->title, t('Node found in block.'));
$this->assertText($node4->title, t('Node found in block.'));
// Create the custom block.
$custom_block = array();
$custom_block['info'] = $this->randomName();
$custom_block['delta'] = strtolower($this->randomName(8));
$custom_block['title'] = $this->randomName();
$custom_block['body[value]'] = $this->randomName(32);
$this->backdropPost('admin/structure/block/add', $custom_block, t('Save block'));
// Add a new layout with the node/% path.
$edit = array(
'title' => 'Post layout',
'name' => 'post_layout',
'layout_template' => 'moscone_flipped',
'path' => 'node/%',
);
$this->backdropPost('admin/structure/layouts/add', $edit, t('Create layout'));
// Add a condition to specify only the post type should have this layout.
$this->backdropPost('admin/structure/layouts/manage/post_layout/configure', array(), t('Add condition'));
$this->backdropPost(NULL, array('condition' => 'node_type'), t('Load condition'));
$this->backdropPost(NULL, array('bundles[post]' => 1), t('Add condition'));
$this->backdropPost(NULL, array(), t('Save layout'));
// Add the custom block to the layout.
$layout = layout_load('post_layout');
$layout->addBlock('block', $custom_block['delta'], 'sidebar');
$layout->save();
// Verify visibility rules.
$this->backdropGet('');
$this->assertNoText($custom_block['title'], 'Block was not displayed the front page.');
$this->backdropGet('node/' . $node1->nid);
$this->assertText($custom_block['title'], 'Block was displayed on the post node.');
$this->backdropGet('node/' . $node4->nid);
$this->assertNoText($custom_block['title'], 'Block was not displayed on the page node.');
}