| 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 |
}
|