Proyectos de Subversion Moodle

Rev

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

Rev 1 Rev 1441
Línea 18... Línea 18...
18
 
18
 
Línea 19... Línea 19...
19
namespace core_reportbuilder\local\helpers;
19
namespace core_reportbuilder\local\helpers;
20
 
20
 
21
use core_customfield_generator;
-
 
22
use core_reportbuilder_generator;
21
use core_customfield_generator;
23
use core_reportbuilder_testcase;
22
use core_reportbuilder_generator;
24
use core_reportbuilder\local\entities\course;
-
 
25
use core_reportbuilder\local\filters\boolean_select;
-
 
26
use core_reportbuilder\local\filters\date;
-
 
27
use core_reportbuilder\local\filters\select;
23
use core_reportbuilder\local\entities\course;
28
use core_reportbuilder\local\filters\text;
24
use core_reportbuilder\local\filters\{boolean_select, date, number, select, text};
29
use core_reportbuilder\local\report\column;
25
use core_reportbuilder\local\report\{column, filter};
Línea 30... Línea -...
30
use core_reportbuilder\local\report\filter;
-
 
31
use core_course\reportbuilder\datasource\{categories, courses};
-
 
32
 
-
 
33
defined('MOODLE_INTERNAL') || die();
-
 
34
 
-
 
35
global $CFG;
26
use core_reportbuilder\tests\core_reportbuilder_testcase;
36
require_once("{$CFG->dirroot}/reportbuilder/tests/helpers.php");
27
use core_course\reportbuilder\datasource\{categories, courses};
37
 
28
 
38
/**
29
/**
39
 * Unit tests for custom fields helper
30
 * Unit tests for custom fields helper
40
 *
31
 *
41
 * @package     core_reportbuilder
32
 * @package     core_reportbuilder
42
 * @covers      \core_reportbuilder\local\helpers\custom_fields
33
 * @covers      \core_reportbuilder\local\helpers\custom_fields
43
 * @copyright   2021 David Matamoros <davidmc@moodle.com>
34
 * @copyright   2021 David Matamoros <davidmc@moodle.com>
Línea 44... Línea 35...
44
 * @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
45
 */
36
 */
46
class custom_fields_test extends core_reportbuilder_testcase {
37
final class custom_fields_test extends core_reportbuilder_testcase {
47
 
38
 
Línea 60... Línea 51...
60
            'itemid' => 0,
51
            'itemid' => 0,
61
            'contextid' => \context_system::instance()->id
52
            'contextid' => \context_system::instance()->id
62
        ]);
53
        ]);
Línea 63... Línea 54...
63
 
54
 
64
        $generator->create_field(
55
        $generator->create_field(
-
 
56
            ['categoryid' => $category->get('id'), 'type' => 'text', 'name' => 'Text', 'shortname' => 'text',
Línea 65... Línea 57...
65
            ['categoryid' => $category->get('id'), 'type' => 'text', 'name' => 'Text', 'shortname' => 'text']);
57
                'configdata' => ['defaultvalue' => 'default']]);
66
 
58
 
-
 
59
        $generator->create_field(
Línea -... Línea 60...
-
 
60
            ['categoryid' => $category->get('id'), 'type' => 'textarea', 'name' => 'Textarea', 'shortname' => 'textarea',
67
        $generator->create_field(
61
                'configdata' => ['defaultvalue' => 'Default']]);
68
            ['categoryid' => $category->get('id'), 'type' => 'textarea', 'name' => 'Textarea', 'shortname' => 'textarea']);
62
 
-
 
63
        // This field is available only to course teachers.
Línea 69... Línea 64...
69
 
64
        $generator->create_field(
70
        $generator->create_field(
65
            ['categoryid' => $category->get('id'), 'type' => 'checkbox', 'name' => 'Checkbox', 'shortname' => 'checkbox',
Línea 71... Línea 66...
71
            ['categoryid' => $category->get('id'), 'type' => 'checkbox', 'name' => 'Checkbox', 'shortname' => 'checkbox']);
66
                'configdata' => ['checkbydefault' => 1, 'visibility' => 1]]);
72
 
67
 
