Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 19... Línea 19...
19
namespace core_reportbuilder\privacy;
19
namespace core_reportbuilder\privacy;
Línea 20... Línea 20...
20
 
20
 
21
use context_system;
21
use context_system;
22
use core_privacy\local\metadata\collection;
22
use core_privacy\local\metadata\collection;
23
use core_privacy\local\metadata\types\database_table;
-
 
24
use core_privacy\local\metadata\types\user_preference;
23
use core_privacy\local\metadata\types\database_table;
25
use core_privacy\local\request\userlist;
24
use core_privacy\local\request\userlist;
26
use core_privacy\local\request\writer;
25
use core_privacy\local\request\writer;
27
use core_privacy\tests\provider_testcase;
26
use core_privacy\tests\provider_testcase;
28
use core_reportbuilder_generator;
-
 
29
use core_reportbuilder\manager;
27
use core_reportbuilder_generator;
30
use core_reportbuilder\local\helpers\user_filter_manager;
-
 
31
use core_reportbuilder\local\models\audience;
-
 
32
use core_reportbuilder\local\models\column;
-
 
33
use core_reportbuilder\local\models\filter;
-
 
34
use core_reportbuilder\local\models\report;
28
use core_reportbuilder\local\helpers\user_filter_manager;
35
use core_reportbuilder\local\models\schedule;
29
use core_reportbuilder\local\models\{audience, column, filter, report, schedule, user_filter};
Línea 36... Línea 30...
36
use core_user\reportbuilder\datasource\users;
30
use core_user\reportbuilder\datasource\users;
37
 
31
 
38
/**
32
/**
39
 * Unit tests for privacy provider
33
 * Unit tests for privacy provider
40
 *
34
 *
41
 * @package     core_reportbuilder
35
 * @package     core_reportbuilder
42
 * @covers      \core_reportbuilder\privacy\provider
36
 * @covers      \core_reportbuilder\privacy\provider
43
 * @copyright   2021 David Matamoros <davidmc@moodle.com>
37
 * @copyright   2021 David Matamoros <davidmc@moodle.com>
44
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
Línea 45... Línea 39...
45
 */
39
 */
