MDL-47502 test_statslib_cron_daily: fix provider
authorEugene Venter <eugene@catalyst.net.nz>
Sun, 19 Oct 2014 21:50:58 +0000 (10:50 +1300)
committerDan Poltawski <dan@moodle.com>
Tue, 11 Nov 2014 19:12:51 +0000 (19:12 +0000)
Fiddling with the database in the data provider causes "out of sync"
errors when running suite tests.

lib/tests/statslib_test.php

index d88824e..ba0117e 100644 (file)
@@ -50,43 +50,13 @@ class core_statslib_testcase extends advanced_testcase {
     /** @var array The replacements to be used when loading XML files **/
     protected $replacements = null;
 
-    /**
-     * Set up the database for tests.
-     *
-     * This function is needed so that daily_log_provider has the before-test set up from setUp()
-     */
-    protected function set_up_db() {
-        global $DB;
-
-        if ($DB->record_exists('user', array('username' => 'user1'))) {
-            return;
-        }
-
-        $datagen = self::getDataGenerator();
-
-        $user1   = $datagen->create_user(array('username'=>'user1'));
-        $user2   = $datagen->create_user(array('username'=>'user2'));
-
-        $course1 = $datagen->create_course(array('shortname'=>'course1'));
-
-        $success = enrol_try_internal_enrol($course1->id, $user1->id, 5);
-
-        if (!$success) {
-            trigger_error('User enrollment failed', E_USER_ERROR);
-        }
-
-        $context = context_system::instance();
-        role_assign(self::STID, $user2->id, $context->id);
-
-        $this->generate_replacement_list();
-    }
 
     /**
      * Setup function
      *   - Allow changes to CFG->debug for testing purposes.
      */
     protected function setUp() {
-        global $CFG;
+        global $CFG, $DB;
         parent::setUp();
 
         // Settings to force statistic to run during testing.
@@ -107,8 +77,30 @@ class core_statslib_testcase extends advanced_testcase {
         $CFG->statsruntimestarthour   = $shour;
         $CFG->statsruntimestartminute = 0;
 
-        $this->set_up_db();
+        if ($DB->record_exists('user', array('username' => 'user1'))) {
+            return;
+        }
+
+        // Set up the database.
+        $datagen = self::getDataGenerator();
+
+        $user1   = $datagen->create_user(array('username'=>'user1'));
+        $user2   = $datagen->create_user(array('username'=>'user2'));
+
+        $course1 = $datagen->create_course(array('shortname'=>'course1'));
+
+        $success = enrol_try_internal_enrol($course1->id, $user1->id, 5);
+
+        if (!$success) {
+            trigger_error('User enrollment failed', E_USER_ERROR);
+        }
+
+        $context = context_system::instance();
+        role_assign(self::STID, $user2->id, $context->id);
+
+        $this->generate_replacement_list();
 
+        // Reset between tests.
         $this->resetAfterTest();
     }
 
@@ -226,21 +218,18 @@ class core_statslib_testcase extends advanced_testcase {
 
     /**
      * Provides the log data for test_statslib_cron_daily.
+     *
+     * @return array of fixture XML log file names.
      */
     public function daily_log_provider() {
-        global $CFG, $DB;
-
-        $this->set_up_db();
+        $logfiles = array();
+        $fileno = array('00', '01', '02', '03', '04', '05', '06', '07', '08');
 
-        $tests = array('00', '01', '02', '03', '04', '05', '06', '07', '08');
-
-        $dataset = array();
-
-        foreach ($tests as $test) {
-            $dataset[] = $this->load_xml_data_file(__DIR__."/fixtures/statslib-test{$test}.xml");
+        foreach ($fileno as $no) {
+            $logfiles[] = array("statslib-test{$no}.xml");
         }
 
-        return $dataset;
+        return $logfiles;
     }
 
     /**
@@ -691,9 +680,12 @@ class core_statslib_testcase extends advanced_testcase {
      * @depends test_statslib_temp_table_fill
      * @dataProvider daily_log_provider
      */
-    public function test_statslib_cron_daily($logs, $stats) {
+    public function test_statslib_cron_daily($xmlfile) {
         global $CFG, $DB;
 
+        $dataset = $this->load_xml_data_file(__DIR__."/fixtures/{$xmlfile}");
+
+        list($logs, $stats) = $dataset;
         $this->prepare_db($logs, array('log'));
 
         // Stats cron daily uses mtrace, turn on buffering to silence output.