73
        $generator->create_field(
68
        $generator->create_field(
-
 
69
            ['categoryid' => $category->get('id'), 'type' => 'date', 'name' => 'Date', 'shortname' => 'date']);
-
 
70
 
-
 
71
        $generator->create_field(
-
 
72
            ['categoryid' => $category->get('id'), 'type' => 'select', 'name' => 'Select', 'shortname' => 'select',
Línea 74... Línea 73...
74
            ['categoryid' => $category->get('id'), 'type' => 'date', 'name' => 'Date', 'shortname' => 'date']);
73
                'configdata' => ['options' => "Cat\nDog\nFish", 'defaultvalue' => 'Cat']]);
75
 
74
 
Línea 76... Línea 75...
76
        $generator->create_field(
75
        $generator->create_field(
77
            ['categoryid' => $category->get('id'), 'type' => 'select', 'name' => 'Select', 'shortname' => 'select',
76
            ['categoryid' => $category->get('id'), 'type' => 'number', 'name' => 'Number', 'shortname' => 'number',
78
                'configdata' => ['options' => "Cat\nDog", 'defaultvalue' => 'Cat']]);
-
 
79
 
77
                'configdata' => ['defaultvalue' => 1]]);
Línea 80... Línea 78...
80
        $courseentity = new course();
78
 
81
        $coursealias = $courseentity->get_table_alias('course');
79
        $courseentity = new course();
82
 
80
        $coursealias = $courseentity->get_table_alias('course');
83
        // Create an instance of the customfields helper.
81
 
84
        return new custom_fields($coursealias . '.id', $courseentity->get_entity_name(),
82
        // Create an instance of the customfields helper.
-
 
83
        return new custom_fields("{$coursealias}.id", $courseentity->get_entity_name(), 'core_course', 'course');
Línea 85... Línea 84...
85
            'core_course', 'course');
84
    }
86
    }
-
 
Línea -... Línea 85...
-
 
85
 
87
 
86
    /**
88
    /**
87
     * Test for get_columns
Línea 89... Línea 88...
89
     * Test for get_columns
88
     */
90
     */
