mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 18:36:42 +02:00
Merge branch 'MDL-75191' of https://github.com/paulholden/moodle
This commit is contained in:
commit
87db68a0ce
9 changed files with 621 additions and 43 deletions
|
@ -20,6 +20,8 @@ namespace core_reportbuilder\local\aggregation;
|
|||
|
||||
use core_reportbuilder_testcase;
|
||||
use core_reportbuilder_generator;
|
||||
use core_reportbuilder\manager;
|
||||
use core_reportbuilder\local\report\column;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
@ -73,4 +75,49 @@ class avg_test extends core_reportbuilder_testcase {
|
|||
],
|
||||
], $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test aggregation when applied to column with callback
|
||||
*/
|
||||
public function test_column_aggregation_with_callback(): void {
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Test subjects.
|
||||
$this->getDataGenerator()->create_user(['firstname' => 'Bob', 'suspended' => 1]);
|
||||
$this->getDataGenerator()->create_user(['firstname' => 'Bob', 'suspended' => 0]);
|
||||
|
||||
/** @var core_reportbuilder_generator $generator */
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
$report = $generator->create_report(['name' => 'Users', 'source' => users::class, 'default' => 0]);
|
||||
|
||||
// First column, sorted.
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname'])
|
||||
->set('sortenabled', true)
|
||||
->update();
|
||||
|
||||
// This is the column we'll aggregate.
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended'])
|
||||
->set('aggregation', avg::get_class_name())
|
||||
->update();
|
||||
|
||||
// Set callback to format the column (hack column definition to ensure callbacks are executed).
|
||||
$instance = manager::get_report_from_persistent($report);
|
||||
$instance->get_column('user:suspended')
|
||||
->set_type(column::TYPE_FLOAT)
|
||||
->set_callback(static function(float $value): string {
|
||||
return number_format($value, 1) . ' suspended';
|
||||
});
|
||||
|
||||
$content = $this->get_custom_report_content($report->get('id'));
|
||||
$this->assertEquals([
|
||||
[
|
||||
'c0_firstname' => 'Admin',
|
||||
'c1_suspended' => '0.0 suspended',
|
||||
],
|
||||
[
|
||||
'c0_firstname' => 'Bob',
|
||||
'c1_suspended' => '0.5 suspended',
|
||||
],
|
||||
], $content);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@ namespace core_reportbuilder\local\aggregation;
|
|||
|
||||
use core_reportbuilder_testcase;
|
||||
use core_reportbuilder_generator;
|
||||
use core_reportbuilder\manager;
|
||||
use core_reportbuilder\local\report\column;
|
||||
use core_user\reportbuilder\datasource\users;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
@ -74,4 +76,49 @@ class sum_test extends core_reportbuilder_testcase {
|
|||
],
|
||||
], $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test aggregation when applied to column with callback
|
||||
*/
|
||||
public function test_column_aggregation_with_callback(): void {
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Test subjects.
|
||||
$this->getDataGenerator()->create_user(['firstname' => 'Bob', 'suspended' => 1]);
|
||||
$this->getDataGenerator()->create_user(['firstname' => 'Bob', 'suspended' => 1]);
|
||||
|
||||
/** @var core_reportbuilder_generator $generator */
|
||||
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
||||
$report = $generator->create_report(['name' => 'Users', 'source' => users::class, 'default' => 0]);
|
||||
|
||||
// First column, sorted.
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname'])
|
||||
->set('sortenabled', true)
|
||||
->update();
|
||||
|
||||
// This is the column we'll aggregate.
|
||||
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended'])
|
||||
->set('aggregation', sum::get_class_name())
|
||||
->update();
|
||||
|
||||
// Set callback to format the column (hack column definition to ensure callbacks are executed).
|
||||
$instance = manager::get_report_from_persistent($report);
|
||||
$instance->get_column('user:suspended')
|
||||
->set_type(column::TYPE_INTEGER)
|
||||
->set_callback(static function(int $value): string {
|
||||
return "{$value} suspended";
|
||||
});
|
||||
|
||||
$content = $this->get_custom_report_content($report->get('id'));
|
||||
$this->assertEquals([
|
||||
[
|
||||
'c0_firstname' => 'Admin',
|
||||
'c1_suspended' => '0 suspended',
|
||||
],
|
||||
[
|
||||
'c0_firstname' => 'Bob',
|
||||
'c1_suspended' => '2 suspended',
|
||||
],
|
||||
], $content);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue