1.20.x node.test NodeAdminTestCase::testContentAdminPages()

Tests content overview with different user permissions.

Taxonomy filters are tested separately.

See also

TaxonomyNodeFilterTestCase

File

modules/node/tests/node.test, line 2184
Tests for node.module.

Class

NodeAdminTestCase
Tests node administration page functionality.

Code

function testContentAdminPages() {
  // Do not use any patterns for nodes in this test.
  config_set('path.settings', 'node_pattern', '');
  config_set('path.settings', 'node_page_pattern', '');

  $this->backdropLogin($this->admin_user);

  $nodes['published_page'] = $this->backdropCreateNode(array('type' => 'page'));
  $nodes['published_post'] = $this->backdropCreateNode(array('type' => 'post'));
  $nodes['unpublished_page_1'] = $this->backdropCreateNode(array('type' => 'page', 'uid' => $this->base_user_1->uid, 'status' => 0));
  $nodes['unpublished_page_2'] = $this->backdropCreateNode(array('type' => 'page', 'uid' => $this->base_user_2->uid, 'status' => 0));

  // Verify view, edit, and delete links for any content.
  $this->backdropGet('admin/content');
  $this->assertResponse(200);
  $index = 0;
  foreach ($nodes as $node) {
    $this->assertLinkByHref('node/' . $node->nid);
    $this->assertLinkByHref('node/' . $node->nid . '/edit');
    $this->assertLinkByHref('node/' . $node->nid . '/delete');
    // Verify tableselect.
    $this->assertFieldByName('bulk_form[' . $index . ']', '', 'Tableselect found.');
    $index++;
  }

  // Verify filtering by publishing status.
  $this->backdropGet('admin/content/node', array('query' => array('status' => '1')));

  $this->assertFieldByXPath('//select[@name="status"]', '1', 'Content list is filtered by status.');

  $this->assertLinkByHref('node/' . $nodes['published_page']->nid . '/edit');
  $this->assertLinkByHref('node/' . $nodes['published_post']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid . '/edit');

  // Verify filtering by status and content type.
  $this->backdropGet('admin/content/node', array('query' => array('status' => '1', 'type' => 'page')));

  $this->assertFieldByXPath('//select[@name="status"]', '1', 'Content list is filtered by status.');
  $this->assertFieldByXPath('//select[@name="type"]', 'page', 'Content list is filtered by content type.');

  $this->assertLinkByHref('node/' . $nodes['published_page']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['published_post']->nid . '/edit');

  // Verify no operation links are displayed for regular users.
  $this->backdropLogout();
  $this->backdropLogin($this->base_user_1);
  $this->backdropGet('admin/content');
  $this->assertResponse(200);
  $this->assertLinkByHref('node/' . $nodes['published_page']->nid);
  $this->assertLinkByHref('node/' . $nodes['published_post']->nid);
  $this->assertNoLinkByHref('node/' . $nodes['published_page']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['published_page']->nid . '/delete');
  $this->assertNoLinkByHref('node/' . $nodes['published_post']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['published_post']->nid . '/delete');

  // Verify no unpublished content is displayed without permission.
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid);
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid . '/delete');

  // Verify no tableselect.
  $this->assertNoFieldByName('nodes[' . $nodes['published_page']->nid . ']', '', 'No tableselect found.');

  // Verify unpublished content is displayed with permission.
  $this->backdropLogout();
  $this->backdropLogin($this->base_user_2);
  $this->backdropGet('admin/content');
  $this->assertResponse(200);
  $this->assertLinkByHref('node/' . $nodes['unpublished_page_2']->nid);
  // Verify no operation links are displayed.
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_2']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_2']->nid . '/delete');

  // Verify user cannot see unpublished content of other users.
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid);
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid . '/edit');
  $this->assertNoLinkByHref('node/' . $nodes['unpublished_page_1']->nid . '/delete');

  // Verify no tableselect.
  $this->assertNoFieldByName('nodes[' . $nodes['unpublished_page_2']->nid . ']', '', 'No tableselect found.');

  // Verify node access can be bypassed.
  $this->backdropLogout();
  $this->backdropLogin($this->base_user_3);
  $this->backdropGet('admin/content');
  $this->assertResponse(200);
  foreach ($nodes as $node) {
    $this->assertLinkByHref('node/' . $node->nid);
    $this->assertLinkByHref('node/' . $node->nid . '/edit');
    $this->assertLinkByHref('node/' . $node->nid . '/delete');
  }

  // Verify 'view any unpubished content' allows view but not edit or delete.
  $this->backdropLogout();
  $this->backdropLogin($this->base_user_4);
  $this->backdropGet('admin/content');
  $this->assertResponse(200);
  foreach ($nodes as $node) {
    $this->assertLinkByHref('node/' . $node->nid);
    $this->assertNoLinkByHref('node/' . $node->nid . '/edit');
    $this->assertNoLinkByHref('node/' . $node->nid . '/delete');
  }
}