public function FrontPageTest::testFrontPage

Tests the frontpage.

File

drupal/core/modules/node/lib/Drupal/node/Tests/Views/FrontpageTest.php, line 49
Contains \Drupal\node\Tests\Views\FrontPageTest.

Class

FrontPageTest
Tests the default frontpage provided by views.

Namespace

Drupal\node\Tests\Views

Code

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