mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 09:56:38 +02:00
Merge branch 'MDL-80245' of https://github.com/paulholden/moodle
This commit is contained in:
commit
484e52f6ae
17 changed files with 493 additions and 44 deletions
|
@ -20,7 +20,9 @@ namespace core_reportbuilder\local\filters;
|
|||
|
||||
use advanced_testcase;
|
||||
use lang_string;
|
||||
use core_reportbuilder_generator;
|
||||
use core_reportbuilder\local\report\filter;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
/**
|
||||
* Unit tests for tags report filter
|
||||
|
@ -38,7 +40,7 @@ class tags_test extends advanced_testcase {
|
|||
*
|
||||
* @return array[]
|
||||
*/
|
||||
public function get_sql_filter_provider(): array {
|
||||
public static function get_sql_filter_provider(): array {
|
||||
return [
|
||||
'Any value' => [tags::ANY_VALUE, null, ['course01', 'course01', 'course02', 'course03']],
|
||||
'Not empty' => [tags::NOT_EMPTY, null, ['course01', 'course01', 'course02']],
|
||||
|
@ -102,4 +104,78 @@ class tags_test extends advanced_testcase {
|
|||
$courses = $DB->get_fieldset_sql($sql, $params);
|
||||
$this->assertEqualsCanonicalizing($expectedcoursenames, $courses);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for {@see test_get_sql_filter_component}
|
||||
*
|
||||
* @return array[]
|
||||
*/
|
||||
public static function get_sql_filter_component_provider(): array {
|
||||
return [
|
||||
'Any value' => [tags::ANY_VALUE, null, ['report01', 'report02']],
|
||||
'Not empty' => [tags::NOT_EMPTY, null, ['report01']],
|
||||
'Empty' => [tags::EMPTY, null, ['report02']],
|
||||
'Equal to unselected' => [tags::EQUAL_TO, null, ['report01', 'report02']],
|
||||
'Equal to selected tag' => [tags::EQUAL_TO, 'fish', ['report01']],
|
||||
'Equal to selected tag (different component)' => [tags::EQUAL_TO, 'cat', []],
|
||||
'Not equal to unselected' => [tags::NOT_EQUAL_TO, null, ['report01', 'report02']],
|
||||
'Not equal to selected tag' => [tags::NOT_EQUAL_TO, 'fish', ['report02']],
|
||||
'Not Equal to selected tag (different component)' => [tags::NOT_EQUAL_TO, 'cat', ['report01', 'report02']],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting filter SQL
|
||||
*
|
||||
* @param int $operator
|
||||
* @param string|null $tagname
|
||||
* @param array $expectedreportnames
|
||||
*
|
||||
* @dataProvider get_sql_filter_component_provider
|
||||
*/
|
||||
public function test_get_sql_filter_component(int $operator, ?string $tagname, array $expectedreportnames): void {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Create a course with tags, we shouldn't ever get this data back when specifying another component.
|
||||
$this->getDataGenerator()->create_course(['tags' => ['cat', 'dog']]);
|
||||
|
||||
/** @var core_reportbuilder_generator $generator */
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
$generator->create_report(['name' => 'report01', 'source' => users::class, 'tags' => ['fish']]);
|
||||
$generator->create_report(['name' => 'report02', 'source' => users::class]);
|
||||
|
||||
$filter = (new filter(
|
||||
tags::class,
|
||||
'tags',
|
||||
new lang_string('tags'),
|
||||
'testentity',
|
||||
'r.id'
|
||||
))->set_options([
|
||||
'component' => 'core_reportbuilder',
|
||||
'itemtype' => 'reportbuilder_report',
|
||||
]);
|
||||
|
||||
// Create instance of our filter, passing ID of the tag if specified.
|
||||
if ($tagname !== null) {
|
||||
$tagid = $DB->get_field('tag', 'id', ['name' => $tagname], MUST_EXIST);
|
||||
$value = [$tagid];
|
||||
} else {
|
||||
$value = null;
|
||||
}
|
||||
|
||||
[$select, $params] = tags::create($filter)->get_sql_filter([
|
||||
$filter->get_unique_identifier() . '_operator' => $operator,
|
||||
$filter->get_unique_identifier() . '_value' => $value,
|
||||
]);
|
||||
|
||||
$sql = 'SELECT r.name FROM {reportbuilder_report} r';
|
||||
if ($select) {
|
||||
$sql .= " WHERE {$select}";
|
||||
}
|
||||
|
||||
$reports = $DB->get_fieldset_sql($sql, $params);
|
||||
$this->assertEqualsCanonicalizing($expectedreportnames, $reports);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,8 +21,10 @@ namespace core_reportbuilder\local\helpers;
|
|||
use advanced_testcase;
|
||||
use core_reportbuilder_generator;
|
||||
use invalid_parameter_exception;
|
||||
use core_reportbuilder\datasource;
|
||||
use core_reportbuilder\local\models\column;
|
||||
use core_reportbuilder\local\models\filter;
|
||||
use core_tag_tag;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
/**
|
||||
|
@ -35,6 +37,49 @@ use core_user\reportbuilder\datasource\users;
|
|||
*/
|
||||
class report_test extends advanced_testcase {
|
||||
|
||||
/**
|
||||
* Test creation report
|
||||
*/
|
||||
public function test_create_report(): void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$report = report::create_report((object) [
|
||||
'name' => 'My report',
|
||||
'source' => users::class,
|
||||
'tags' => ['cat', 'dog'],
|
||||
]);
|
||||
|
||||
$this->assertEquals('My report', $report->get('name'));
|
||||
$this->assertEquals(datasource::TYPE_CUSTOM_REPORT, $report->get('type'));
|
||||
$this->assertEqualsCanonicalizing(['cat', 'dog'],
|
||||
core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report->get('id')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test updating report
|
||||
*/
|
||||
public function test_update_report(): void {
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
/** @var core_reportbuilder_generator $generator */
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
$report = $generator->create_report(['name' => 'My report', 'source' => users::class, 'uniquerows' => 0]);
|
||||
|
||||
$reportupdated = report::update_report((object) [
|
||||
'id' => $report->get('id'),
|
||||
'name' => 'My renamed report',
|
||||
'uniquerows' => 1,
|
||||
'tags' => ['cat', 'dog'],
|
||||
]);
|
||||
|
||||
$this->assertEquals('My renamed report', $reportupdated->get('name'));
|
||||
$this->assertTrue($reportupdated->get('uniquerows'));
|
||||
$this->assertEqualsCanonicalizing(['cat', 'dog'],
|
||||
core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $reportupdated->get('id')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test deleting report
|
||||
*/
|
||||
|
@ -46,7 +91,8 @@ class report_test extends advanced_testcase {
|
|||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
|
||||
// Create Report1 and add some elements.
|
||||
$report1 = $generator->create_report(['name' => 'My report 1', 'source' => users::class, 'default' => false]);
|
||||
$report1 = $generator->create_report(['name' => 'My report 1', 'source' => users::class, 'default' => false,
|
||||
'tags' => ['cat', 'dog']]);
|
||||
$column1 = $generator->create_column(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
$filter1 = $generator->create_filter(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
$condition1 = $generator->create_condition(['reportid' => $report1->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
|
@ -58,13 +104,15 @@ class report_test extends advanced_testcase {
|
|||
$condition2 = $generator->create_condition(['reportid' => $report2->get('id'), 'uniqueidentifier' => 'user:email']);
|
||||
|
||||
// Delete Report1.
|
||||
report::delete_report($report1->get('id'));
|
||||
$result = report::delete_report($report1->get('id'));
|
||||
$this->assertTrue($result);
|
||||
|
||||
// Make sure Report1, and all it's elements are deleted.
|
||||
$this->assertFalse($report1::record_exists($report1->get('id')));
|
||||
$this->assertFalse($column1::record_exists($column1->get('id')));
|
||||
$this->assertFalse($filter1::record_exists($filter1->get('id')));
|
||||
$this->assertFalse($condition1::record_exists($condition1->get('id')));
|
||||
$this->assertEmpty(core_tag_tag::get_item_tags_array('core_reportbuilder', 'reportbuilder_report', $report1->get('id')));
|
||||
|
||||
// Make sure Report2, and all it's elements still exist.
|
||||
$this->assertTrue($report2::record_exists($report2->get('id')));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue