Proyectos de Subversion Moodle

Rev

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

Rev 1 Rev 1441
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
}