Beispiel #1
0
 /**
  * Test get_syncable_users method.
  */
 public function test_get_syncable_users()
 {
     global $DB, $CFG;
     $timenow = time();
     $edatagenerator = new \elis_program_datagenerator($DB);
     $mcourses = array('linked1' => $this->getDataGenerator()->create_course(), 'linked2' => $this->getDataGenerator()->create_course(), 'linkedmultiple1' => $this->getDataGenerator()->create_course(), 'notlinked1' => $this->getDataGenerator()->create_course(), 'notlinked2' => $this->getDataGenerator()->create_course());
     $ecourses = array(0 => $edatagenerator->create_course(array('completion_grade' => 50, 'credits' => 12)), 'linkedmultiple1_2' => $edatagenerator->create_course(array('completion_grade' => 51, 'credits' => 13)), 'linkedmultiple3' => $edatagenerator->create_course(array('completion_grade' => 52, 'credits' => 14)));
     $eclasses = array('linked1' => $edatagenerator->create_pmclass(array('courseid' => $ecourses[0]->id)), 'linked2' => $edatagenerator->create_pmclass(array('courseid' => $ecourses[0]->id)), 'linkedmultiple1' => $edatagenerator->create_pmclass(array('courseid' => $ecourses['linkedmultiple1_2']->id)), 'linkedmultiple2' => $edatagenerator->create_pmclass(array('courseid' => $ecourses['linkedmultiple1_2']->id)), 'linkedmultiple3' => $edatagenerator->create_pmclass(array('courseid' => $ecourses['linkedmultiple3']->id)));
     $classmoodlecourses = array($edatagenerator->assign_pmclass_to_moodlecourse($eclasses['linked1']->id, $mcourses['linked1']->id), $edatagenerator->assign_pmclass_to_moodlecourse($eclasses['linked2']->id, $mcourses['linked2']->id), $edatagenerator->assign_pmclass_to_moodlecourse($eclasses['linkedmultiple1']->id, $mcourses['linkedmultiple1']->id), $edatagenerator->assign_pmclass_to_moodlecourse($eclasses['linkedmultiple2']->id, $mcourses['linkedmultiple1']->id), $edatagenerator->assign_pmclass_to_moodlecourse($eclasses['linkedmultiple3']->id, $mcourses['linkedmultiple1']->id));
     // Create users in different setups.
     $cases = array();
     for ($i = 0; $i <= 7; $i++) {
         // Holds data for each case so we can use it later for assertions.
         $case = array();
         $case['muser'] = $this->getDataGenerator()->create_user(array('username' => 'testuser' . $i, 'idnumber' => 'testuser' . $i));
         switch ($i) {
             case 0:
                 // User w/ no student entry.
                 // We should get one entry for this user that does not include the ELIS student information.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
             case 1:
                 // User w/ student entry.
                 // We should get one entry for this user that includes the ELIS student information.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 $case['student'] = new \student(array('classid' => $case['pmclass'][0]->id, 'userid' => $case['cuser']->id, 'enrolmenttime' => $timenow, 'completetime' => 0, 'endtime' => 0, 'completestatusid' => STUSTATUS_NOTCOMPLETE, 'grade' => 0, 'credits' => 12, 'locked' => 0));
                 $case['student']->save();
                 $case['student'] = $case['student']->to_object();
                 break;
             case 2:
                 // User with multiple enrolments.
                 // We should get two entries for this user.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 $case['mcourse'][] = $mcourses['linked2'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked2'];
                 $mcrsctx = \context_course::instance($case['mcourse'][1]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
             case 3:
                 // User with multiple enrolments (one with a student entry).
                 // We should get two entries for this user, one with ELIS student information.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 $case['mcourse'][] = $mcourses['linked2'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked2'];
                 $mcrsctx = \context_course::instance($case['mcourse'][1]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 $case['student'] = new \student(array('classid' => $case['pmclass'][1]->id, 'userid' => $case['cuser']->id, 'enrolmenttime' => $timenow, 'completetime' => 0, 'endtime' => 0, 'completestatusid' => STUSTATUS_NOTCOMPLETE, 'grade' => 0, 'credits' => 5, 'locked' => 0));
                 $case['student']->save();
                 $case['student'] = $case['student']->to_object();
                 break;
             case 4:
                 // User enroled in a moodle class that is linked to multiple elis classes.
                 // The course this user is enroled in is linked to two ELIS classes that are part of one course, and another
                 // elis class that is part of another course.
                 // We should get three entries for this user (one for each linked ELIS class).
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linkedmultiple1'];
                 $case['pmcourse'][] = $ecourses['linkedmultiple1_2'];
                 $case['pmcourse'][] = $ecourses['linkedmultiple3'];
                 $case['pmclass'][] = $eclasses['linkedmultiple1'];
                 $case['pmclass'][] = $eclasses['linkedmultiple2'];
                 $case['pmclass'][] = $eclasses['linkedmultiple3'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
             case 5:
                 // Enroled in moodle course in non-gradebook role.
                 // We should not get an entry for this user.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $nongbookrole = max($gbookroles) + 1;
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $nongbookrole, 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
             case 6:
                 // No connected ELIS user.
                 // We should not get an entry for this user.
                 $case['cuser'] = null;
                 $case['usermoodle'] = null;
                 $case['mcourse'][] = $mcourses['linked1'];
                 $case['pmcourse'] = $ecourses[0];
                 $case['pmclass'][] = $eclasses['linked1'];
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
             case 7:
                 // Course not connected to ELIS class.
                 // We should not get an entry for this user.
                 $case['cuser'] = $edatagenerator->create_user((array) $case['muser']);
                 $case['usermoodle'] = $edatagenerator->assign_euser_to_muser($case['cuser']->id, $case['muser']->id, $case['cuser']->idnumber);
                 $case['mcourse'][] = $mcourses['notlinked1'];
                 $case['pmcourse'] = null;
                 $case['pmclass'] = array();
                 $mcrsctx = \context_course::instance($case['mcourse'][0]->id);
                 $gbookroles = explode(',', $CFG->gradebookroles);
                 $case['roleassignment'] = $DB->insert_record('role_assignments', array('roleid' => $gbookroles[0], 'contextid' => $mcrsctx->id, 'userid' => $case['muser']->id));
                 break;
         }
         $cases[$i] = $case;
     }
     $sync = new \local_elisprogram\moodle\synchronize();
     $rs = $sync->get_syncable_users();
     // Convert rs to array to better assert results.
     $syncableusers = array();
     foreach ($rs as $i => $rec) {
         $syncableusers[$rec->muid . '_' . $rec->moodlecourseid . '_' . $rec->pmclassid] = $rec;
     }
     ksort($syncableusers);
     $expectedresult = array($cases[0]['muser']->id . '_' . $cases[0]['mcourse'][0]->id . '_' . $cases[0]['pmclass'][0]->id => (object) array('muid' => (string) $cases[0]['muser']->id, 'username' => (string) $cases[0]['muser']->username, 'cmid' => (string) $cases[0]['cuser']->id, 'moodlecourseid' => (string) $cases[0]['mcourse'][0]->id, 'pmclassid' => (string) $cases[0]['pmclass'][0]->id, 'pmcourseid' => (string) $cases[0]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[0]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[0]['pmcourse']->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[1]['muser']->id . '_' . $cases[1]['mcourse'][0]->id . '_' . $cases[1]['pmclass'][0]->id => (object) array('muid' => (string) $cases[1]['muser']->id, 'username' => (string) $cases[1]['muser']->username, 'cmid' => (string) $cases[1]['cuser']->id, 'moodlecourseid' => (string) $cases[1]['mcourse'][0]->id, 'pmclassid' => (string) $cases[1]['pmclass'][0]->id, 'pmcourseid' => (string) $cases[1]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[1]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[1]['pmcourse']->credits, 'id' => (string) $cases[1]['student']->id, 'classid' => (string) $cases[1]['student']->classid, 'userid' => (string) $cases[1]['student']->userid, 'enrolmenttime' => (string) $cases[1]['student']->enrolmenttime, 'completetime' => (string) $cases[1]['student']->completetime, 'endtime' => (string) $cases[1]['student']->endtime, 'completestatusid' => (string) $cases[1]['student']->completestatusid, 'grade' => (string) $cases[1]['student']->grade, 'credits' => (string) $cases[1]['student']->credits, 'locked' => (string) $cases[1]['student']->locked), $cases[2]['muser']->id . '_' . $cases[2]['mcourse'][0]->id . '_' . $cases[2]['pmclass'][0]->id => (object) array('muid' => (string) $cases[2]['muser']->id, 'username' => (string) $cases[2]['muser']->username, 'cmid' => (string) $cases[2]['cuser']->id, 'moodlecourseid' => (string) $cases[2]['mcourse'][0]->id, 'pmclassid' => (string) $cases[2]['pmclass'][0]->id, 'pmcourseid' => (string) $cases[2]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[2]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[2]['pmcourse']->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[2]['muser']->id . '_' . $cases[2]['mcourse'][1]->id . '_' . $cases[2]['pmclass'][1]->id => (object) array('muid' => (string) $cases[2]['muser']->id, 'username' => (string) $cases[2]['muser']->username, 'cmid' => (string) $cases[2]['cuser']->id, 'moodlecourseid' => (string) $cases[2]['mcourse'][1]->id, 'pmclassid' => (string) $cases[2]['pmclass'][1]->id, 'pmcourseid' => (string) $cases[2]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[2]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[2]['pmcourse']->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[3]['muser']->id . '_' . $cases[3]['mcourse'][0]->id . '_' . $cases[3]['pmclass'][0]->id => (object) array('muid' => (string) $cases[3]['muser']->id, 'username' => (string) $cases[3]['muser']->username, 'cmid' => (string) $cases[3]['cuser']->id, 'moodlecourseid' => (string) $cases[3]['mcourse'][0]->id, 'pmclassid' => (string) $cases[3]['pmclass'][0]->id, 'pmcourseid' => (string) $cases[3]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[3]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[3]['pmcourse']->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[3]['muser']->id . '_' . $cases[3]['mcourse'][1]->id . '_' . $cases[3]['pmclass'][1]->id => (object) array('muid' => (string) $cases[3]['muser']->id, 'username' => (string) $cases[3]['muser']->username, 'cmid' => (string) $cases[3]['cuser']->id, 'moodlecourseid' => (string) $cases[3]['mcourse'][1]->id, 'pmclassid' => (string) $cases[3]['pmclass'][1]->id, 'pmcourseid' => (string) $cases[3]['pmcourse']->id, 'pmcoursecompletiongrade' => (string) $cases[3]['pmcourse']->completion_grade, 'pmcoursecredits' => (string) $cases[3]['pmcourse']->credits, 'id' => (string) $cases[3]['student']->id, 'classid' => (string) $cases[3]['student']->classid, 'userid' => (string) $cases[3]['student']->userid, 'enrolmenttime' => (string) $cases[3]['student']->enrolmenttime, 'completetime' => (string) $cases[3]['student']->completetime, 'endtime' => (string) $cases[3]['student']->endtime, 'completestatusid' => (string) $cases[3]['student']->completestatusid, 'grade' => (string) $cases[3]['student']->grade, 'credits' => (string) $cases[3]['student']->credits, 'locked' => (string) $cases[3]['student']->locked), $cases[4]['muser']->id . '_' . $cases[4]['mcourse'][0]->id . '_' . $cases[4]['pmclass'][0]->id => (object) array('muid' => (string) $cases[4]['muser']->id, 'username' => (string) $cases[4]['muser']->username, 'cmid' => (string) $cases[4]['cuser']->id, 'moodlecourseid' => (string) $cases[4]['mcourse'][0]->id, 'pmclassid' => (string) $cases[4]['pmclass'][0]->id, 'pmcourseid' => (string) $cases[4]['pmcourse'][0]->id, 'pmcoursecompletiongrade' => (string) $cases[4]['pmcourse'][0]->completion_grade, 'pmcoursecredits' => (string) $cases[4]['pmcourse'][0]->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[4]['muser']->id . '_' . $cases[4]['mcourse'][0]->id . '_' . $cases[4]['pmclass'][1]->id => (object) array('muid' => (string) $cases[4]['muser']->id, 'username' => (string) $cases[4]['muser']->username, 'cmid' => (string) $cases[4]['cuser']->id, 'moodlecourseid' => (string) $cases[4]['mcourse'][0]->id, 'pmclassid' => (string) $cases[4]['pmclass'][1]->id, 'pmcourseid' => (string) $cases[4]['pmcourse'][0]->id, 'pmcoursecompletiongrade' => (string) $cases[4]['pmcourse'][0]->completion_grade, 'pmcoursecredits' => (string) $cases[4]['pmcourse'][0]->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null), $cases[4]['muser']->id . '_' . $cases[4]['mcourse'][0]->id . '_' . $cases[4]['pmclass'][2]->id => (object) array('muid' => (string) $cases[4]['muser']->id, 'username' => (string) $cases[4]['muser']->username, 'cmid' => (string) $cases[4]['cuser']->id, 'moodlecourseid' => (string) $cases[4]['mcourse'][0]->id, 'pmclassid' => (string) $cases[4]['pmclass'][2]->id, 'pmcourseid' => (string) $cases[4]['pmcourse'][1]->id, 'pmcoursecompletiongrade' => (string) $cases[4]['pmcourse'][1]->completion_grade, 'pmcoursecredits' => (string) $cases[4]['pmcourse'][1]->credits, 'id' => null, 'classid' => null, 'userid' => null, 'enrolmenttime' => null, 'completetime' => null, 'endtime' => null, 'completestatusid' => null, 'grade' => null, 'credits' => null, 'locked' => null));
     $this->assertNotEmpty($syncableusers);
     $this->assertEquals(count($syncableusers), count($expectedresult));
     $this->assertEquals(array_keys($syncableusers), array_keys($expectedresult));
     foreach ($expectedresult as $k => $v) {
         $this->assertArrayHasKey($k, $syncableusers);
         $this->assertEquals($v, $syncableusers[$k], $k . ' not equal');
     }
     // Test individual user fetching.
     foreach ($cases as $i => $case) {
         $sync = new \local_elisprogram\moodle\synchronize();
         $rs = $sync->get_syncable_users($case['muser']->id);
         if ($i <= 4) {
             // These users must return something.
             $this->assertTrue($rs->valid());
             foreach ($rs as $i => $rec) {
                 $k = $rec->muid . '_' . $rec->moodlecourseid . '_' . $rec->pmclassid;
                 $this->assertArrayHasKey($k, $expectedresult);
                 $this->assertEquals($expectedresult[$k], $rec);
             }
         } else {
             // These users must not return anything.
             $this->assertEmpty($rs);
         }
     }
 }