/** * 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]); }