MDL-61578 backup: Added unit test for is_course_modified check.
authorAndrew Hancox <andrewdchancox@googlemail.com>
Mon, 11 Jun 2018 14:22:21 +0000 (15:22 +0100)
committerMichael Hawkins <michaelh@moodle.com>
Tue, 10 Jul 2018 02:50:30 +0000 (10:50 +0800)
backup/util/helper/tests/cronhelper_test.php

index 320daac..274e6dd 100644 (file)
@@ -27,6 +27,8 @@ defined('MOODLE_INTERNAL') || die();
 
 global $CFG;
 require_once($CFG->dirroot . '/backup/util/helper/backup_cron_helper.class.php');
 
 global $CFG;
 require_once($CFG->dirroot . '/backup/util/helper/backup_cron_helper.class.php');
+require_once($CFG->dirroot . '/backup/util/interfaces/checksumable.class.php');
+require_once("$CFG->dirroot/backup/backup.class.php");
 
 /**
  * Unit tests for backup cron helper
 
 /**
  * Unit tests for backup cron helper
@@ -320,6 +322,48 @@ class backup_cron_helper_testcase extends advanced_testcase {
         $this->assertArrayHasKey('1000432000', $backupfiles);
         $this->assertEquals('file3.mbz', $backupfiles['1000432000']);
     }
         $this->assertArrayHasKey('1000432000', $backupfiles);
         $this->assertEquals('file3.mbz', $backupfiles['1000432000']);
     }
+
+    /**
+     * Test {@link backup_cron_automated_helper::is_course_modified}.
+     */
+    public function test_is_course_modified() {
+        $this->resetAfterTest();
+        $this->preventResetByRollback();
+
+        set_config('enabled_stores', 'logstore_standard', 'tool_log');
+        set_config('buffersize', 0, 'logstore_standard');
+        set_config('logguests', 1, 'logstore_standard');
+
+        $course = $this->getDataGenerator()->create_course();
+
+        // New courses should be backed up.
+        $this->assertTrue(testable_backup_cron_automated_helper::testable_is_course_modified($course->id, 0));
+
+        $timepriortobackup = time();
+        $this->waitForSecond();
+        $otherarray = [
+            'format' => backup::FORMAT_MOODLE,
+            'mode' => backup::MODE_GENERAL,
+            'interactive' => backup::INTERACTIVE_YES,
+            'type' => backup::TYPE_1COURSE,
+        ];
+        $event = \core\event\course_backup_created::create([
+            'objectid' => $course->id,
+            'context'  => context_course::instance($course->id),
+            'other'    => $otherarray
+        ]);
+        $event->trigger();
+
+        // If the only action since last backup was a backup then no backup.
+        $this->assertFalse(testable_backup_cron_automated_helper::testable_is_course_modified($course->id, $timepriortobackup));
+
+        $course->groupmode = SEPARATEGROUPS;
+        $course->groupmodeforce = true;
+        update_course($course);
+
+        // Updated courses should be backed up.
+        $this->assertTrue(testable_backup_cron_automated_helper::testable_is_course_modified($course->id, $timepriortobackup));
+    }
 }
 
 /**
 }
 
 /**
@@ -340,4 +384,17 @@ class testable_backup_cron_automated_helper extends backup_cron_automated_helper
     public static function testable_get_backups_to_delete($backupfiles, $now) {
         return parent::get_backups_to_delete($backupfiles, $now);
     }
     public static function testable_get_backups_to_delete($backupfiles, $now) {
         return parent::get_backups_to_delete($backupfiles, $now);
     }
+
+    /**
+     * Provides access to protected method get_backups_to_remove.
+     *
+     * @param int $courseid course id to check
+     * @param int $since timestamp, from which to check
+     *
+     * @return bool true if the course was modified, false otherwise. This also returns false if no readers are enabled. This is
+     * intentional, since we cannot reliably determine if any modification was made or not.
+     */
+    public static function testable_is_course_modified($courseid, $since) {
+        return parent::is_course_modified($courseid, $since);
+    }
 }
 }