Example #1
0
 /**
  * Test get_elis_coursecompletion_grades method.
  */
 public function test_get_elis_coursecompletion_grades()
 {
     global $DB;
     $edatagenerator = new \elis_program_datagenerator($DB);
     $pmcourse = $edatagenerator->create_course();
     $pmclass1 = $edatagenerator->create_pmclass(array('courseid' => $pmcourse->id));
     $pmclass2 = $edatagenerator->create_pmclass(array('courseid' => $pmcourse->id));
     $eusers = array();
     $musers = array();
     for ($i = 0; $i < 6; $i++) {
         $euser = $edatagenerator->create_user(array('username' => 'testuser' . $i, 'idnumber' => 'testuser' . $i));
         $muser = $this->getDataGenerator()->create_user(array('username' => 'testuser' . $i, 'idnumber' => 'testuser' . $i));
         $edatagenerator->assign_euser_to_muser($euser->id, $muser->id, $euser->idnumber);
         $eusers[] = $euser;
         $musers[] = $muser;
     }
     $eusernomoodleuser = $edatagenerator->create_user(array('username' => 'testuser5', 'idnumber' => 'testuser5'));
     // Create grades.
     // 1. One user one class one grade.
     $grade1 = new \student_grade(array('userid' => $eusers[0]->id, 'classid' => $pmclass1->id, 'completionid' => 1, 'grade' => 71));
     $grade1->save();
     // 2. One user different class one grade.
     $grade2 = new \student_grade(array('userid' => $eusers[1]->id, 'classid' => $pmclass2->id, 'completionid' => 10, 'grade' => 72));
     $grade2->save();
     // 3. One user first class one grade (this tests a subsequent call with a larger muid but smaller pmclassid).
     $grade3 = new \student_grade(array('userid' => $eusers[2]->id, 'classid' => $pmclass1->id, 'completionid' => 1, 'grade' => 72));
     $grade3->save();
     // 4. One user one class two grades.
     $grade4 = new \student_grade(array('userid' => $eusers[3]->id, 'classid' => $pmclass1->id, 'completionid' => 1, 'grade' => 73));
     $grade4->save();
     $grade5 = new \student_grade(array('userid' => $eusers[3]->id, 'classid' => $pmclass1->id, 'completionid' => 2, 'grade' => 74));
     $grade5->save();
     // 5. One user two classes one grade in each.
     $grade6 = new \student_grade(array('userid' => $eusers[4]->id, 'classid' => $pmclass1->id, 'completionid' => 1, 'grade' => 75));
     $grade6->save();
     $grade7 = new \student_grade(array('userid' => $eusers[4]->id, 'classid' => $pmclass2->id, 'completionid' => 10, 'grade' => 76));
     $grade7->save();
     // 6. One user two classes one grade in one two grades in the other.
     $grade8 = new \student_grade(array('userid' => $eusers[5]->id, 'classid' => $pmclass1->id, 'completionid' => 1, 'grade' => 77));
     $grade8->save();
     $grade9 = new \student_grade(array('userid' => $eusers[5]->id, 'classid' => $pmclass2->id, 'completionid' => 10, 'grade' => 78));
     $grade9->save();
     $grade10 = new \student_grade(array('userid' => $eusers[5]->id, 'classid' => $pmclass2->id, 'completionid' => 11, 'grade' => 79));
     $grade10->save();
     $sync = new \local_elisprogram\moodle\synchronize();
     // 1. One user one class one grade.
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[0]->id, $pmclass1->id);
     $expected = (object) array('userid' => (string) $eusers[0]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '1', 'grade' => '71.00000', 'muid' => (string) $musers[0]->id, 'pmclassid' => $pmclass1->id, 'id' => $grade1->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade1->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected->completionid, $cmgrades);
     $this->assertEquals($expected, $cmgrades[$expected->completionid]);
     // 2. One user different class one grade.
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[1]->id, $pmclass2->id);
     $expected = (object) array('userid' => (string) $eusers[1]->id, 'classid' => (string) $pmclass2->id, 'completionid' => '10', 'grade' => '72.00000', 'muid' => (string) $musers[1]->id, 'pmclassid' => (string) $pmclass2->id, 'id' => $grade2->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade2->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected->completionid, $cmgrades);
     $this->assertEquals($expected, $cmgrades[$expected->completionid]);
     // 3. One user first class one grade (this tests a subsequent call with a larger muid but smaller pmclassid).
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[2]->id, $pmclass1->id);
     $expected = (object) array('userid' => (string) $eusers[2]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '1', 'grade' => '72.00000', 'muid' => (string) $musers[2]->id, 'pmclassid' => (string) $pmclass1->id, 'id' => $grade3->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade3->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected->completionid, $cmgrades);
     $this->assertEquals($expected, $cmgrades[$expected->completionid]);
     // 4. One user one class two grades.
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[3]->id, $pmclass1->id);
     $expected1 = (object) array('userid' => (string) $eusers[3]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '1', 'grade' => '73.00000', 'muid' => (string) $musers[3]->id, 'pmclassid' => (string) $pmclass1->id, 'id' => $grade4->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade4->timemodified);
     $expected2 = (object) array('userid' => (string) $eusers[3]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '2', 'grade' => '74.00000', 'muid' => (string) $musers[3]->id, 'pmclassid' => (string) $pmclass1->id, 'id' => $grade5->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade5->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected1->completionid, $cmgrades);
     $this->assertEquals($expected1, $cmgrades[$expected1->completionid]);
     $this->assertArrayHasKey($expected2->completionid, $cmgrades);
     $this->assertEquals($expected2, $cmgrades[$expected2->completionid]);
     // 5. One user two classes one grade in each.
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[4]->id, $pmclass1->id);
     $expected = (object) array('userid' => (string) $eusers[4]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '1', 'grade' => '75.00000', 'muid' => (string) $musers[4]->id, 'pmclassid' => (string) $pmclass1->id, 'id' => $grade6->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade6->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected->completionid, $cmgrades);
     $this->assertEquals($expected, $cmgrades[$expected->completionid]);
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[4]->id, $pmclass2->id);
     $expected = (object) array('userid' => (string) $eusers[4]->id, 'classid' => (string) $pmclass2->id, 'completionid' => '10', 'grade' => '76.00000', 'muid' => (string) $musers[4]->id, 'pmclassid' => (string) $pmclass2->id, 'id' => $grade7->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade7->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected->completionid, $cmgrades);
     $this->assertEquals($expected, $cmgrades[$expected->completionid]);
     // 6. One user two classes one grade in one two grades in the other.
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[5]->id, $pmclass1->id);
     $expected1 = (object) array('userid' => (string) $eusers[5]->id, 'classid' => (string) $pmclass1->id, 'completionid' => '1', 'grade' => '77.00000', 'muid' => (string) $musers[5]->id, 'pmclassid' => (string) $pmclass1->id, 'id' => $grade8->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade8->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected1->completionid, $cmgrades);
     $this->assertEquals($expected1, $cmgrades[$expected1->completionid]);
     $cmgrades = $sync->get_elis_coursecompletion_grades(0, $musers[5]->id, $pmclass2->id);
     $expected1 = (object) array('userid' => (string) $eusers[5]->id, 'classid' => (string) $pmclass2->id, 'completionid' => '10', 'grade' => '78.00000', 'muid' => (string) $musers[5]->id, 'pmclassid' => (string) $pmclass2->id, 'id' => $grade9->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade9->timemodified);
     $expected2 = (object) array('userid' => (string) $eusers[5]->id, 'classid' => (string) $pmclass2->id, 'completionid' => '11', 'grade' => '79.00000', 'muid' => (string) $musers[5]->id, 'pmclassid' => (string) $pmclass2->id, 'id' => $grade10->id, 'locked' => '0', 'timegraded' => '0', 'timemodified' => $grade10->timemodified);
     $this->assertNotEmpty($cmgrades);
     $this->assertArrayHasKey($expected1->completionid, $cmgrades);
     $this->assertEquals($expected1, $cmgrades[$expected1->completionid]);
 }