89
    public function test_get_columns(): void {
-
 
90
        $this->resetAfterTest();
-
 
91
        $this->setAdminUser();
91
    public function test_get_columns(): void {
92
 
-
 
93
        $customfields = $this->generate_customfields();
-
 
94
 
-
 
95
        $columns = $customfields->get_columns();
-
 
96
        $this->assertCount(6, $columns);
92
        $this->resetAfterTest();
97
        $this->assertContainsOnlyInstancesOf(column::class, $columns);
-
 
98
 
93
 
99
        // Column titles.
Línea 94... Línea 100...
94
        $customfields = $this->generate_customfields();
100
        $this->assertEquals([
95
        $columns = $customfields->get_columns();
101
            'Text',
-
 
102
            'Textarea',
-
 
103
            'Checkbox',
-
 
104
            'Date',
96
 
105
            'Select',
-
 
106
            'Number',
-
 
107
        ], array_map(
-
 
108
            fn(column $column) => $column->get_title(),
97
        $this->assertCount(5, $columns);
109
            $columns,
-
 
110
        ));
98
        $this->assertContainsOnlyInstancesOf(column::class, $columns);
111
 
Línea 99... Línea 112...
99
 
112
        // Column types.
100
        // Column titles.
113
        $this->assertEquals([
-
 
114
            column::TYPE_TEXT,
-
 
115
            column::TYPE_LONGTEXT,
-
 
116
            column::TYPE_BOOLEAN,
-
 
117
            column::TYPE_TIMESTAMP,
-
 
118
            column::TYPE_TEXT,
-
 
119
            column::TYPE_FLOAT,
-
 
120
        ], array_map(
-
 
121
            fn(column $column) => $column->get_type(),
-
 
122
            $columns,
-
 
123
        ));
-
 
124
 
-
 
125
        // Column sortable.
-
 
126
        $this->assertEquals([
-
 
127
            true,
-
 
128
            true,
-
 
129
            true,
-
 
130
            true,
-
 
131
            true,
-
 
132
            true,
-
 
133
        ], array_map(
-
 
134
            fn(column $column) => $column->get_is_sortable(),
-
 
135
            $columns,
-
 
136
        ));
-
 
137
 
101
        $this->assertEquals(
138
        // Column available.
-
 
139
        $this->assertEquals([
-
 
140
            true,
-
 
141
            true,
-
 
142
            true,
-
 
143
            true,
-
 
144
            true,
-
 
145
            true,
-
 
146
        ], array_map(
-
 
147
            fn(column $column) => $column->get_is_available(),
102
            ['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
148
            $columns,
-
 
149
        ));
103
            array_map(fn(column $column) => $column->get_title(), $columns)
150
 
104
        );
151
        // Column available, for non-privileged user.
Línea 105... Línea 152...
105
 
152
        $this->setUser(null);
106
        // Column types.
153
        $this->assertEquals([
107
        $this->assertEquals(
154
            true,
108
            [column::TYPE_TEXT, column::TYPE_LONGTEXT, column::TYPE_BOOLEAN, column::TYPE_TIMESTAMP, column::TYPE_TEXT],
155
            true,
109
            array_map(fn(column $column) => $column->get_type(), $columns)
156
            false,
Línea 110... Línea 157...
110
        );
157
            true,
Línea 111... Línea 158...
111
 
158
            true,
112
        // Column sortable.
159
            true,
113
        $this->assertEquals(
160
        ], array_map(
-
 
161
            fn(column $column) => $column->get_is_available(),
114
            [true, false, true, true, true],
162
            $customfields->get_columns(),
-
 
163
        ));
115
            array_map(fn(column $column) => $column->get_is_sortable(), $columns)
164
    }
116
        );
165
 
Línea 117... Línea 166...
117
    }
166
    /**
118
 
167
     * Test that joins added to the custom fields helper are present in its columns/filters
Línea 119... Línea 168...
119
    /**
168
     */
120
     * Test for add_join
-
 
121
     */
-
 
122
    public function test_add_join(): void {
169
    public function test_add_join(): void {
123
        $this->resetAfterTest();
170
        $this->resetAfterTest();
124
 
171
 
125
        $customfields = $this->generate_customfields();
-
 
126
 
-
 
127
        // By default, we always join on the customfield data table.
-
 
128
        $columns = $customfields->get_columns();
-
 
129
        $joins = $columns[0]->get_joins();
-
 
130
 
-
 
131
        $this->assertCount(1, $joins);
-
 
132
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[0]);
-
 
133
 
-
 
134
        // Add additional join.
-
 
135
        $customfields->add_join('JOIN {test} t ON t.id = id');
-
 
136
 
-
 
137
        $columns = $customfields->get_columns();
172
        $customfields = $this->generate_customfields();
138
        $joins = $columns[0]->get_joins();
173
 
139
 
-
 
140
        $this->assertCount(2, $joins);
-
 
141
        $this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
174
        // We always join on the customfield data table.
142
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[1]);
175
        $columnjoins = $customfields->get_columns()[0]->get_joins();
143
    }
-
 
144
 
176
        $this->assertCount(1, $columnjoins);
145
    /**
177
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $columnjoins[0]);
Línea 146... Línea 178...
146
     * Test for add_joins
178
 
147
     */
179
        $filterjoins = $customfields->get_filters()[0]->get_joins();
148
    public function test_add_joins(): void {
180
        $this->assertCount(1, $filterjoins);
149
        $this->resetAfterTest();
181
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $filterjoins[0]);
150
 
182
 
-
 
183
        // Add additional join.
Línea 151... Línea 184...
151
        $customfields = $this->generate_customfields();
184
        $customfields->add_join('JOIN {test} t ON t.id = id');
152
 
-
 
Línea -... Línea 185...
-
 
185
 
153
        // Add additional joins.
186
        $columnjoins = $customfields->get_columns()[0]->get_joins();
154
        $customfields->add_joins(['JOIN {test} t ON t.id = id', 'JOIN {test2} t2 ON t2.id = id']);
187
        $this->assertCount(2, $columnjoins);
Línea -... Línea 188...
-
 