46
class provider_test extends provider_testcase {
40
final class provider_test extends provider_testcase {
47
 
41
 
48
    /**
42
    /**
49
     * Test provider metadata
43
     * Test provider metadata
50
     */
44
     */
Línea 51... Línea 45...
51
    public function test_get_metadata(): void {
45
    public function test_get_metadata(): void {
-
 
46
        $collection = new collection('core_reportbuilder');
Línea 52... Línea -...
52
        $collection = new collection('core_reportbuilder');
-
 
53
        $metadata = provider::get_metadata($collection)->get_collection();
47
        $metadata = provider::get_metadata($collection)->get_collection();
54
 
-
 
55
        $this->assertCount(6, $metadata);
-
 
56
 
48
 
57
        $this->assertInstanceOf(database_table::class, $metadata[0]);
-
 
58
        $this->assertEquals(report::TABLE, $metadata[0]->get_name());
-
 
59
 
49
        $this->assertCount(6, $metadata);
60
        $this->assertInstanceOf(database_table::class, $metadata[1]);
-
 
61
        $this->assertEquals(column::TABLE, $metadata[1]->get_name());
50
        $this->assertContainsOnlyInstancesOf(database_table::class, $metadata);
62
 
51
 
63
        $this->assertInstanceOf(database_table::class, $metadata[2]);
-
 
64
        $this->assertEquals(filter::TABLE, $metadata[2]->get_name());
-
 
65
 
52
        $this->assertEquals(report::TABLE, $metadata[0]->get_name());
66
        $this->assertInstanceOf(database_table::class, $metadata[3]);
-
 
67
        $this->assertEquals(audience::TABLE, $metadata[3]->get_name());
-
 
68
 
53
        $this->assertEquals(column::TABLE, $metadata[1]->get_name());
Línea 69... Línea 54...
69
        $this->assertInstanceOf(database_table::class, $metadata[4]);
54
        $this->assertEquals(filter::TABLE, $metadata[2]->get_name());
70
        $this->assertEquals(schedule::TABLE, $metadata[4]->get_name());
55
        $this->assertEquals(user_filter::TABLE, $metadata[3]->get_name());
71
 
56
        $this->assertEquals(audience::TABLE, $metadata[4]->get_name());
Línea 89... Línea 74...
89
        $this->assertCount(1, $contextlist);
74
        $this->assertCount(1, $contextlist);
90
        $this->assertInstanceOf(context_system::class, $contextlist->current());
75
        $this->assertInstanceOf(context_system::class, $contextlist->current());
91
    }
76
    }
Línea 92... Línea 77...
92
 
77
 
-
 
78
    /**
-
 
79
     * Test getting contexts for user who created a user filter for a report by another user
-
 
80
     */
-
 
81
    public function test_get_contexts_for_userid_user_filter(): void {
-
 
82
        $this->resetAfterTest();
-
 
83
        $this->setAdminUser();
-
 
84
 
-
 
85
        /** @var core_reportbuilder_generator $generator */
-
 
86
        $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
-
 
87
        $report = $generator->create_report(['name' => 'Users', 'source' => users::class]);
-
 
88
 
-
 
89
        // Switch user, create a report audience.
-
 
90
        $user = $this->getDataGenerator()->create_user();
-
 
91
        $this->setUser($user);
-
 
92
 
-
 
93
        user_filter_manager::set($report->get('id'), ['entity:filter_name' => 1]);
-
 
94
 
-
 
95
        $contextlist = $this->get_contexts_for_userid((int) $user->id, 'core_reportbuilder');
-
 
96
        $this->assertCount(1, $contextlist);
-
 
97
        $this->assertInstanceOf(context_system::class, $contextlist->current());
-
 
98
    }
-
 
99
 
93
    /**
100
    /**
94
     * Test getting contexts for user who created an audience for a report by another user
101
     * Test getting contexts for user who created an audience for a report by another user
95
     */
102
     */
96
    public function test_get_contexts_for_userid_audience(): void {
103
    public function test_get_contexts_for_userid_audience(): void {
97
        $this->resetAfterTest();
104
        $this->resetAfterTest();
Línea 147... Línea 154...
147
        $reportuser = $this->getDataGenerator()->create_user();
154
        $reportuser = $this->getDataGenerator()->create_user();
148
        $this->setUser($reportuser);
155
        $this->setUser($reportuser);
Línea 149... Línea 156...
149
 
156
 
Línea -... Línea 157...
-
 
157
        $report = $generator->create_report(['name' => 'Users', 'source' => users::class]);
-
 
158
 
-
 
159
        // Switch user, create a user filter.
-
 
160
        $filteruser  = $this->getDataGenerator()->create_user();
-
 
161
        $this->setUser($filteruser);
-
 
162
 
150
        $report = $generator->create_report(['name' => 'Users', 'source' => users::class]);
163
        user_filter_manager::set($report->get('id'), ['entity:filter_name' => 1]);
151
 
164
 
152
        // Switch user, create a report audience.
165
        // Switch user, create a report audience.
Línea 153... Línea 166...
153
        $audienceuser = $this->getDataGenerator()->create_user();
166
        $audienceuser = $this->getDataGenerator()->create_user();
Línea 164... Línea 177...
164
        $userlist = new userlist(context_system::instance(), 'core_reportbuilder');
177
        $userlist = new userlist(context_system::instance(), 'core_reportbuilder');
165
        provider::get_users_in_context($userlist);
178
        provider::get_users_in_context($userlist);
Línea 166... Línea 179...
166
 
179
 
167
        $this->assertEqualsCanonicalizing([
180
        $this->assertEqualsCanonicalizing([
-
 
181
            $reportuser->id,
168
            $reportuser->id,
182
            $filteruser->id,
169
            $audienceuser->id,
183
            $audienceuser->id,
170
            $scheduleuser->id,
184
            $scheduleuser->id,
171
        ], $userlist->get_userids());
185
        ], $userlist->get_userids());
Línea 190... Línea 204...
190
            'reportid' => $report->get('id'),
204
            'reportid' => $report->get('id'),
191
            'audiences' => json_encode([$audience->get_persistent()->get('id')]),
205
            'audiences' => json_encode([$audience->get_persistent()->get('id')]),
192
            'name' => 'My schedule',
206
            'name' => 'My schedule',
193
        ]);
207
        ]);
Línea -... Línea 208...
-
 
208
 
-
 
209
        user_filter_manager::set($report->get('id'), ['entity:filter_name' => 1]);
194
 
210
 
195
        $context = context_system::instance();
211
        $context = context_system::instance();
Línea 196... Línea 212...
196
        $this->export_context_data_for_user((int) $user->id, $context, 'core_reportbuilder');
212
        $this->export_context_data_for_user((int) $user->id, $context, 'core_reportbuilder');
197
 
213
 
Línea 208... Línea 224...
208
        $this->assertEquals($user->id, $reportdata->usercreated);
224
        $this->assertEquals($user->id, $reportdata->usercreated);
209
        $this->assertEquals($user->id, $reportdata->usermodified);
225
        $this->assertEquals($user->id, $reportdata->usermodified);
210
        $this->assertNotEmpty($reportdata->timecreated);
226
        $this->assertNotEmpty($reportdata->timecreated);
211
        $this->assertNotEmpty($reportdata->timemodified);
227
        $this->assertNotEmpty($reportdata->timemodified);
Línea -... Línea 228...
-
 
228
 
-
 
229
        // Exported user filter data.
-
 
230
        $userfilterdata = $writer->get_related_data($subcontext, 'userfilters')->data;
-
 
231
 
-
 
232
        $this->assertCount(1, $userfilterdata);
-
 
233
        $userfilterdata = reset($userfilterdata);
-
 
234
 
-
 
235
        $this->assertEquals('{"entity:filter_name":1}', $userfilterdata->filterdata);
-
 
236
        $this->assertNotEmpty($userfilterdata->timecreated);
-
 
237
        $this->assertNotEmpty($userfilterdata->timemodified);
212
 
238
 
213
        // Exported audience data.
239
        // Exported audience data.
Línea 214... Línea 240...
214
        $audiencedata = $writer->get_related_data($subcontext, 'audiences')->data;
240
        $audiencedata = $writer->get_related_data($subcontext, 'audiences')->data;
215
 
241
 
Línea 260... Línea 286...
260
        $context = context_system::instance();
286
        $context = context_system::instance();
261
        $this->export_context_data_for_user((int) $user->id, $context, 'core_reportbuilder');
287
        $this->export_context_data_for_user((int) $user->id, $context, 'core_reportbuilder');
Línea 262... Línea 288...
262
 
288
 
263
        $this->assertFalse(writer::with_context($context)->has_any_data());
289
        $this->assertFalse(writer::with_context($context)->has_any_data());
264
    }
-
 
265
 
-
 
266
    /**
-
 
267
     * Test to check export_user_preferences.
-
 
268
     */
-
 
269
    public function test_export_user_preferences(): void {
-
 
270
        $this->resetAfterTest();
-
 
271
 
-
 
272
        $user1 = $this->getDataGenerator()->create_user();
-
 
273
        $user2 = $this->getDataGenerator()->create_user();
-
 
274
        $this->setUser($user1);
-
 
275
 
-
 
276
        // Create report and set some filters for the user.
-
 
277
        $report1 = manager::create_report_persistent((object) [
-
 
278
            'type' => 1,
-
 
279
            'source' => 'class',
-
 
280
        ]);
-
 
281
        $filtervalues1 = [
-
 
282
            'task_log:name_operator' => 0,
-
 
283
            'task_log:name_value' => 'My task logs',
-
 
284
        ];
-
 
285
        user_filter_manager::set($report1->get('id'), $filtervalues1);
-
 
286
 
-
 
287
        // Add a filter for user2.
-
 
288
        $filtervalues1user2 = [
-
 
289
            'task_log:name_operator' => 0,
-
 
290
            'task_log:name_value' => 'My task logs user2',
-
 
291
        ];
-
 
292
        user_filter_manager::set($report1->get('id'), $filtervalues1user2, (int)$user2->id);
-
 
293
 
-
 
294
        // Create a second report and set some filters for the user.
-
 
295
        $report2 = manager::create_report_persistent((object) [
-
 
296
            'type' => 1,
-
 
297
            'source' => 'class',
-
 
298
        ]);
-
 
299
        $filtervalues2 = [
-
 
300
            'config_change:setting_operator' => 0,
-
 
301
            'config_change:setting_value' => str_repeat('A', 3000),
-
 
302
        ];
-
 
303
        user_filter_manager::set($report2->get('id'), $filtervalues2);
-
 
304
 
-
 
305
        // Switch to admin user (so we can validate preferences of our test user are still exported).
-
 
306
        $this->setAdminUser();
-
 
307
 
-
 
308
        // Export user preferences.
-
 
309
        provider::export_user_preferences((int)$user1->id);
-
 
310
        $writer = writer::with_context(context_system::instance());
-
 
311
        $prefs = $writer->get_user_preferences('core_reportbuilder');
-
 
312
 
-
 
313
        // Check that user preferences only contain the 2 preferences from user1.
-
 
314
        $this->assertCount(2, (array)$prefs);
-
 
315
 
-
 
316
        // Check that exported user preferences for report1 are correct.
-
 
317
        $report1key = 'reportbuilder-report-' . $report1->get('id');
-
 
318
        $this->assertEquals(json_encode($filtervalues1, JSON_PRETTY_PRINT), $prefs->$report1key->value);
-
 
319
 
-
 
320
        // Check that exported user preferences for report2 are correct.
-
 
321
        $report2key = 'reportbuilder-report-' . $report2->get('id');
-
 
322
        $this->assertEquals(json_encode($filtervalues2, JSON_PRETTY_PRINT), $prefs->$report2key->value);
-
 
323
    }
290
    }