/**
     * IMS docs cannot have an empty start-date if it has a non-zero end-date
     * @expectedException     Exception
     * @expectedExceptionMessage UAIMS: Course Creation without valid start or end date
     */
    public function test_process_imsdoc_cant_lack_startdate()
    {
        global $DB, $CFG;
        $this->resetAfterTest(true);
        $xmldoc2 = <<<DOC2
<?xml version="1.0" encoding="utf-8"?>
<enterprise xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group recstatus="1"> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid>
<grouptype> <typevalue>Course</typevalue> </grouptype>
<description> <short>IDNUMBER</short> <long>Long description2</long> </description>
<org /> <timeframe> <end>2430816400</end> </timeframe> <enrollcontrol />
<relationship> <sourcedid> <source>AIS</source> <id>UOFAB-TEST</id> </sourcedid> </relationship>
<extension> <settings> <setting>visible</setting> <value>0</value> </settings>
<settings> <setting>format</setting> <value>topics</value> </settings> </extension>  </group></enterprise>
DOC2;
        $enrol = new enrol_uaims_plugin();
        $oldsetting = $enrol->get_config('enableqrvisibilitytoggle');
        // Enable updates from UAIMS documents.
        $enrol->set_config('enableqrvisibilitytoggle', true);
        $category = new stdClass();
        $category->name = "test";
        $category->description = "UOFAB-TEST";
        $category->idnumber = "UOFAB-TEST";
        $category->timemodified = time();
        $DB->insert_record('course_categories', $category);
        // Process missing start date.
        $enrol->process_imsdoc($xmldoc2);
        if ($oldsetting) {
            $enrol->set_config('enableqrvisibilitytoggle', $oldsetting);
        }
    }
 public function test_enrol_uaims_cron()
 {
     global $DB, $CFG;
     $this->resetAfterTest(true);
     // Run the cron on whatever data is in the database.
     // This checks that cron won't crash if the table is missing.
     $eup = new enrol_uaims_plugin();
     $eup->set_config('enableautocourseopenclose', 1);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $dbtables = $DB->get_tables(false);
     $this->assertEquals(true, array_key_exists('eclass_course_management', $dbtables));
     $ecmt = new eclass_course_manager_test();
     $eergisteren = time() - 2 * 86400;
     $gisteren = time() - 86400;
     $morgen = time() + 86400;
     $overmorgen = time() + 2 * 86400;
     // Course names are appended with Start, Now, and End, in chronological order.
     $coursense = $ecmt->create_course_vis_start_end(0, $morgen, $overmorgen);
     $coursesne = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen);
     $coursesen = $ecmt->create_course_vis_start_end(0, $eergisteren, $gisteren);
     $coursenes = $ecmt->create_course_vis_start_end(0, $overmorgen, $morgen);
     $courseens = $ecmt->create_course_vis_start_end(1, $morgen, $gisteren);
     $courseesn = $ecmt->create_course_vis_start_end(0, $gisteren, $eergisteren);
     $courseopendone = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen, time() - 86000);
     $courseclosedone = $ecmt->create_course_vis_start_end(1, $eergisteren, $gisteren, null, time() - 86000);
     // Disable auto open/close.  Visibility and times should stay unchanged.
     $eup->set_config('enableautocourseopenclose', 0);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesne->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseens->id, 1, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true);
     $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, true, false);
     // Enable auto open/close.  Visibility and times should change selectively.
     $eup->set_config('enableautocourseopenclose', 1);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesne->id, 1, false, true);
     $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, false, false);
     $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseens->id, 0, true, false);
     $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, false, false);
     $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true);
     $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, false, false);
 }