diff --git a/core/modules/node/config/views.view.frontpage.yml b/core/modules/node/config/views.view.frontpage.yml index 8b0cda6fc875..fb2e3c9b21ca 100644 --- a/core/modules/node/config/views.view.frontpage.yml +++ b/core/modules/node/config/views.view.frontpage.yml @@ -42,7 +42,7 @@ display: admin_label: '' label: '' empty: '1' - title: 'Welcome to Drupal' + title: 'Welcome to [site:name]' plugin_id: title exposed_form: type: basic @@ -105,12 +105,6 @@ display: links: '1' type: node sorts: - created: - field: created - id: created - order: DESC - table: node - plugin_id: date sticky: admin_label: '' expose: @@ -119,10 +113,16 @@ display: field: sticky group_type: group id: sticky - order: ASC + order: DESC relationship: none table: node plugin_id: boolean + created: + field: created + id: created + order: DESC + table: node + plugin_id: date style: type: default title: '' diff --git a/core/modules/node/lib/Drupal/node/Tests/Views/FrontpageTest.php b/core/modules/node/lib/Drupal/node/Tests/Views/FrontpageTest.php new file mode 100644 index 000000000000..f638dbea0e52 --- /dev/null +++ b/core/modules/node/lib/Drupal/node/Tests/Views/FrontpageTest.php @@ -0,0 +1,152 @@ + 'Node: Frontpage view', + 'description' => 'Tests the default frontpage provided by views.', + 'group' => 'Views module integration', + ); + } + + protected function setUp() { + parent::setUp(); + + $this->nodeStorageController = $this->container->get('plugin.manager.entity')->getStorageController('node'); + } + + /** + * Tests the frontpage. + */ + public function testFrontPage() { + $site_name = $this->randomName(); + $this->container->get('config.factory') + ->get('system.site') + ->set('name', $site_name) + ->save(); + + $view = views_get_view('frontpage'); + $view->setDisplay('page_1'); + $this->executeView($view); + $view->preview(); + + $this->assertEqual($view->getTitle(), format_string('Welcome to @site_name', array('@site_name' => $site_name)), 'The welcome title is used for the empty view.'); + $view->destroy(); + + // Create some nodes on the frontpage view. Add more than 10 nodes in order + // to enable paging. + $expected = array(); + for ($i = 0; $i < 20; $i++) { + $values = array(); + $values['type'] = 'article'; + $values['title'] = $this->randomName(); + $values['promote'] = TRUE; + $values['status'] = TRUE; + // Test descending sort order. + $values['created'] = REQUEST_TIME - $i; + // Test the sticky order. + if ($i == 5) { + $values['sticky'] = TRUE; + $node = $this->nodeStorageController->create($values); + $node->save(); + // Put the sticky on at the front. + array_unshift($expected, array('nid' => $node->id())); + } + else { + $values['sticky'] = FALSE; + $node = $this->nodeStorageController->create($values); + $node->save(); + array_push($expected, array('nid' => $node->id())); + } + } + + // Create some nodes which aren't on the frontpage, either because they + // aren't promoted or because they aren't published. + $not_expected_nids = array(); + + $values = array(); + $values['type'] = 'article'; + $values['title'] = $this->randomName(); + $values['status'] = TRUE; + $values['promote'] = FALSE; + $node = $this->nodeStorageController->create($values); + $node->save(); + $not_expected_nids[] = $node->id(); + + $values['promote'] = TRUE; + $values['status'] = FALSE; + $values['title'] = $this->randomName(); + $node = $this->nodeStorageController->create($values); + $node->save(); + $not_expected_nids[] = $node->id(); + + $values['promote'] = TRUE; + $values['sticky'] = TRUE; + $values['status'] = FALSE; + $values['title'] = $this->randomName(); + $node = $this->nodeStorageController->create($values); + $node->save(); + $not_expected_nids[] = $node->id(); + + $column_map = array('nid' => 'nid'); + + $view->setDisplay('page_1'); + $this->executeView($view); + $this->assertIdenticalResultset($view, array_slice($expected, 0, 10), $column_map, 'Ensure that the right nodes are displayed on the frontpage.'); + $this->assertNotInResultSet($view, $not_expected_nids, 'Ensure no unexpected node is in the result.'); + $view->destroy(); + + $view->setDisplay('page_1'); + $view->setCurrentPage(1); + $this->executeView($view); + $this->assertIdenticalResultset($view, array_slice($expected, 10, 10), $column_map, 'Ensure that the right nodes are displayed on second page of the frontpage.'); + $this->assertNotInResultSet($view, $not_expected_nids, 'Ensure no unexpected node is in the result.'); + $view->destroy(); + } + + /** + * Verifies that an amount of nids aren't in the result. + * + * @param \Drupal\views\ViewExecutable $view + * An executed View. + * @param array $not_expected_nids + * An array of nids which should not be part of the resultset. + * @param string $message + * (optional) A custom message to display with the assertion. + */ + protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_nids, $message = '') { + $found_nids = array_filter($view->result, function ($row) use ($not_expected_nids) { + return in_array($row->nid, $not_expected_nids); + }); + $this->assertFalse($found_nids, $message); + } + +}