| Línea 20... |
Línea 20... |
| 20 |
|
20 |
|
| 21 |
use advanced_testcase;
|
21 |
use advanced_testcase;
|
| 22 |
use context_system;
|
22 |
use context_system;
|
| 23 |
use core_reportbuilder_generator;
|
23 |
use core_reportbuilder_generator;
|
| - |
|
24 |
use core_reportbuilder\reportbuilder\audience\manual;
|
| 24 |
use core_reportbuilder\reportbuilder\audience\manual;
|
25 |
use core_reportbuilder\local\models\audience as audience_model;
|
| - |
|
26 |
use core_user\reportbuilder\datasource\users;
|
| Línea 25... |
Línea 27... |
| 25 |
use core_user\reportbuilder\datasource\users;
|
27 |
use invalid_parameter_exception;
|
| 26 |
|
28 |
|
| 27 |
/**
|
29 |
/**
|
| 28 |
* Unit tests for audience helper
|
30 |
* Unit tests for audience helper
|
| 29 |
*
|
31 |
*
|
| 30 |
* @package core_reportbuilder
|
32 |
* @package core_reportbuilder
|
| 31 |
* @covers \core_reportbuilder\local\helpers\audience
|
33 |
* @covers \core_reportbuilder\local\helpers\audience
|
| 32 |
* @copyright 2021 David Matamoros <davidmc@moodle.com>
|
34 |
* @copyright 2021 David Matamoros <davidmc@moodle.com>
|
| 33 |
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
35 |
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
| Línea 34... |
Línea 36... |
| 34 |
*/
|
36 |
*/
|
| 35 |
class audience_test extends advanced_testcase {
|
37 |
final class audience_test extends advanced_testcase {
|
| 36 |
|
38 |
|
| 37 |
/**
|
39 |
/**
|
| Línea 330... |
Línea 332... |
| 330 |
$reports = $DB->get_fieldset_sql("SELECT r.id FROM {reportbuilder_report} r WHERE {$where}", $params);
|
332 |
$reports = $DB->get_fieldset_sql("SELECT r.id FROM {reportbuilder_report} r WHERE {$where}", $params);
|
| 331 |
$this->assertEquals([$report->get('id')], $reports);
|
333 |
$this->assertEquals([$report->get('id')], $reports);
|
| 332 |
}
|
334 |
}
|
| Línea 333... |
Línea 335... |
| 333 |
|
335 |
|
| - |
|
336 |
/**
|
| - |
|
337 |
* Test retrieving SQL for single audience
|
| - |
|
338 |
*/
|
| - |
|
339 |
public function test_user_audience_single_sql(): void {
|
| - |
|
340 |
global $DB;
|
| - |
|
341 |
|
| - |
|
342 |
$this->resetAfterTest();
|
| - |
|
343 |
|
| - |
|
344 |
$userone = $this->getDataGenerator()->create_user();
|
| - |
|
345 |
$usertwo = $this->getDataGenerator()->create_user();
|
| - |
|
346 |
$userthree = $this->getDataGenerator()->create_user();
|
| - |
|
347 |
|
| - |
|
348 |
/** @var core_reportbuilder_generator $generator */
|
| - |
|
349 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
| - |
|
350 |
$report = $generator->create_report(['name' => 'My report', 'source' => users::class]);
|
| - |
|
351 |
|
| - |
|
352 |
$audience = $generator->create_audience(['reportid' => $report->get('id'), 'classname' => manual::class,
|
| - |
|
353 |
'configdata' => [
|
| - |
|
354 |
'users' => [$userone->id, $usertwo->id],
|
| - |
|
355 |
],
|
| - |
|
356 |
]);
|
| - |
|
357 |
|
| - |
|
358 |
[$select, $params] = audience::user_audience_single_sql($audience->get_persistent(), 'u.id');
|
| - |
|
359 |
$users = $DB->get_fieldset_sql("SELECT u.id FROM {user} u WHERE {$select}", $params);
|
| - |
|
360 |
$this->assertEqualsCanonicalizing([$userone->id, $usertwo->id], $users);
|
| - |
|
361 |
}
|
| - |
|
362 |
|
| - |
|
363 |
/**
|
| - |
|
364 |
* Test retrieving SQL for multiple audiences
|
| - |
|
365 |
*/
|
| - |
|
366 |
public function test_user_audience_sql(): void {
|
| - |
|
367 |
global $DB;
|
| - |
|
368 |
|
| - |
|
369 |
$this->resetAfterTest();
|
| - |
|
370 |
|
| - |
|
371 |
$userone = $this->getDataGenerator()->create_user();
|
| - |
|
372 |
$usertwo = $this->getDataGenerator()->create_user();
|
| - |
|
373 |
$userthree = $this->getDataGenerator()->create_user();
|
| - |
|
374 |
$userfour = $this->getDataGenerator()->create_user();
|
| - |
|
375 |
|
| - |
|
376 |
/** @var core_reportbuilder_generator $generator */
|
| - |
|
377 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
| - |
|
378 |
$report = $generator->create_report(['name' => 'My report', 'source' => users::class]);
|
| - |
|
379 |
|
| - |
|
380 |
$audienceone = $generator->create_audience(['reportid' => $report->get('id'), 'classname' => manual::class,
|
| - |
|
381 |
'configdata' => [
|
| - |
|
382 |
'users' => [$userone->id, $usertwo->id],
|
| - |
|
383 |
],
|
| - |
|
384 |
]);
|
| - |
|
385 |
$audiencetwo = $generator->create_audience(['reportid' => $report->get('id'), 'classname' => manual::class,
|
| - |
|
386 |
'configdata' => [
|
| - |
|
387 |
'users' => [$usertwo->id, $userthree->id],
|
| - |
|
388 |
],
|
| - |
|
389 |
]);
|
| - |
|
390 |
|
| - |
|
391 |
[$selects, $params] = audience::user_audience_sql([$audienceone->get_persistent(), $audiencetwo->get_persistent()]);
|
| - |
|
392 |
$users = $DB->get_fieldset_sql("SELECT u.id FROM {user} u WHERE " . implode(' OR ', $selects), $params);
|
| - |
|
393 |
$this->assertEqualsCanonicalizing([$userone->id, $usertwo->id, $userthree->id], $users);
|
| - |
|
394 |
}
|
| - |
|
395 |
|
| 334 |
/**
|
396 |
/**
|
| 335 |
* Test getting list of audiences in use within schedules for a report
|
397 |
* Test getting list of audiences in use within schedules for a report
|
| 336 |
*/
|
398 |
*/
|
| 337 |
public function test_get_audiences_for_report_schedules(): void {
|
399 |
public function test_get_audiences_for_report_schedules(): void {
|
| Línea 360... |
Línea 422... |
| 360 |
$this->assertEqualsCanonicalizing([
|
422 |
$this->assertEqualsCanonicalizing([
|
| 361 |
$audienceone->get_persistent()->get('id'),
|
423 |
$audienceone->get_persistent()->get('id'),
|
| 362 |
$audiencetwo->get_persistent()->get('id'),
|
424 |
$audiencetwo->get_persistent()->get('id'),
|
| 363 |
], $audiences);
|
425 |
], $audiences);
|
| 364 |
}
|
426 |
}
|
| - |
|
427 |
|
| - |
|
428 |
/**
|
| - |
|
429 |
* Testing deleting report audience
|
| - |
|
430 |
*/
|
| - |
|
431 |
public function test_delete_report_audience(): void {
|
| - |
|
432 |
$this->resetAfterTest();
|
| - |
|
433 |
$this->setAdminUser();
|
| - |
|
434 |
|
| - |
|
435 |
/** @var core_reportbuilder_generator $generator */
|
| - |
|
436 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
| - |
|
437 |
|
| - |
|
438 |
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'default' => false]);
|
| - |
|
439 |
$audienceone = $generator->create_audience(['reportid' => $report->get('id'), 'configdata' => []]);
|
| - |
|
440 |
$audiencetwo = $generator->create_audience(['reportid' => $report->get('id'), 'configdata' => []]);
|
| - |
|
441 |
|
| - |
|
442 |
$audiences = audience_model::get_records(['reportid' => $report->get('id')]);
|
| - |
|
443 |
$this->assertCount(2, $audiences);
|
| - |
|
444 |
|
| - |
|
445 |
// Delete the first audience.
|
| - |
|
446 |
$result = audience::delete_report_audience($report->get('id'), $audienceone->get_persistent()->get('id'));
|
| - |
|
447 |
$this->assertTrue($result);
|
| - |
|
448 |
|
| - |
|
449 |
// We should be left with only the second audience.
|
| - |
|
450 |
$audiences = audience_model::get_records(['reportid' => $report->get('id')]);
|
| - |
|
451 |
$this->assertCount(1, $audiences);
|
| - |
|
452 |
$this->assertEquals($audiencetwo->get_persistent()->get('id'), reset($audiences)->get('id'));
|
| - |
|
453 |
}
|
| - |
|
454 |
|
| - |
|
455 |
/**
|
| - |
|
456 |
* Testing deleting invalid report audience
|
| - |
|
457 |
*/
|
| - |
|
458 |
public function test_delete_report_audience_invalid(): void {
|
| - |
|
459 |
$this->resetAfterTest();
|
| - |
|
460 |
$this->setAdminUser();
|
| - |
|
461 |
|
| - |
|
462 |
/** @var core_reportbuilder_generator $generator */
|
| - |
|
463 |
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
| - |
|
464 |
|
| - |
|
465 |
$reportone = $generator->create_report(['name' => 'Report one', 'source' => users::class, 'default' => false]);
|
| - |
|
466 |
$audienceone = $generator->create_audience(['reportid' => $reportone->get('id'), 'configdata' => []]);
|
| - |
|
467 |
|
| - |
|
468 |
$reporttwo = $generator->create_report(['name' => 'Report two', 'source' => users::class, 'default' => false]);
|
| - |
|
469 |
|
| - |
|
470 |
$this->expectException(invalid_parameter_exception::class);
|
| - |
|
471 |
$this->expectExceptionMessage('Invalid audience');
|
| - |
|
472 |
audience::delete_report_audience($reporttwo->get('id'), $audienceone->get_persistent()->get('id'));
|
| - |
|
473 |
}
|
| 365 |
}
|
474 |
}
|