/** * Test make_filter_options_custom function */ public function test_make_filter_options_custom() { global $DB; // Fixture. $datagenerator = new elis_program_datagenerator($DB); $pgm = $datagenerator->create_program(); $course = $datagenerator->create_course(); $pmclass = $datagenerator->create_pmclass(array('courseid' => $course->id)); $dataset = $this->createCsvDataSet(array('local_elisprogram_env' => elispm::file('tests/fixtures/environment.csv'))); $this->loadDataSet($dataset); // Tests. $choicestests = array('curriculum' => array('name' => array($pgm->id => $pgm->name)), 'course' => array('name' => array($course->id => $course->name)), 'class' => array('idnumber' => array($pmclass->id => $pmclass->idnumber), 'environmentid' => array(1 => 'Testing'))); foreach ($choicestests as $group => $names) { foreach ($names as $name => $expectedchoices) { $curclassopts = array('choices' => array(), 'wrapper' => array($group => '')); $filter = new generalized_filter_curriculumclass('filt-curriculumclass', 'Null', $curclassopts); $options = $filter->make_filter_options_custom(array(), $group, $name); $this->assertInternalType('array', $options); $this->assertArrayHasKey('choices', $options); $this->assertInternalType('array', $options['choices']); $this->assertEquals($expectedchoices, $options['choices']); unset($filter); } } }
/** * Test successful course update. */ public function test_success() { global $DB; // Create custom field. $fieldcat = new field_category(); $fieldcat->name = 'Test'; $fieldcat->save(); $field = new field(); $field->categoryid = $fieldcat->id; $field->shortname = 'testfield'; $field->name = 'Test Field'; $field->datatype = 'text'; $field->save(); $fieldctx = new field_contextlevel(); $fieldctx->fieldid = $field->id; $fieldctx->contextlevel = CONTEXT_ELIS_COURSE; $fieldctx->save(); // Grant permissions. $this->give_permissions(array('local/elisprogram:course_edit')); // Create test program. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'TestProgram')); // Create test course to update. $crs = new course(array('idnumber' => 'TestCourse', 'name' => 'Test Course', 'syllabus' => '')); $crs->save(); $course = array('idnumber' => 'TestCourse', 'name' => 'Test Course', 'code' => 'CRS1', 'syllabus' => 'Test syllabus', 'lengthdescription' => 'Weeks', 'length' => 2, 'credits' => 1.1, 'completion_grade' => 50, 'cost' => '$100', 'version' => '1.0.0', 'assignment' => $program->idnumber); // Update test course. $response = local_datahub_elis_course_update::course_update($course); $this->assertNotEmpty($response); $this->assertInternalType('array', $response); $this->assertArrayHasKey('messagecode', $response); $this->assertArrayHasKey('message', $response); $this->assertArrayHasKey('record', $response); $this->assertEquals(get_string('ws_course_update_success_code', 'local_datahub'), $response['messagecode']); $this->assertEquals(get_string('ws_course_update_success_msg', 'local_datahub'), $response['message']); $this->assertInternalType('array', $response['record']); $this->assertArrayHasKey('id', $response['record']); // Get course. $updatedcourse = new course($response['record']['id']); $updatedcourse->load(); $updatedcourse = $updatedcourse->to_array(); foreach ($course as $param => $val) { if ($param != 'assignment') { $this->assertArrayHasKey($param, $updatedcourse); $this->assertEquals($val, $updatedcourse[$param]); } } // Check that course was assigned to program. $curriculumcourseid = $DB->get_field(curriculumcourse::TABLE, 'id', array('curriculumid' => $program->id, 'courseid' => $response['record']['id'])); $this->assertNotEmpty($curriculumcourseid); }
/** * Test get_completion_counts function. */ public function test_get_completion_counts() { global $DB; // Fixture. $elisgen = new elis_program_datagenerator($DB); $pmcourse = $elisgen->create_course(); $class = $elisgen->create_pmclass(array('courseid' => $pmcourse->id)); $class2 = $elisgen->create_pmclass(array('courseid' => $pmcourse->id)); $user = $elisgen->create_user(); $user2 = $elisgen->create_user(); $elisgen->assign_user_to_class($user->id, $class->id); $elisgen->assign_user_to_class($user2->id, $class2->id); $course = new course(); $course->id = $pmcourse->id; $completioncounts = $course->get_completion_counts(); // Verify results. $this->assertInternalType('array', $completioncounts); $this->assertEquals(3, count($completioncounts)); $this->assertArrayHasKey(STUSTATUS_NOTCOMPLETE, $completioncounts); $this->assertArrayHasKey(STUSTATUS_FAILED, $completioncounts); $this->assertArrayHasKey(STUSTATUS_PASSED, $completioncounts); $this->assertEquals(2, $completioncounts[STUSTATUS_NOTCOMPLETE]); $this->assertEquals(0, $completioncounts[STUSTATUS_FAILED]); $this->assertEquals(0, $completioncounts[STUSTATUS_PASSED]); }
/** * Test enrol function */ public function test_enrol() { global $DB; // Fixture. $elisgen = new elis_program_datagenerator($DB); $pgm = $elisgen->create_program(); $track = $elisgen->create_track(array('curid' => $pgm->id)); $course = $elisgen->create_course(); $pmclass = $elisgen->create_pmclass(array('courseid' => $course->id)); $user = $elisgen->create_user(); $elisgen->assign_class_to_track($pmclass->id, $course->id, $track->id, true); $result = usertrack::enrol($user->id, $track->id); $this->assertTrue($result); // Validate curriculumstudent rec. $rec = $DB->get_record(curriculumstudent::TABLE, array('curriculumid' => $pgm->id, 'userid' => $user->id)); $this->assertNotEmpty($rec); // Validate student rec. $rec = $DB->get_record(student::TABLE, array('classid' => $pmclass->id, 'userid' => $user->id)); $this->assertNotEmpty($rec); }
/** * Test get_dashboard_program_data function. */ public function test_get_dashboard_program_data() { global $DB; $datagen = new elis_program_datagenerator($DB); // Create entities. $mockuser = $datagen->create_user(); $pgm = $datagen->create_program(); $pmcourse = $datagen->create_course(); $pmclass = $datagen->create_pmclass(array('courseid' => $pmcourse->id)); // Perform assignments. $curcourse = $datagen->assign_course_to_program($pmcourse->id, $pgm->id); $curstu = $datagen->assign_user_to_program($mockuser->id, $pgm->id); $stu = $datagen->assign_user_to_class($mockuser->id, $pmclass->id); $expectedusercurs = array($curstu->id => (object) array('id' => $curstu->id, 'curid' => $pgm->id, 'name' => $pgm->name)); $expectedcurriculas = array($pgm->id => array('id' => $pgm->id, 'name' => $pgm->name, 'data' => array(array($pmcourse->name, $pmclass->idnumber, $pmcourse->syllabus, 0, get_string('n_completed', 'local_elisprogram'), get_string('na', 'local_elisprogram'))))); $expectedclassids = array($pmclass->id); $expectedtotalcurricula = 1; $expectedcompletecoursesmap = array($pgm->id => 0); $expectedtotalcoursesmap = array($pgm->id => 1); $user = new user(); $user->id = $mockuser->id; list($usercurs, $curriculas, $classids, $totalcurricula, $completecoursesmap, $totalcoursesmap) = $user->get_dashboard_program_data(false, false); $this->assertEquals($expectedusercurs, $usercurs); $this->assertEquals($expectedcurriculas, $curriculas); $this->assertEquals($expectedclassids, $classids); $this->assertEquals($expectedtotalcurricula, $totalcurricula); $this->assertEquals($expectedcompletecoursesmap, $completecoursesmap); $this->assertEquals($expectedtotalcoursesmap, $totalcoursesmap); $expectedcurriculas = array(); $expectedtotalcurricula = 0; $expectedcompletecoursesmap = array(); $expectedtotalcoursesmap = array(); list($usercurs, $curriculas, $classids, $totalcurricula, $completecoursesmap, $totalcoursesmap) = $user->get_dashboard_program_data(true, true); $this->assertEquals($expectedusercurs, $usercurs); $this->assertEquals($expectedcurriculas, $curriculas); $this->assertEquals($expectedclassids, $classids); $this->assertEquals($expectedtotalcurricula, $totalcurricula); $this->assertEquals($expectedcompletecoursesmap, $completecoursesmap); $this->assertEquals($expectedtotalcoursesmap, $totalcoursesmap); }
/** * 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]); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $data The incoming program enrolment data. */ public function test_failure(array $data) { global $DB; // Create test program. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'TestProgramEnrolmentCreate')); $this->give_permissions(array('local/elisprogram:program_enrol')); $response = local_datahub_elis_program_enrolment_create::program_enrolment_create($data); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $tracktoupdate The incoming track data. */ public function test_failure(array $tracktoupdate) { global $DB; $this->give_permissions(array('local/elisprogram:track_edit')); // Setup program and track. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'test_program_idnumber', 'name' => 'ProgramName')); $track = $datagen->create_track(array('idnumber' => 'testtrack', 'name' => 'testtrackname', 'curid' => $program->id)); $response = local_datahub_elis_track_update::track_update($tracktoupdate); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $data The incoming userset enrolment delete data. */ public function test_failure(array $data) { global $DB; // Create test userset. $datagen = new elis_program_datagenerator($DB); $userset = $datagen->create_userset(array('name' => 'TestUsersetEnrolmentDelete')); $this->give_permissions(array('local/elisprogram:userset_enrol')); $response = local_datahub_elis_userset_enrolment_delete::userset_enrolment_delete($data); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $track The incoming track data. */ public function test_failure(array $track) { global $DB; $this->give_permissions(array('local/elisprogram:track_create')); // Setup program. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'test_program_idnumber', 'name' => 'ProgramName')); // Setup duplicate track. $duptrk = new track(array('idnumber' => 'DupTrackIdnumber', 'name' => 'DupTrackName', 'curid' => $program->id)); $duptrk->save(); $response = local_datahub_elis_track_create::track_create($track); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $data The incoming class enrolment data. */ public function test_failure(array $data) { global $DB; $this->give_permissions(array('local/elisprogram:class_enrol')); // Create test course and class. $datagen = new elis_program_datagenerator($DB); $crs = $datagen->create_course(array('idnumber' => 'TestCourse')); $cls = $datagen->create_pmclass(array('idnumber' => 'TestClassEnrolmentDelete', 'courseid' => $crs->id)); $response = local_datahub_elis_class_enrolment_delete::class_enrolment_delete($data); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $data The incoming track enrolment data. */ public function test_failure(array $data) { global $DB; // Create test program and track. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'TestProgramForTrack')); $track = $datagen->create_track(array('idnumber' => 'TestTrackForProgram', 'curid' => $program->id)); $this->give_permissions(array('local/elisprogram:track_enrol')); $response = local_datahub_elis_track_enrolment_delete::track_enrolment_delete($data); }
/** * Method to test pmclass:auto_create_class() * for ELIS-6854 * @dataProvider dataprovider_pmclass_auto_create * @param array $pmclassdata Data to pass to pmclass contructor * @param array $autocreateparams Data to pass to pmclass::auto_create_class * @param bool $accreturn False if pmclass::auto_create_class should return false, true otherwise * @param int $startdate Expected new class startdate * @param int $enddate Expected new class enddate */ public function test_pmclass_auto_create_class($pmclassdata, $autocreateparams, $accreturn, $startdate, $enddate) { global $DB; $datagenerator = new elis_program_datagenerator($DB); $course = $datagenerator->create_course(); if (!empty($pmclassdata['courseid'])) { $pmclassdata['courseid'] = $course->id; } if (!empty($autocreateparams['courseid'])) { $autocreateparams['courseid'] = $course->id; } $pmclass = new pmclass((object) $pmclassdata); $realaccret = $pmclass->auto_create_class($autocreateparams); if ($accreturn) { $this->assertTrue(!empty($realaccret)); $this->assertEquals($startdate, $pmclass->startdate); $this->assertEquals($enddate, $pmclass->enddate); } else { $this->assertFalse($realaccret); } }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $prg The incoming program data. */ public function test_failure(array $prg) { global $DB; $this->give_permissions(array('local/elisprogram:program_create')); // Create test program to update. $datagen = new elis_program_datagenerator($DB); $program = $datagen->create_program(array('idnumber' => 'testprogram', 'name' => 'testprogram')); $response = local_datahub_elis_program_update::program_update($prg); }
/** * Test get_instructors function. */ public function test_get_instructors() { global $DB; // Fixture. $datagenerator = new elis_program_datagenerator($DB); $user = $datagenerator->create_user(); $datagenerator->assign_instructor_to_class($user->id, 1); // Test. $instructor = new instructor(); $instructor->classid = 1; $instructors = $instructor->get_instructors(); // Verify. $count = 0; foreach ($instructors as $instructoruser) { $this->assertEquals($user->id, $instructoruser->id); $count++; } $this->assertEquals(1, $count); }
/** * Test failure conditions. * @dataProvider dataprovider_failure * @expectedException moodle_exception * @param array $data The incoming class enrolment data. */ public function test_failure(array $data) { global $DB; $this->give_permissions(array('local/elisprogram:class_enrol')); // Create test course and class. $datagen = new elis_program_datagenerator($DB); $crs = $datagen->create_course(array('idnumber' => 'TestCourse')); $cls = $datagen->create_pmclass(array('idnumber' => 'TestClassEnrolmentUpdate', 'courseid' => $crs->id)); $userid = $DB->get_field(user::TABLE, 'id', array('username' => 'assigninguser')); $this->create_class_enrolment($userid, $cls->id); $response = local_datahub_elis_class_enrolment_update::class_enrolment_update($data); }