188
        $this->assertEquals('JOIN {test} t ON t.id = id', $columnjoins[0]);
-
 
189
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $columnjoins[1]);
-
 
190
 
-
 
191
        $filterjoins = $customfields->get_filters()[0]->get_joins();
-
 
192
        $this->assertCount(2, $filterjoins);
-
 
193
        $this->assertEquals('JOIN {test} t ON t.id = id', $filterjoins[0]);
-
 
194
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $filterjoins[1]);
-
 
195
    }
-
 
196
 
-
 
197
    /**
-
 
198
     * Test for get_filters
-
 
199
     */
-
 
200
    public function test_get_filters(): void {
155
 
201
        $this->resetAfterTest();
-
 
202
        $this->setAdminUser();
-
 
203
 
-
 
204
        $customfields = $this->generate_customfields();
-
 
205
 
-
 
206
        $filters = $customfields->get_filters();
-
 
207
        $this->assertCount(6, $filters);
-
 
208
        $this->assertContainsOnlyInstancesOf(filter::class, $filters);
-
 
209
 
-
 
210
        // Filter headers.
-
 
211
        $this->assertEquals([
-
 
212
            'Text',
-
 
213
            'Textarea',
-
 
214
            'Checkbox',
156
        $columns = $customfields->get_columns();
215
            'Date',
-
 
216
            'Select',
-
 
217
            'Number',
-
 
218
        ], array_map(
-
 
219
            fn(filter $filter) => $filter->get_header(),
-
 
220
            $filters,
-
 
221
        ));
-
 
222
 
157
        $joins = $columns[0]->get_joins();
223
        // Filter types.
-
 
224
        $this->assertEquals([
-
 
225
            text::class,
-
 
226
            text::class,
-
 
227
            boolean_select::class,
-
 
228
            date::class,
-
 
229
            select::class,
-
 
230
            number::class,
-
 
231
        ], array_map(
-
 
232
            fn(filter $filter) => $filter->get_filter_class(),
-
 
233
            $filters,
-
 
234
        ));
-
 
235
 
-
 
236
        // Filter available.
158
 
237
        $this->assertEquals([
-
 
238
            true,
159
        $this->assertCount(3, $joins);
239
            true,
160
        $this->assertEquals('JOIN {test} t ON t.id = id', $joins[0]);
240
            true,
Línea 161... Línea 241...
161
        $this->assertEquals('JOIN {test2} t2 ON t2.id = id', $joins[1]);
241
            true,
162
        $this->assertStringStartsWith('LEFT JOIN {customfield_data}', $joins[2]);
242
            true,
163
    }
243
            true,
164
 
244
        ], array_map(
165
    /**
245
            fn(filter $filter) => $filter->get_is_available(),
-
 
246
            $filters,
Línea 166... Línea 247...
166
     * Test for get_filters
247
        ));
-
 
248
 
Línea -... Línea 249...
-
 
249
        // Filter available, for non-privileged user.
-
 
250
        $this->setUser(null);
167
     */
251
        $this->assertEquals([
168
    public function test_get_filters(): void {
252
            true,
169
        $this->resetAfterTest();
253
            true,
170
 
254
            false,
171
        $customfields = $this->generate_customfields();
255
            true,
172
        $filters = $customfields->get_filters();
256
            true,
-
 
257
            true,
173
 
258
        ], array_map(
Línea 174... Línea 259...
174
        $this->assertCount(5, $filters);
259
            fn(filter $filter) => $filter->get_is_available(),
175
        $this->assertContainsOnlyInstancesOf(filter::class, $filters);
260
            $customfields->get_filters(),
176
 
261
        ));
Línea 177... Línea 262...
177
        // Filter titles.
262
    }
-
 
263
 
-
 
264
    /**
178
        $this->assertEquals(
265
     * Test that adding custom field columns to a report returns expected values
-
 
266
     */
179
            ['Text', 'Textarea', 'Checkbox', 'Date', 'Select'],
267
    public function test_custom_report_content(): void {
180
            array_map(fn(filter $filter) => $filter->get_header(), $filters)
268
        $this->resetAfterTest();
181
        );
269
        $this->setAdminUser();
182
    }
270
 
183
 
271
        $category = $this->getDataGenerator()->create_category(['name' => 'Zebras']);
-
 
272
        $courseone = $this->getDataGenerator()->create_course(['category' => $category->id, 'fullname' => 'C1']);
Línea 184... Línea 273...
184
    /**
273
 
185
     * Test that adding custom field columns to a report returns expected values
-
 
186
     */
274
        // Second course will populate each custom field.
-
 
275
        $this->generate_customfields();
187
    public function test_custom_report_content(): void {
276
        $coursetwo = $this->getDataGenerator()->create_course(['category' => $category->id, 'fullname' => 'C2', 'customfields' => [
188
        $this->resetAfterTest();
277
            ['shortname' => 'text', 'value' => 'Hello'],
189
 
278
            ['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
190
        $this->generate_customfields();
279
            ['shortname' => 'checkbox', 'value' => 0],
191
 
280
            ['shortname' => 'date', 'value' => 1669852800],
192
        $course = $this->getDataGenerator()->create_course(['customfields' => [
281
            ['shortname' => 'select', 'value' => 2],
193
            ['shortname' => 'text', 'value' => 'Hello'],
282
            ['shortname' => 'number', 'value' => 42],
194
            ['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
283
        ]]);
195
            ['shortname' => 'checkbox', 'value' => true],
-
 
196
            ['shortname' => 'date', 'value' => 1669852800],
284
 
197
            ['shortname' => 'select', 'value' => 2],
-
 
198
        ]]);
285
        /** @var core_reportbuilder_generator $generator */
199
 
286
        $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
200
        /** @var core_reportbuilder_generator $generator */
287
        $report = $generator->create_report(['name' => 'Categories', 'source' => categories::class, 'default' => 0]);
201
        $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
-
 
202
        $report = $generator->create_report(['name' => 'Courses', 'source' => courses::class, 'default' => 0]);
288
 
203
 
-
 
204
        // Add custom field columns to the report.
289
        // Add custom field columns to the report.
205
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']);
290
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name',
206
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_text']);
-
 
207
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_textarea']);
291
            'sortenabled' => 1]);
208
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_checkbox']);
292
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname',
209
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_date']);
293
            'sortenabled' => 1]);
