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\aggregation;
19
namespace core_reportbuilder\local\aggregation;
20
 
20
 
21
use core_badges_generator;
-
 
22
use core_badges\reportbuilder\datasource\badges;
21
use core_badges_generator;
23
use core_reportbuilder_testcase;
22
use core_badges\reportbuilder\datasource\badges;
-
 
23
use core_reportbuilder_generator;
24
use core_reportbuilder_generator;
24
use core_reportbuilder\manager;
25
use core_reportbuilder\manager;
25
use core_reportbuilder\tests\core_reportbuilder_testcase;
Línea 26... Línea -...
26
use core_user\reportbuilder\datasource\users;
-
 
27
use stdClass;
-
 
28
 
-
 
29
defined('MOODLE_INTERNAL') || die();
-
 
30
 
-
 
31
global $CFG;
26
use core_user\reportbuilder\datasource\users;
32
require_once("{$CFG->dirroot}/reportbuilder/tests/helpers.php");
27
use stdClass;
33
 
28
 
34
/**
29
/**
35
 * Unit tests for group concatenation aggregation
30
 * Unit tests for group concatenation aggregation
36
 *
31
 *
37
 * @package     core_reportbuilder
32
 * @package     core_reportbuilder
38
 * @covers      \core_reportbuilder\local\aggregation\base
33
 * @covers      \core_reportbuilder\local\aggregation\base
39
 * @covers      \core_reportbuilder\local\aggregation\groupconcat
34
 * @covers      \core_reportbuilder\local\aggregation\groupconcat
40
 * @copyright   2021 Paul Holden <paulh@moodle.com>
35
 * @copyright   2021 Paul Holden <paulh@moodle.com>
Línea 41... Línea 36...
41
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
42
 */
37
 */
43
class groupconcat_test extends core_reportbuilder_testcase {
38
final class groupconcat_test extends core_reportbuilder_testcase {
44
 
39
 
Línea 74... Línea 69...
74
            ['Admin', 'User'],
69
            ['Admin', 'User'],
75
        ], array_map('array_values', $content));
70
        ], array_map('array_values', $content));
76
    }
71
    }
Línea 77... Línea 72...
77
 
72
 
-
 
73
    /**
-
 
74
     * Test aggregation with custom separator option when applied to column
-
 
75
     */
-
 
76
    public function test_column_aggregation_separator_option(): void {
-
 
77
        $this->resetAfterTest();
-
 
78
 
-
 
79
        // Test subjects.
-
 
80
        $this->getDataGenerator()->create_user(['firstname' => 'Bob', 'lastname' => 'Banana']);
-
 
81
        $this->getDataGenerator()->create_user(['firstname' => 'Bob', 'lastname' => 'Apple']);
-
 
82
        $this->getDataGenerator()->create_user(['firstname' => 'Bob', 'lastname' => 'Banana']);
-
 
83
 
-
 
84
        /** @var core_reportbuilder_generator $generator */
-
 
85
        $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
-
 
86
        $report = $generator->create_report(['name' => 'Users', 'source' => users::class, 'default' => 0]);
-
 
87
 
-
 
88
        // Report columns, aggregated/sorted by user lastname.
-
 
89
        $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
-
 
90
        $generator->create_column([
-
 
91
            'reportid' => $report->get('id'),
-
 
92
            'uniqueidentifier' => 'user:lastname',
-
 
93
            'aggregation' => groupconcat::get_class_name(),
-
 
94
            'sortenabled' => 1,
-
 
95
            'sortdirection' => SORT_ASC,
-
 
96
        ]);
-
 
97
 
-
 
98
        // Set aggregation option for separator.
-
 
99
        $instance = manager::get_report_from_persistent($report);
-
 
100
        $instance->get_column('user:lastname')
-
 
101
            ->set_aggregation_options(groupconcat::get_class_name(), ['separator' => '<br />']);
-
 
102
 
-
 
103
        // Assert lastname column was aggregated, with defined separator between each item.
-
 
104
        $content = $this->get_custom_report_content($report->get('id'));
-
 
105
        $this->assertEquals([
-
 
106
            ['Bob', 'Apple<br />Banana<br />Banana'],
-
 
107
            ['Admin', 'User'],
-
 
108
        ], array_map('array_values', $content));
-
 
109
    }
-
 
110
 
78
    /**
111
    /**
79
     * Test aggregation when applied to column with multiple fields
112
     * Test aggregation when applied to column with multiple fields
80
     */
113
     */
81
    public function test_column_aggregation_multiple_fields(): void {
114
    public function test_column_aggregation_multiple_fields(): void {
Línea 137... Línea 170...
137
            });
170
            });
Línea 138... Línea 171...
138
 
171
 
139
        // Assert confirmed column was aggregated, and sorted predictably with callback applied.
172
        // Assert confirmed column was aggregated, and sorted predictably with callback applied.
140
        $content = $this->get_custom_report_content($report->get('id'));
173
        $content = $this->get_custom_report_content($report->get('id'));
141
        $this->assertEquals([
-
 
142
            [
-
 
143
                'c0_firstname' => 'Admin',
174
        $this->assertEquals([
144
                'c1_confirmed' => 'Yes (groupconcat)',
-
 
145
            ],
-
 
146
            [
-
 
147
                'c0_firstname' => 'Bob',
175
            ['Admin', 'Yes (groupconcat)'],
148
                'c1_confirmed' => 'No (groupconcat), Yes (groupconcat), Yes (groupconcat)',
-
 
149
            ],
176
            ['Bob', 'No (groupconcat), Yes (groupconcat), Yes (groupconcat)'],
150
        ], $content);
177
        ], array_map('array_values', $content));
Línea 151... Línea 178...
151
    }
178
    }
152
 
179
 
153
    /**
180
    /**
Línea 186... Línea 213...
186
        ]);
213
        ]);
Línea 187... Línea 214...
187
 
214
 
188
        // Assert description column was aggregated, with callbacks accounting for null values.
215
        // Assert description column was aggregated, with callbacks accounting for null values.
189
        $content = $this->get_custom_report_content($report->get('id'));
216
        $content = $this->get_custom_report_content($report->get('id'));
190
        $this->assertEquals([
-
 
191
            [
-
 
192
                'c0_name' => $badgeone->name,
217
        $this->assertEquals([
193
                'c1_description' => "{$userone->description}, {$usertwo->description}",
-
 
194
            ],
-
 
195
            [
218
            [$badgeone->name, "{$userone->description}, {$usertwo->description}"],
196
                'c0_name' => $badgetwo->name,
-
 
197
                'c1_description' => '',
-
 
198
            ],
219
            [$badgetwo->name, ''],
199
        ], $content);
220
        ], array_map('array_values', $content));
200
    }
221
    }