You are here

CourseWorkflowTestCase.test in Course 7.2

Same filename and directory in other branches
  1. 7 tests/CourseWorkflowTestCase.test

File

tests/CourseWorkflowTestCase.test
View source
<?php

/**
 * Test class for the default outline and course workflow.
 */
class CourseWorkflowTestCase extends CourseTestCase {
  public static function getInfo() {

    // Note that getInfo() strings are not translated with t().
    return array(
      'name' => 'Course workflow',
      'description' => 'Ensure that the Course workflow functions properly.',
      'group' => 'Course',
    );
  }

  /**
   * Ensure the next object is properly linked.
   */
  function testObjectAdvancement() {
    $this->student_user = $this
      ->drupalCreateUser();

    // Add two course objects to a course.
    $courseNode = $this
      ->createCourseNode();
    $course = course_get_course($courseNode);
    $co1 = course_get_course_object('course_test', 'course_test_object');
    $co1
      ->setCourse($course);
    $co1
      ->setOption('title', 'Course object 1');
    $co1
      ->save();
    $co2 = course_get_course_object('course_test', 'course_test_object');
    $co2
      ->setCourse($course);
    $co2
      ->setOption('title', 'Course object 2');
    $co2
      ->save();

    // Get the course, now loaded as the user.
    $course = course_get_course($courseNode);
    $this
      ->drupalGet("node/{$courseNode->nid}/course-complete");
    $this
      ->assertResponse(403, 'Cannot see completion page');

    // Login, enroll, and try to access the objects via links.
    $this
      ->drupalLogin($this->student_user);
    course_enroll($courseNode, $this->student_user);
    $this
      ->drupalGet("node/{$courseNode->nid}/course-complete");
    $this
      ->assertResponse(200, 'Can see completion page');
    $this
      ->assertText('This course is not complete.');
    $this
      ->drupalGet("node/{$courseNode->nid}/takecourse");
    $this
      ->assertLink('Course object 1');
    $this
      ->assertNoLink('Course object 2');
    $this
      ->assertNoLink('Next');
    $this
      ->clickLink('Course object 1');
    $this
      ->assertText(t('I am a test course object with the title !title', array(
      '!title' => $co1
        ->getOption('title'),
    )));

    // Refresh the course because we made browser calls above.
    $course = course_get_course($courseNode);
    $objects = array_values($course
      ->getObjects());

    // Set the first object complete.
    $objects[0]
      ->getFulfillment($this->student_user)
      ->setComplete(1)
      ->save();
    $this
      ->drupalGet("node/{$courseNode->nid}/takecourse");
    $this
      ->assertLink('Course object 2');
    $this
      ->assertLink('Next');
    $this
      ->clickLink('Course object 2');
    $this
      ->assertText(t('I am a test course object with the title !title', array(
      '!title' => $co2
        ->getOption('title'),
    )));

    // Go back to object 1.
    $this
      ->clickLink('Course object 1');
    $this
      ->assertText(t('I am a test course object with the title !title', array(
      '!title' => $co1
        ->getOption('title'),
    )));

    // Advance via "Next" link.
    $this
      ->clickLink('Next');
    $this
      ->assertText(t('I am a test course object with the title !title', array(
      '!title' => $co2
        ->getOption('title'),
    )));

    // Set the second object complete.
    // @kludge: the below two lines shouldn't be necessary, but something is
    // happening with object sharing
    $course = course_get_course($courseNode);
    $objects = array_values($course
      ->getObjects());
    $objects[1]
      ->getFulfillment($this->student_user)
      ->setComplete(1)
      ->save();
    $this
      ->drupalGet("node/{$courseNode->nid}/takecourse");
    $this
      ->assertLink('Complete');
    $this
      ->clickLink('Complete');
    $this
      ->assertText('You have completed the course.');
  }

}

Classes

Namesort descending Description
CourseWorkflowTestCase Test class for the default outline and course workflow.