-
 
294
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_text']);
210
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
295
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_textarea']);
211
 
296
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_checkbox']);
212
        $content = $this->get_custom_report_content($report->get('id'));
297
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_date']);
213
 
298
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
214
        $this->assertEquals([
299
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_number']);
215
            $course->fullname,
300
 
216
            'Hello',
-
 
217
            '<div class="text_to_html">Goodbye</div>',
301
        $content = $this->get_custom_report_content($report->get('id'));
218
            'Yes',
302
        $this->assertEquals([
219
            userdate(1669852800),
303
            [
220
            'Dog'
304
                'Category 1',
221
        ], array_values($content[0]));
305
                '',
222
    }
306
                '',
Línea 223... Línea 307...
223
 
307
                '',
224
    /**
308
                '',
225
     * Test that adding custom field columns to report returns expected default values for fields
309
                '',
226
     */
310
                '',
227
    public function test_custom_report_content_column_defaults(): void {
311
                '',
228
        $this->resetAfterTest();
312
            ],
229
 
313
            [
230
        $this->generate_customfields();
314
                $category->name,
231
 
315
                $courseone->fullname,
232
        $category = $this->getDataGenerator()->create_category(['name' => 'Zebras']);
316
                'default',
233
        $course = $this->getDataGenerator()->create_course(['category' => $category->id]);
317
                format_text('Default'),
-
 
318
                'Yes',
-
 
319
                '',
-
 
320
                'Cat',
-
 
321
                1,
234
 
322
            ],
235
        /** @var core_reportbuilder_generator $generator */
323
            [
236
        $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
324
                $category->name,
237
        $report = $generator->create_report(['name' => 'Categories', 'source' => categories::class, 'default' => 0]);
325
                $coursetwo->fullname,
238
 
326
                'Hello',
239
        // Add custom field columns to the report.
327
                format_text('Goodbye'),
240
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name',
328
                'No',
241
            'sortenabled' => 1]);
329
                userdate(1669852800),
-
 
330
                'Dog',
-
 
331
                42,
-
 
332
            ],
