Example #1
0
 /**
  * Test get_assignments
  */
 public function test_get_assignments()
 {
     global $DB, $USER;
     $this->resetAfterTest(true);
     $category = self::getDataGenerator()->create_category(array('name' => 'Test category'));
     // Create a course.
     $course1 = self::getDataGenerator()->create_course(array('idnumber' => 'idnumbercourse1', 'fullname' => 'Lightwork Course 1', 'summary' => 'Lightwork Course 1 description', 'summaryformat' => FORMAT_MOODLE, 'category' => $category->id));
     // Create a second course, just for testing.
     $course2 = self::getDataGenerator()->create_course(array('idnumber' => 'idnumbercourse2', 'fullname' => 'Lightwork Course 2', 'summary' => 'Lightwork Course 2 description', 'summaryformat' => FORMAT_MOODLE, 'category' => $category->id));
     // Create the assignment module.
     $assign1 = self::getDataGenerator()->create_module('assign', array('course' => $course1->id, 'name' => 'lightwork assignment'));
     // Create manual enrolment record.
     $enrolid = $DB->insert_record('enrol', (object) array('enrol' => 'manual', 'status' => 0, 'courseid' => $course1->id));
     // Create the user and give them capabilities.
     $context = context_course::instance($course1->id);
     $roleid = $this->assignUserCapability('moodle/course:view', $context->id);
     $context = context_module::instance($assign1->id);
     $this->assignUserCapability('mod/assign:view', $context->id, $roleid);
     // Create the user enrolment record.
     $DB->insert_record('user_enrolments', (object) array('status' => 0, 'enrolid' => $enrolid, 'userid' => $USER->id));
     $result = mod_assign_external::get_assignments();
     // Check the course and assignment are returned.
     $this->assertEquals(1, count($result['courses']));
     $course = $result['courses'][0];
     $this->assertEquals('Lightwork Course 1', $course['fullname']);
     $this->assertEquals(1, count($course['assignments']));
     $assignment = $course['assignments'][0];
     $this->assertEquals($assign1->id, $assignment['id']);
     $this->assertEquals($course1->id, $assignment['course']);
     $this->assertEquals('lightwork assignment', $assignment['name']);
     $result = mod_assign_external::get_assignments(array($course1->id));
     $this->assertEquals(1, count($result['courses']));
     $course = $result['courses'][0];
     $this->assertEquals('Lightwork Course 1', $course['fullname']);
     $this->assertEquals(1, count($course['assignments']));
     $assignment = $course['assignments'][0];
     $this->assertEquals($assign1->id, $assignment['id']);
     $this->assertEquals($course1->id, $assignment['course']);
     $this->assertEquals('lightwork assignment', $assignment['name']);
     $result = mod_assign_external::get_assignments(array($course2->id));
     $this->assertEquals(0, count($result['courses']));
     $this->assertEquals(1, count($result['warnings']));
 }
 /**
  * Test for the type of the user-related properties in mod_assign_external::list_participants_returns().
  */
 public function test_list_participants_returns_user_property_types()
 {
     // Get user properties.
     $userdesc = core_user_external::user_description();
     $this->assertTrue(isset($userdesc->keys));
     $userproperties = array_keys($userdesc->keys);
     // Get returns description for mod_assign_external::list_participants_returns().
     $listreturns = mod_assign_external::list_participants_returns();
     $this->assertTrue(isset($listreturns->content));
     $listreturnsdesc = $listreturns->content->keys;
     // Iterate over list returns description's keys.
     foreach ($listreturnsdesc as $key => $desc) {
         // Check if key exists in user properties and the description has a type attribute.
         if (in_array($key, $userproperties) && isset($desc->type)) {
             try {
                 // The core_user::get_property_type() method might throw a coding_exception since
                 // core_user_external::user_description() might contain properties that are not yet included in
                 // core_user's $propertiescache.
                 $propertytype = core_user::get_property_type($key);
                 // Assert that user-related property types match those of the defined in core_user.
                 $this->assertEquals($propertytype, $desc->type);
             } catch (coding_exception $e) {
                 // All good.
             }
         }
     }
 }
