mirrored from git://git.moodle.org/moodle.git
-
Notifications
You must be signed in to change notification settings - Fork 6.4k
/
category_test.php
91 lines (79 loc) · 3.1 KB
/
category_test.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
declare(strict_types=1);
namespace core_reportbuilder\local\filters;
use advanced_testcase;
use lang_string;
use core_reportbuilder\local\report\filter;
/**
* Unit tests for course category report filter
*
* @package core_reportbuilder
* @covers \core_reportbuilder\local\filters\category
* @copyright 2022 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class category_test extends advanced_testcase {
/**
* Data provider for {@see test_get_sql_filter}
*
* @return array
*/
public function get_sql_filter_provider(): array {
return [
['One', false, ['One']],
['One', true, ['One', 'Two', 'Three']],
['Two', true, ['Two', 'Three']],
['Three', true, ['Three']],
[null, false, ['Category 1', 'One', 'Two', 'Three']],
];
}
/**
* Test getting filter SQL
*
* @param string|null $categoryname
* @param bool $subcategories
* @param string[] $expectedcategories
*
* @dataProvider get_sql_filter_provider
*/
public function test_get_sql_filter(?string $categoryname, bool $subcategories, array $expectedcategories): void {
global $DB;
$this->resetAfterTest();
$category1 = $this->getDataGenerator()->create_category(['name' => 'One']);
$category2 = $this->getDataGenerator()->create_category(['name' => 'Two', 'parent' => $category1->id]);
$category3 = $this->getDataGenerator()->create_category(['name' => 'Three', 'parent' => $category2->id]);
if ($categoryname !== null) {
$categoryid = $DB->get_field('course_categories', 'id', ['name' => $categoryname], MUST_EXIST);
} else {
$categoryid = null;
}
$filter = new filter(
category::class,
'test',
new lang_string('yes'),
'testentity',
'id'
);
// Create instance of our filter, passing given operator.
[$select, $params] = category::create($filter)->get_sql_filter([
$filter->get_unique_identifier() . '_value' => $categoryid,
$filter->get_unique_identifier() . '_subcategories' => $subcategories,
]);
$categories = $DB->get_fieldset_select('course_categories', 'name', $select, $params);
$this->assertEqualsCanonicalizing($expectedcategories, $categories);
}
}