MDL-80807 reportbuilder: additional tests for aggregated column sort.

This commit is contained in:
Paul Holden
2024-02-06 09:47:57 +00:00
parent c424ba34e2
commit b8a87bd354
9 changed files with 91 additions and 133 deletions
@@ -54,25 +54,21 @@ class avg_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
$generator->create_column(
['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended', 'aggregation' => avg::get_class_name()]
);
// Report columns, aggregated/sorted by user suspended.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:suspended',
'aggregation' => avg::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_suspended' => '0.0',
],
[
'c0_firstname' => 'Bob',
'c1_suspended' => '0.5',
],
], $content);
['Bob', '0.5'],
['Admin', '0.0'],
], array_map('array_values', $content));
}
/**
@@ -53,24 +53,20 @@ class count_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user lastname.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'), 'uniqueidentifier' => 'user:lastname', 'aggregation' => count::get_class_name()]
);
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:lastname',
'aggregation' => count::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_lastname' => 1,
],
[
'c0_firstname' => 'Bob',
'c1_lastname' => 3,
],
], $content);
['Bob', 3],
['Admin', 1],
], array_map('array_values', $content));
}
}
@@ -53,27 +53,21 @@ class countdistinct_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user lastname.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:lastname',
'aggregation' => countdistinct::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_lastname' => 1,
],
[
'c0_firstname' => 'Bob',
'c1_lastname' => 2,
],
], $content);
['Bob', 2],
['Admin', 1],
], array_map('array_values', $content));
}
/**
@@ -57,28 +57,22 @@ class groupconcat_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user lastname.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:lastname',
'aggregation' => groupconcat::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_ASC,
]);
// Assert lastname column was aggregated, and sorted predictably.
// Assert lastname column was aggregated, and itself also sorted predictably.
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_lastname' => 'User',
],
[
'c0_firstname' => 'Bob',
'c1_lastname' => 'Apple, Banana, Banana',
],
], $content);
['Bob', 'Apple, Banana, Banana'],
['Admin', 'User'],
], array_map('array_values', $content));
}
/**
@@ -67,28 +67,22 @@ class groupconcatdistinct_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user lastname.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:lastname',
'aggregation' => groupconcatdistinct::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_ASC,
]);
// Assert lastname column was aggregated, and sorted predictably.
// Assert lastname column was aggregated, and itself also sorted predictably.
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_lastname' => 'User',
],
[
'c0_firstname' => 'Bob',
'c1_lastname' => 'Apple, Banana',
],
], $content);
['Bob', 'Apple, Banana'],
['Admin', 'User'],
], array_map('array_values', $content));
}
/**
@@ -52,24 +52,20 @@ class max_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
$generator->create_column(
['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended', 'aggregation' => max::get_class_name()]
);
// Report columns, aggregated/sorted by user suspended.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:suspended',
'aggregation' => max::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_suspended' => 'No',
],
[
'c0_firstname' => 'Bob',
'c1_suspended' => 'Yes',
],
], $content);
['Bob', 'Yes'],
['Admin', 'No'],
], array_map('array_values', $content));
}
}
@@ -45,31 +45,27 @@ class min_test extends core_reportbuilder_testcase {
$this->resetAfterTest();
// Test subjects.
$this->getDataGenerator()->create_user(['firstname' => 'Admin', 'suspended' => 1]);
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user suspended.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended', 'aggregation' => min::get_class_name()]
);
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:suspended',
'aggregation' => min::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_suspended' => 'No',
],
[
'c0_firstname' => 'Bob',
'c1_suspended' => 'No',
],
], $content);
['Bob', 'Yes'],
['Admin', 'No'],
], array_map('array_values', $content));
}
}
@@ -52,24 +52,20 @@ class percent_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user suspended.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended', 'aggregation' => percent::get_class_name()]
);
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:suspended',
'aggregation' => percent::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_suspended' => '0.0%',
],
[
'c0_firstname' => 'Bob',
'c1_suspended' => '50.0%',
],
], $content);
['Bob', '50.0%'],
['Admin', '0.0%'],
], array_map('array_values', $content));
}
}
@@ -55,25 +55,21 @@ class sum_test extends core_reportbuilder_testcase {
$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', 'sortenabled' => 1]);
// This is the column we'll aggregate.
// Report columns, aggregated/sorted by user suspended.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'user:firstname']);
$generator->create_column([
'reportid' => $report->get('id'), 'uniqueidentifier' => 'user:suspended', 'aggregation' => sum::get_class_name()
'reportid' => $report->get('id'),
'uniqueidentifier' => 'user:suspended',
'aggregation' => sum::get_class_name(),
'sortenabled' => 1,
'sortdirection' => SORT_DESC,
]);
$content = $this->get_custom_report_content($report->get('id'));
$this->assertEquals([
[
'c0_firstname' => 'Admin',
'c1_suspended' => 0,
],
[
'c0_firstname' => 'Bob',
'c1_suspended' => 2,
],
], $content);
['Bob', 2],
['Admin', 0],
], array_map('array_values', $content));
}
/**