Example #3
0
 /**
  * Test test_view_assign
  */
 public function test_view_assign()
 {
     global $CFG;
     $CFG->enablecompletion = 1;
     $this->resetAfterTest();
     $this->setAdminUser();
     // Setup test data.
     $course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1));
     $assign = $this->getDataGenerator()->create_module('assign', array('course' => $course->id), array('completion' => 2, 'completionview' => 1));
     $context = context_module::instance($assign->cmid);
     $cm = get_coursemodule_from_instance('assign', $assign->id);
     $result = mod_assign_external::view_assign($assign->id);
     $result = external_api::clean_returnvalue(mod_assign_external::view_assign_returns(), $result);
     $this->assertTrue($result['status']);
     $this->assertEmpty($result['warnings']);
     // Check completion status.
     $completion = new completion_info($course);
     $completiondata = $completion->get_data($cm);
     $this->assertEquals(1, $completiondata->completionstate);
 }
 /**
  * Test set_user_flags
  */
 public function test_set_user_flags()
 {
     global $DB, $USER;
     $this->resetAfterTest(true);
     // Create a course and assignment.
     $coursedata['idnumber'] = 'idnumbercourse';
     $coursedata['fullname'] = 'Lightwork Course';
     $coursedata['summary'] = 'Lightwork Course description';
     $coursedata['summaryformat'] = FORMAT_MOODLE;
     $course = self::getDataGenerator()->create_course($coursedata);
     $assigndata['course'] = $course->id;
     $assigndata['name'] = 'lightwork assignment';
     $assign = self::getDataGenerator()->create_module('assign', $assigndata);
     // Create a manual enrolment record.
     $manualenroldata['enrol'] = 'manual';
     $manualenroldata['status'] = 0;
     $manualenroldata['courseid'] = $course->id;
     $enrolid = $DB->insert_record('enrol', $manualenroldata);
     // Create a teacher and give them capabilities.
     $context = context_course::instance($course->id);
     $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3);
     $context = context_module::instance($assign->cmid);
     $this->assignUserCapability('mod/assign:grade', $context->id, $roleid);
     // Create the teacher's enrolment record.
     $userenrolmentdata['status'] = 0;
     $userenrolmentdata['enrolid'] = $enrolid;
     $userenrolmentdata['userid'] = $USER->id;
     $DB->insert_record('user_enrolments', $userenrolmentdata);
     // Create a student.
     $student = self::getDataGenerator()->create_user();
     // Create test user flags record.
     $userflags = array();
     $userflag['userid'] = $student->id;
     $userflag['workflowstate'] = 'inmarking';
     $userflag['allocatedmarker'] = $USER->id;
     $userflags = array($userflag);
     $createduserflags = mod_assign_external::set_user_flags($assign->id, $userflags);
     // We need to execute the return values cleaning process to simulate the web service server.
     $createduserflags = external_api::clean_returnvalue(mod_assign_external::set_user_flags_returns(), $createduserflags);
     $this->assertEquals($student->id, $createduserflags[0]['userid']);
     $createduserflag = $DB->get_record('assign_user_flags', array('id' => $createduserflags[0]['id']));
     // Confirm that all data was inserted correctly.
     $this->assertEquals($student->id, $createduserflag->userid);
     $this->assertEquals($assign->id, $createduserflag->assignment);
     $this->assertEquals(0, $createduserflag->locked);
     $this->assertEquals(2, $createduserflag->mailed);
     $this->assertEquals(0, $createduserflag->extensionduedate);
     $this->assertEquals('inmarking', $createduserflag->workflowstate);
     $this->assertEquals($USER->id, $createduserflag->allocatedmarker);
     // Create update data.
     $userflags = array();
     $userflag['userid'] = $createduserflag->userid;
     $userflag['workflowstate'] = 'readyforreview';
     $userflags = array($userflag);
     $updateduserflags = mod_assign_external::set_user_flags($assign->id, $userflags);
     // We need to execute the return values cleaning process to simulate the web service server.
     $updateduserflags = external_api::clean_returnvalue(mod_assign_external::set_user_flags_returns(), $updateduserflags);
     $this->assertEquals($student->id, $updateduserflags[0]['userid']);
     $updateduserflag = $DB->get_record('assign_user_flags', array('id' => $updateduserflags[0]['id']));
     // Confirm that all data was updated correctly.
     $this->assertEquals($student->id, $updateduserflag->userid);
     $this->assertEquals($assign->id, $updateduserflag->assignment);
     $this->assertEquals(0, $updateduserflag->locked);
     $this->assertEquals(2, $updateduserflag->mailed);
     $this->assertEquals(0, $updateduserflag->extensionduedate);
     $this->assertEquals('readyforreview', $updateduserflag->workflowstate);
     $this->assertEquals($USER->id, $updateduserflag->allocatedmarker);
 }
Example #5
0
 /**
  * Test test_view_submission_status
  */
 public function test_view_submission_status()
 {
     global $DB;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     // Setup test data.
     $course = $this->getDataGenerator()->create_course();
     $assign = $this->getDataGenerator()->create_module('assign', array('course' => $course->id));
     $context = context_module::instance($assign->cmid);
     $cm = get_coursemodule_from_instance('assign', $assign->id);
     // Test invalid instance id.
     try {
         mod_assign_external::view_submission_status(0);
         $this->fail('Exception expected due to invalid mod_assign instance id.');
     } catch (moodle_exception $e) {
         $this->assertEquals('invalidrecord', $e->errorcode);
     }
     // Test not-enrolled user.
     $user = self::getDataGenerator()->create_user();
     $this->setUser($user);
     try {
         mod_assign_external::view_submission_status($assign->id);
         $this->fail('Exception expected due to not enrolled user.');
     } catch (moodle_exception $e) {
         $this->assertEquals('requireloginerror', $e->errorcode);
     }
     // Test user with full capabilities.
     $studentrole = $DB->get_record('role', array('shortname' => 'student'));
     $this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id);
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $result = mod_assign_external::view_submission_status($assign->id);
     $result = external_api::clean_returnvalue(mod_assign_external::view_submission_status_returns(), $result);
     $events = $sink->get_events();
     $this->assertCount(1, $events);
     $event = array_shift($events);
     // Checking that the event contains the expected values.
     $this->assertInstanceOf('\\mod_assign\\event\\submission_status_viewed', $event);
     $this->assertEquals($context, $event->get_context());
     $moodleurl = new \moodle_url('/mod/assign/view.php', array('id' => $cm->id));
     $this->assertEquals($moodleurl, $event->get_url());
     $this->assertEventContextNotUsed($event);
     $this->assertNotEmpty($event->get_name());
     // Test user with no capabilities.
     // We need a explicit prohibit since this capability is only defined in authenticated user and guest roles.
     assign_capability('mod/assign:view', CAP_PROHIBIT, $studentrole->id, $context->id);
     accesslib_clear_all_caches_for_unit_testing();
     course_modinfo::clear_instance_cache();
     try {
         mod_assign_external::view_submission_status($assign->id);
         $this->fail('Exception expected due to missing capability.');
     } catch (moodle_exception $e) {
         $this->assertEquals('requireloginerror', $e->errorcode);
     }
 }
 /**
  * get_participant should return group details if a group submission was
  * submitted.
  */
 public function test_get_participant_group_submission()
 {
     global $DB, $CFG;
     require_once $CFG->dirroot . '/mod/assign/tests/base_test.php';
     $this->resetAfterTest(true);
     $result = $this->create_assign_with_student_and_teacher(array('assignsubmission_onlinetext_enabled' => 1, 'teamsubmission' => 1));
     $assignmodule = $result['assign'];
     $student = $result['student'];
     $teacher = $result['teacher'];
     $course = $result['course'];
     $context = context_course::instance($course->id);
     $teacherrole = $DB->get_record('role', array('shortname' => 'teacher'));
     $group = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
     $cm = get_coursemodule_from_instance('assign', $assignmodule->id);
     $context = context_module::instance($cm->id);
     $assign = new testable_assign($context, $cm, $course);
     groups_add_member($group, $student);
     $this->setUser($student);
     $submission = $assign->get_group_submission($student->id, $group->id, true);
     $submission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
     $assign->testable_update_submission($submission, $student->id, true, false);
     $data = new stdClass();
     $data->onlinetext_editor = array('itemid' => file_get_unused_draft_itemid(), 'text' => 'Submission text', 'format' => FORMAT_MOODLE);
     $plugin = $assign->get_submission_plugin_by_type('onlinetext');
     $plugin->save($submission, $data);
     $this->setUser($teacher);
     $result = mod_assign_external::get_participant($assignmodule->id, $student->id, false);
     // Check some of the extended properties we get when not requesting a summary.
     $this->assertEquals($student->id, $result['id']);
     $this->assertEquals($group->id, $result['groupid']);
     $this->assertEquals($group->name, $result['groupname']);
 }
