Index: modules/node/node.install =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.install,v retrieving revision 1.10 diff -u -r1.10 node.install --- modules/node/node.install 2 Jan 2009 21:12:31 -0000 1.10 +++ modules/node/node.install 13 Jan 2009 19:28:25 -0000 @@ -1,6 +1,14 @@ fetch(PDO::FETCH_ASSOC)) { + $item = l($node['title'], 'node/' . $node['nid']); + $item .= '
'; + $item .= t('@time ago', array('@time' => format_interval(REQUEST_TIME - $node['created']))); + $items[] = $item; + } + if (count($items)) { + $block['content'] = theme('item_list', $items); + } + } + break; + + } return $block; } +function node_block_configure($delta = '') { + $form = array(); + if ($delta == 'recent') { + $form['node_recent_block_count'] = array( + '#type' => 'select', + '#title' => t('Amount of recent content'), + '#default_value' => variable_get('node_recent_block_count', 10), + '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30)), + '#description' => t('Pieces of content displayed in the Recently posted block.'), + ); + } + return $form; +} + /** * A generic function for generating RSS feeds from a set of nodes. * Index: modules/node/node.test =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.test,v retrieving revision 1.14 diff -u -r1.14 node.test --- modules/node/node.test 9 Jan 2009 16:19:55 -0000 1.14 +++ modules/node/node.test 13 Jan 2009 19:28:26 -0000 @@ -598,4 +598,102 @@ $node = $this->drupalGetNodeByTitle($edit['title']); $this->assertNoRaw(theme('node_submitted', $node), t('Post information is not displayed.')); } -} \ No newline at end of file +} + +class RecentContentBlockTestCase extends DrupalWebTestCase { + protected $nodes; + + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Recent content block'), + 'description' => t('Test to make sure the recent content block works properly; it makes sure that nodes appear there, in the correct order, and the settings work properly.'), + 'group' => t('Node'), + ); + } + + function setUp() { + // Clear the static $nodes cache. + $this->nodes = array(); + parent::setUp(); + } + + /** + * Test the recent content block with a few nodes, less than the maximum. + */ + function testRecentContentBlock() { + $this->createTestNodes(3); + $this->assertRecentContent(); + } + + /** + * Test the recent content block with a lot of nodes, moer than the maximum. + */ + function testRecentContentBlockOverflow() { + $this->createTestNodes(18); + $this->assertRecentContent(); + } + + /** + * Test the recent content block with a non-standard maximum number of nodes. + */ + function testRecentContentBlockSettings() { + variable_set('node_recent_block_count', 20); + $this->createTestNodes(18); + $this->assertRecentContent(); + } + + /** + * Test the recent content block with a non-standard maximum number of nodes, + * and have more nodes than that custom maximum. + */ + function testRecentContentBlockSettingsOverflow() { + variable_set('node_recent_block_count', 5); + $this->createTestNodes(18); + $this->assertRecentContent(); + } + + /** + * Create a number of nodes, and store them in the protected $nodes array. + * + * @param $count + * The number of nodes to create. + */ + protected function createTestNodes($count) { + $time = REQUEST_TIME - 600; + for ($i = 0; $i < $count; $i++) { + $this->nodes[($count - $i) - 1] = $this->drupalCreateNode(array('created' => REQUEST_TIME + $i)); + } + } + + /** + * Helper assertion that makes sure the nodes appear on the block correctly. + */ + protected function assertRecentContent() { + $this->refreshVariables(); + $count = variable_get('node_recent_block_count', 10); + $this->drupalGet(''); + $results = $this->elements->xpath('//div[@id="block-node-recent"]'); + $div = $results[0]; + if (!count($this->nodes)) { + $this->assertFalse($div, t('Block does not appear when no nodes exist.')); + return; + } + $this->assertTrue($div, t('Block appears when several nodes exist.')); + $title = $div->h2; + $this->assertEqual($title, t('Recently posted'), t('Title of the block matches correctly.')); + // Under the block div, we have the
, and then another + // div surrounding the themed item list before we get to the ul. + $ul = $div->div->div->ul; + $this->assertEqual(count($ul->li), min(count($this->nodes), $count), t('The correct number of nodes are shown.')); + for ($i = 0; $i < $count; $i++) { + if (isset($this->nodes[$i])) { + $list_item = $ul->li[$i]; + $link = $list_item->a; + $this->assertEqual($link, $this->nodes[$i]->title, t('The correct node title is shown.')); + } + } + } +}