You are here

function CourseObjectBookTestCase::testBookCourseObjectContentAccess in Course 7.2

Same name and namespace in other branches
  1. 7 modules/course_book/course_book.test \CourseObjectBookTestCase::testBookCourseObjectContentAccess()

Books have special behavior when it comes to content access. All the sub pages should be protected.

@todo this test is broken. Node access not working the same way from within simpletest.

File

modules/course_book/course_book.test, line 83

Class

CourseObjectBookTestCase
Tests for Book support in Course

Code

function testBookCourseObjectContentAccess() {
  $this
    ->pass('Please fix me.');
  return;
  $this
    ->drupalLogin($this->admin_user);

  // We just turned on node_access_book which requires us to rebuild node
  // access.
  node_access_rebuild();

  // Create a course with 1 book.
  $courseNode = $this
    ->createCourseNode();
  $co1 = course_get_course_object('course_book', 'book');
  $co1
    ->setCourse($courseNode->nid);

  // Set to private.
  $co1
    ->setOption('private', 1);
  $co1
    ->save();

  // Add some more book pages.
  $bp1 = $this
    ->drupalCreateNode(array(
    'type' => 'book',
    'book' => array(
      'bid' => $co1
        ->getInstanceId(),
    ),
  ));
  $bp2 = $this
    ->drupalCreateNode(array(
    'type' => 'book',
    'book' => array(
      'bid' => $co1
        ->getInstanceId(),
    ),
  ));

  // Simulate course_book_node_insert().
  $co1
    ->save();

  // Hack to simluate what happens on the UI. This test does not work
  // correctly from simpletest for some reason.
  db_query("delete from {node_access} where realm = 'all'");

  // Try to visit the protected pages.
  $this
    ->drupalLogin($this->student_user);
  $this
    ->drupalGet("node/" . $co1
    ->getInstanceId());
  $this
    ->assertResponse(403);
  $this
    ->drupalGet("node/{$bp1->nid}");
  $this
    ->assertResponse(403);
  $this
    ->drupalGet("node/{$bp2->nid}");
  $this
    ->assertResponse(403);

  // Add a new page to the book, after it is already saved.
  $this
    ->drupalLogin($this->admin_user);
  $bp3 = $this
    ->drupalCreateNode(array(
    'type' => 'book',
    'book' => array(
      'bid' => $co1
        ->getInstanceId(),
    ),
  ));

  // Simulate course_book_node_insert().
  $co1
    ->save();

  // Hack to simluate what happens on the UI. This test does not work
  // correctly from simpletest for some reason.
  db_query("delete from {node_access} where realm = 'all'");

  // Check that the new book page also had it's ACL set up.
  $this
    ->drupalLogin($this->student_user);
  $this
    ->drupalGet("node/{$bp3->nid}");
  $this
    ->assertResponse(403);

  // Enroll the user in the course and go to the first object.
  course_enroll($courseNode, $this->student_user);
  $this
    ->drupalGet("node/{$courseNode->nid}/course-object/" . $co1
    ->getId());

  // Make sure user can access all the sub-pages now.
  $this
    ->drupalGet("node/{$bp1->nid}");
  $this
    ->assertResponse(200);
  $this
    ->drupalGet("node/{$bp2->nid}");
  $this
    ->assertResponse(200);
  $this
    ->drupalGet("node/{$bp3->nid}");
  $this
    ->assertResponse(200);
}