Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
namespace core\moodlenet;
18
 
19
use core\context\user;
20
 
21
/**
22
 * Unit tests for {@see activity_packager}.
23
 *
24
 * @coversDefaultClass \core\moodlenet\activity_packager
25
 * @package core
26
 * @copyright 2023 Michael Hawkins <michaelh@moodle.com>
27
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
28
 */
29
class activity_packager_test extends \advanced_testcase {
30
 
31
    /**
32
     * Test fetching and overriding a backup task setting.
33
     *
34
     * @covers ::override_task_setting
35
     * @covers ::get_all_task_settings
36
     * @covers ::get_backup_controller
37
     */
38
    public function test_override_task_setting(): void {
39
        global $USER;
40
        $this->resetAfterTest();
41
        $this->setAdminUser();
42
 
43
        $generator = $this->getDataGenerator();
44
        $course = $generator->create_course();
45
        $assigndata = [
46
            'course' => $course->id,
47
            'name' => 'Extremely interesting assignment',
48
            'intro' => 'A great assignment to share',
49
        ];
50
        $assign = $generator->create_module('assign', $assigndata);
51
        $cminfo = get_fast_modinfo($course->id)->get_cm($assign->cmid);
52
        $packager = new activity_packager($cminfo, $USER->id);
53
 
54
        // Fetch all backup task settings.
55
        $rc = new \ReflectionClass(activity_packager::class);
56
        $rcmgetbackup = $rc->getMethod('get_backup_controller');
57
        $controller = $rcmgetbackup->invoke($packager);
58
        $rcmgetall = $rc->getMethod('get_all_task_settings');
59
        $tasksettings = $rcmgetall->invoke($packager, $controller);
60
 
61
        // Fetch the default settings and grab an example value (setting_root_users).
62
        $rootsettings = $tasksettings[\backup_root_task::class];
63
        $testsettingname = 'setting_root_users';
64
 
65
        $oldvalue = 99;
66
        foreach ($rootsettings as $setting) {
67
            $name = $setting->get_ui_name();
68
            if ($name == $testsettingname) {
69
                $oldvalue = $setting->get_value();
70
                break;
71
            }
72
        }
73
 
74
        // Check we found the setting value (either 0 or 1 are valid).
75
        $this->assertNotEquals(99, $oldvalue);
76
        $this->assertLessThanOrEqual(1, $oldvalue);
77
 
78
        // Override the setting_root_users value, then re-fetch the settings to check the change is reflected.
79
        $overridevalue = ($oldvalue == 1) ? 0 : 1;
80
        $rcmoverridesetting = $rc->getMethod('override_task_setting');
81
        $rcmoverridesetting->invoke($packager, $tasksettings, $testsettingname, $overridevalue);
82
        $tasksettings = $rcmgetall->invoke($packager, $controller);
83
        $rootsettings = $tasksettings[\backup_root_task::class];
84
 
85
        $newvalue = 99;
86
        foreach ($rootsettings as $setting) {
87
            $name = $setting->get_ui_name();
88
            if ($name == $testsettingname) {
89
                $newvalue = $setting->get_value();
90
                break;
91
            }
92
        }
93
 
94
        $this->assertEquals($overridevalue, $newvalue);
95
 
96
        // We have finished with the backup controller, so destroy it.
97
        $controller->destroy();
98
    }
99
 
100
    /**
101
     * Test overriding a backup task setting.
102
     *
103
     * @covers ::get_package
104
     * @covers ::package
105
     */
106
    public function test_get_package(): void {
107
        global $USER;
108
        $this->resetAfterTest();
109
        $this->setAdminUser();
110
 
111
        $currenttime = time();
112
        $generator = $this->getDataGenerator();
113
        $course = $generator->create_course();
114
 
115
        $assigndata = [
116
            'course' => $course->id,
117
            'name' => 'Extremely interesting assignment',
118
            'intro' => 'A great assignment to share',
119
        ];
120
        $assign = $generator->create_module('assign', $assigndata);
121
        $cminfo = get_fast_modinfo($course->id)->get_cm($assign->cmid);
122
        $packager = new activity_packager($cminfo, $USER->id);
123
        $package = $packager->get_package();
124
 
125
        // Confirm the expected stored_file object is returned.
126
        $this->assertInstanceOf(\stored_file::class, $package);
127
 
128
        // Check some known values in the returned stored_file object to confirm they match the file we have packaged.
129
        $this->assertNotEmpty($package->get_contenthash());
130
        $this->assertEquals(user::instance($USER->id)->id, $package->get_contextid());
131
        $this->assertEquals('user', $package->get_component());
132
        $this->assertEquals('draft', $package->get_filearea());
133
        $this->assertEquals('assign_backup.mbz', $package->get_filename());
134
        $this->assertGreaterThan(0, $package->get_filesize());
135
        $timecreated = $package->get_timecreated();
136
        $this->assertGreaterThanOrEqual($currenttime, $timecreated);
137
        $this->assertEquals($timecreated, $package->get_timemodified());
138
    }
139
}