-
 
333
        ], array_map('array_values', $content));
242
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']);
334
    }
243
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:customfield_select']);
335
 
244
 
336
    /**
245
        $content = $this->get_custom_report_content($report->get('id'));
337
     * Data provider for {@see test_custom_report_filter}
246
        $this->assertEquals([
338
     *
247
            ['Category 1', '', ''],
-
 
248
            [$category->name, $course->fullname, 'Cat'],
-
 
249
        ], array_map('array_values', $content));
-
 
250
    }
339
     * @return array[]
-
 
340
     */
-
 
341
    public static function custom_report_filter_provider(): array {
-
 
342
        return [
251
 
343
            'Filter by text custom field' => ['course:customfield_text', [
252
    /**
344
                'course:customfield_text_operator' => text::IS_EQUAL_TO,
253
     * Data provider for {@see test_custom_report_filter}
345
                'course:customfield_text_value' => 'Hello',
254
     *
346
            ], 'C2'],
255
     * @return array[]
347
            'Filter by text custom field (default)' => ['course:customfield_text', [
256
     */
348
                'course:customfield_text_operator' => text::IS_EQUAL_TO,
257
    public function custom_report_filter_provider(): array {
349
                'course:customfield_text_value' => 'default',
258
        return [
350
            ], 'C1'],
259
            'Filter by text custom field' => ['course:customfield_text', [
351
            'Filter by text custom field (no match)' => ['course:customfield_text', [
260
                'course:customfield_text_operator' => text::IS_EQUAL_TO,
352
                'course:customfield_text_operator' => text::IS_EQUAL_TO,
261
                'course:customfield_text_value' => 'Hello',
353
                'course:customfield_text_value' => 'Goodbye',
262
            ], true],
354
            ]],
263
            'Filter by text custom field (no match)' => ['course:customfield_text', [
355
            'Filter by textarea custom field' => ['course:customfield_textarea', [
264
                'course:customfield_text_operator' => text::IS_EQUAL_TO,
356
                'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
265
                'course:customfield_text_value' => 'Goodbye',
357
                'course:customfield_textarea_value' => 'Goodbye',
266
            ], false],
358
            ], 'C2'],
267
            'Filter by textarea custom field' => ['course:customfield_textarea', [
359
            'Filter by textarea custom field (default)' => ['course:customfield_textarea', [
-
 
360
                'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
-
 
361
                'course:customfield_textarea_value' => 'Default',
-
 
362
            ], 'C1'],
-
 
363
            'Filter by textarea custom field (no match)' => ['course:customfield_textarea', [
-
 
364
                'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
-
 
365
                'course:customfield_textarea_value' => 'Hello',
-
 
366
            ]],
-
 
367
            'Filter by checkbox custom field' => ['course:customfield_checkbox', [
-
 
368
                'course:customfield_checkbox_operator' => boolean_select::NOT_CHECKED,
-
 
369
            ], 'C2'],
-
 
370
            'Filter by checkbox custom field (default)' => ['course:customfield_checkbox', [
-
 
371
                'course:customfield_checkbox_operator' => boolean_select::CHECKED,
-
 
372
            ], 'C1'],
-
 
373
            'Filter by date custom field' => ['course:customfield_date', [
-
 
374
                'course:customfield_date_operator' => date::DATE_RANGE,
-
 
375
                'course:customfield_date_from' => 1622502000,
268
                'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
376
            ], 'C2'],
269
                'course:customfield_textarea_value' => 'Goodbye',
377
            'Filter by date custom field (no match)' => ['course:customfield_date', [
Línea 270... Línea 378...
270
            ], true],
378
                'course:customfield_date_operator' => date::DATE_RANGE,
271
            'Filter by textarea custom field (no match)' => ['course:customfield_textarea', [
379
                'course:customfield_date_from' => 1672531200,
272
                'course:customfield_textarea_operator' => text::IS_EQUAL_TO,
380
            ]],
273
                'course:customfield_textarea_value' => 'Hello',
381
            'Filter by select custom field' => ['course:customfield_select', [
274
            ], false],
382
                'course:customfield_select_operator' => select::EQUAL_TO,
275
            'Filter by checkbox custom field' => ['course:customfield_checkbox', [
383
                'course:customfield_select_value' => 2,
276
                'course:customfield_checkbox_operator' => boolean_select::CHECKED,
384
            ], 'C2'],
277
            ], true],
385
            'Filter by select custom field (default)' => ['course:customfield_select', [
278
            'Filter by checkbox custom field (no match)' => ['course:customfield_checkbox', [
386
                'course:customfield_select_operator' => select::EQUAL_TO,
279
                'course:customfield_checkbox_operator' => boolean_select::NOT_CHECKED,
387
                'course:customfield_select_value' => 1,
280
            ], false],
388
            ], 'C1'],
-
 
389
            'Filter by select custom field (no match)' => ['course:customfield_select', [
Línea 281... Línea 390...
281
            'Filter by date custom field' => ['course:customfield_date', [
390
                'course:customfield_select_operator' => select::EQUAL_TO,
Línea -... Línea 391...
-
 
391
                'course:customfield_select_value' => 3,
-
 
392
            ]],
282
                'course:customfield_date_operator' => date::DATE_RANGE,
393
            'Filter by number custom field' => ['course:customfield_number', [
283
                'course:customfield_date_from' => 1622502000,
394
                'course:customfield_number_operator' => number::EQUAL_TO,
284
            ], true],
395
                'course:customfield_number_value1' => 42,
285
            'Filter by date custom field (no match)' => ['course:customfield_date', [
396
            ], 'C2'],
286
                'course:customfield_date_operator' => date::DATE_RANGE,
397
            'Filter by number custom field (default)' => ['course:customfield_number', [
287
                'course:customfield_date_to' => 1622502000,
398
                'course:customfield_number_operator' => number::EQUAL_TO,
-
 
399
                'course:customfield_number_value1' => 1,
288
            ], false],
400
            ], 'C1'],
Línea 289... Línea 401...
289
            'Filter by select custom field' => ['course:customfield_select', [
401
            'Filter by number custom field (no match)' => ['course:customfield_number', [
290
                'course:customfield_select_operator' => select::EQUAL_TO,
402
                'course:customfield_number_operator' => number::EQUAL_TO,
Línea 328... Línea 440...
328
 
440
 
329
        // Add filter, set it's values.
441
        // Add filter, set it's values.
330
        $generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => $filtername]);
442
        $generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => $filtername]);
Línea 331... Línea 443...
331
        $content = $this->get_custom_report_content($report->get('id'), 0, $filtervalues);
443
        $content = $this->get_custom_report_content($report->get('id'), 0, $filtervalues);
332
 
444
 
333
        if ($expectmatch) {
445
        if ($expectmatch !== null) {
334
            $this->assertCount(1, $content);
446
            $this->assertCount(1, $content);
335
            $this->assertEquals($course->fullname, reset($content[0]));
447
            $this->assertEquals($expectmatch, reset($content[0]));
336
        } else {
448
        } else {
337
            $this->assertEmpty($content);
449
            $this->assertEmpty($content);
Línea 349... Línea 461...
349
        }
461
        }
Línea 350... Línea 462...
350
 
462
 
Línea 351... Línea 463...
351
        $this->resetAfterTest();
463
        $this->resetAfterTest();
352
 
464
 
353
        $this->generate_customfields();
465
        $this->generate_customfields();
354
        $course = $this->getDataGenerator()->create_course(['customfields' => [
466
        $this->getDataGenerator()->create_course(['customfields' => [
355
            ['shortname' => 'text', 'value' => 'Hello'],
467
            ['shortname' => 'text', 'value' => 'Hello'],
356
            ['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
468
            ['shortname' => 'textarea_editor', 'value' => ['text' => 'Goodbye', 'format' => FORMAT_MOODLE]],
357
            ['shortname' => 'checkbox', 'value' => true],
469
            ['shortname' => 'checkbox', 'value' => true],