Example #7
0
    /**
     * Test get_submissions
     */
    public function test_get_submissions () {
        global $DB, $USER;

        $this->resetAfterTest(true);
        // Create a course and assignment.
        $coursedata['idnumber'] = 'idnumbercourse1';
        $coursedata['fullname'] = 'Lightwork Course 1';
        $coursedata['summary'] = 'Lightwork Course 1 description';
        $coursedata['summaryformat'] = FORMAT_MOODLE;
        $course1 = self::getDataGenerator()->create_course($coursedata);

        $assigndata['course'] = $course1->id;
        $assigndata['name'] = 'lightwork assignment';

        $assign1 = self::getDataGenerator()->create_module('assign', $assigndata);

        // Create a student with an online text submission.
        // First attempt.
        $student = self::getDataGenerator()->create_user();
        $submission = new stdClass();
        $submission->assignment = $assign1->id;
        $submission->userid = $student->id;
        $submission->timecreated = time();
        $submission->timemodified = $submission->timecreated;
        $submission->status = 'draft';
        $submission->attemptnumber = 0;
        $sid = $DB->insert_record('assign_submission', $submission);

        // Second attempt.
        $submission = new stdClass();
        $submission->assignment = $assign1->id;
        $submission->userid = $student->id;
        $submission->timecreated = time();
        $submission->timemodified = $submission->timecreated;
        $submission->status = 'submitted';
        $submission->attemptnumber = 1;
        $sid = $DB->insert_record('assign_submission', $submission);
        $submission->id = $sid;

        $onlinetextsubmission = new stdClass();
        $onlinetextsubmission->onlinetext = "<p>online test text</p>";
        $onlinetextsubmission->onlineformat = 1;
        $onlinetextsubmission->submission = $submission->id;
        $onlinetextsubmission->assignment = $assign1->id;
        $DB->insert_record('assignsubmission_onlinetext', $onlinetextsubmission);

        // Create manual enrolment record.
        $manual_enrol_data['enrol'] = 'manual';
        $manual_enrol_data['status'] = 0;
        $manual_enrol_data['courseid'] = $course1->id;
        $enrolid = $DB->insert_record('enrol', $manual_enrol_data);

        // Create a teacher and give them capabilities.
        $context = context_course::instance($course1->id);
        $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3);
        $context = context_module::instance($assign1->id);
        $this->assignUserCapability('mod/assign:grade', $context->id, $roleid);

        // Create the teacher's enrolment record.
        $user_enrolment_data['status'] = 0;
        $user_enrolment_data['enrolid'] = $enrolid;
        $user_enrolment_data['userid'] = $USER->id;
        $DB->insert_record('user_enrolments', $user_enrolment_data);

        $assignmentids[] = $assign1->id;
        $result = mod_assign_external::get_submissions($assignmentids);

        // Check the online text submission is returned.
        $this->assertEquals(1, count($result['assignments']));
        $assignment = $result['assignments'][0];
        $this->assertEquals($assign1->id, $assignment['assignmentid']);
        $this->assertEquals(1, count($assignment['submissions']));
        $submission = $assignment['submissions'][0];
        $this->assertEquals($sid, $submission['id']);
        $this->assertGreaterThanOrEqual(3, count($submission['plugins']));
        $plugins = $submission['plugins'];
        foreach ($plugins as $plugin) {
            $foundonlinetext = false;
            if ($plugin['type'] == 'onlinetext') {
                $foundonlinetext = true;
                break;
            }
        }
        $this->assertTrue($foundonlinetext);
    }