MDL-80722 reportbuilder: add time created/modified to course entity.

Tidy up unit tests for course report, removing some redundancy and
duplication.
This commit is contained in:
Paul Holden
2024-02-01 17:13:11 +00:00
parent f30110b5eb
commit 3c83f2b85f
3 changed files with 72 additions and 52 deletions
@@ -18,9 +18,10 @@ declare(strict_types=1);
namespace core_course\reportbuilder\datasource;
use core_course_category;
use core_reportbuilder_generator;
use core_reportbuilder_testcase;
use core_reportbuilder\local\filters\{select, text};
use core_reportbuilder\local\filters\{category, select, text};
defined('MOODLE_INTERNAL') || die();
@@ -126,7 +127,12 @@ class categories_test extends core_reportbuilder_testcase {
return [
// Category.
'Filter category' => ['course_category:name', [
'course_category:name_operator' => category::NOT_EQUAL_TO,
'course_category:name_value' => -1,
], true],
'Filter category (no match)' => ['course_category:name', [
'course_category:name_operator' => category::EQUAL_TO,
'course_category:name_value' => -1,
], false],
'Filter category name' => ['course_category:text', [
@@ -202,7 +208,8 @@ class categories_test extends core_reportbuilder_testcase {
$this->resetAfterTest();
$category = $this->getDataGenerator()->create_category(['name' => 'Zoo', 'idnumber' => 'Z01']);
// Get the default category, modify it so we can filter each value.
($category = core_course_category::get_default())->update(['name' => 'Zoo', 'idnumber' => 'Z01']);
$course = $this->getDataGenerator()->create_course(['category' => $category->id, 'fullname' => 'Zebra']);
// Add a cohort.
@@ -22,7 +22,6 @@ use context_course;
use core_reportbuilder_testcase;
use core_reportbuilder_generator;
use core_reportbuilder\local\filters\boolean_select;
use core_reportbuilder\local\filters\category;
use core_reportbuilder\local\filters\date;
use core_reportbuilder\local\filters\select;
use core_reportbuilder\local\filters\tags;
@@ -109,12 +108,6 @@ class courses_test extends core_reportbuilder_testcase {
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
$report = $generator->create_report(['name' => 'Courses', 'source' => courses::class, 'default' => 0]);
// Category.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:namewithlink']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:path']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:idnumber']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:description']);
// Course.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:coursefullnamewithlink']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:courseshortnamewithlink']);
@@ -131,10 +124,11 @@ class courses_test extends core_reportbuilder_testcase {
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:theme']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:enablecompletion']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:downloadcontent']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:timecreated']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:timemodified']);
// Tags.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'tag:name']);
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'tag:namewithlink']);
// File entity.
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'file:name']);
@@ -142,37 +136,52 @@ class courses_test extends core_reportbuilder_testcase {
$content = $this->get_custom_report_content($report->get('id'));
$this->assertCount(1, $content);
$courserow = array_values($content[0]);
// Category.
$this->assertStringContainsString($category->get_formatted_name(), $courserow[0]);
$this->assertEquals($category->get_nested_name(false), $courserow[1]);
$this->assertEquals($category->idnumber, $courserow[2]);
$this->assertEquals(format_text($category->description, $category->descriptionformat), $courserow[3]);
[
$coursenamewithlink,
$courseshortnamewithlink,
$courseidnumberwithlink,
$coursesummary,
$courseformat,
$coursestartdate,
$courseenddate,
$coursevisible,
$coursegroupmode,
$coursegroupmodeforce,
$courselang,
$coursecalendar,
$coursetheme,
$coursecompletion,
$coursedownload,
$coursetimecreated,
$coursetimemodified,
$tagname,
$filename,
] = array_values($content[0]);
// Course.
$this->assertStringContainsString($course->fullname, $courserow[4]);
$this->assertStringContainsString($course->shortname, $courserow[5]);
$this->assertStringContainsString($course->idnumber, $courserow[6]);
$this->assertEquals(format_text($course->summary, $course->summaryformat), $courserow[7]);
$this->assertEquals('Custom sections', $courserow[8]);
$this->assertEquals(userdate($course->startdate), $courserow[9]);
$this->assertEmpty($courserow[10]);
$this->assertEquals('Yes', $courserow[11]);
$this->assertEquals('No groups', $courserow[12]);
$this->assertEquals('No', $courserow[13]);
$this->assertEmpty($courserow[14]);
$this->assertEmpty($courserow[15]);
$this->assertEmpty($courserow[16]);
$this->assertEquals('No', $courserow[17]);
$this->assertEmpty($courserow[18]);
$this->assertStringContainsString($course->fullname, $coursenamewithlink);
$this->assertStringContainsString($course->shortname, $courseshortnamewithlink);
$this->assertStringContainsString($course->idnumber, $courseidnumberwithlink);
$this->assertEquals(format_text($course->summary, $course->summaryformat), $coursesummary);
$this->assertEquals('Custom sections', $courseformat);
$this->assertEquals(userdate($course->startdate), $coursestartdate);
$this->assertEmpty($courseenddate);
$this->assertEquals('Yes', $coursevisible);
$this->assertEquals('No groups', $coursegroupmode);
$this->assertEquals('No', $coursegroupmodeforce);
$this->assertEmpty($courselang);
$this->assertEmpty($coursecalendar);
$this->assertEmpty($coursetheme);
$this->assertEquals('No', $coursecompletion);
$this->assertEmpty($coursedownload);
$this->assertEquals(userdate($course->timecreated), $coursetimecreated);
$this->assertEquals(userdate($course->timemodified), $coursetimemodified);
// Tags.
$this->assertEquals('Horses', $courserow[19]);
$this->assertStringContainsString('Horses', $courserow[20]);
$this->assertEquals('Horses', $tagname);
// File.
$this->assertEquals('HelloWorld.jpg', $courserow[21]);
$this->assertEquals('HelloWorld.jpg', $filename);
}
/**
@@ -221,14 +230,6 @@ class courses_test extends core_reportbuilder_testcase {
public function datasource_filters_provider(): array {
return [
// Category.
'Filter category' => ['course_category:name', [
'course_category:name_operator' => category::NOT_EQUAL_TO,
'course_category:name_value' => -1,
], true],
'Filter category (no match)' => ['course_category:name', [
'course_category:name_operator' => category::EQUAL_TO,
'course_category:name_value' => -1,
], false],
'Filter category name' => ['course_category:text', [
'course_category:text_operator' => text::IS_EQUAL_TO,
'course_category:text_value' => 'Animals',
@@ -237,14 +238,6 @@ class courses_test extends core_reportbuilder_testcase {
'course_category:text_operator' => text::IS_EQUAL_TO,
'course_category:text_value' => 'Fruit',
], false],
'Filter category idnumber' => ['course_category:idnumber', [
'course_category:idnumber_operator' => text::IS_EQUAL_TO,
'course_category:idnumber_value' => 'CAT101',
], true],
'Filter category idnumber (no match)' => ['course_category:idnumber', [
'course_category:idnumber_operator' => text::CONTAINS,
'course_category:idnumber_value' => 'FRUIT',
], false],
// Course.
'Filter course' => ['course:courseselector', [
@@ -360,6 +353,22 @@ class courses_test extends core_reportbuilder_testcase {
'Filter course downloadcontent (no match)' => ['course:downloadcontent', [
'course:downloadcontent_operator' => boolean_select::NOT_CHECKED,
], false],
'Filter course timecreated' => ['course:timecreated', [
'course:timecreated_operator' => date::DATE_RANGE,
'course:timecreated_from' => 1622502000,
], true],
'Filter course timecreated (no match)' => ['course:timecreated', [
'course:timecreated_operator' => date::DATE_RANGE,
'course:timecreated_to' => 1622502000,
], false],
'Filter course timemodified' => ['course:timemodified', [
'course:timemodified_operator' => date::DATE_RANGE,
'course:timemodified_from' => 1622502000,
], true],
'Filter course timemodified (no match)' => ['course:timemodified', [
'course:timemodified_operator' => date::DATE_RANGE,
'course:timemodified_to' => 1622502000,
], false],
// Tags.
'Filter tag name' => ['tag:name', [
@@ -389,7 +398,7 @@ class courses_test extends core_reportbuilder_testcase {
public function test_datasource_filters(string $filtername, array $filtervalues, bool $expectmatch): void {
$this->resetAfterTest();
$category = $this->getDataGenerator()->create_category(['name' => 'Animals', 'idnumber' => 'CAT101']);
$category = $this->getDataGenerator()->create_category(['name' => 'Animals']);
$course = $this->getDataGenerator()->create_course([
'category' => $category->id,
'fullname' => 'Equine',
@@ -143,6 +143,8 @@ class course extends base {
'theme' => new lang_string('forcetheme'),
'enablecompletion' => new lang_string('enablecompletion', 'completion'),
'downloadcontent' => new lang_string('downloadcoursecontent', 'course'),
'timecreated' => new lang_string('timecreated', 'core_reportbuilder'),
'timemodified' => new lang_string('timemodified', 'core_reportbuilder'),
];
}
@@ -177,6 +179,8 @@ class course extends base {
break;
case 'startdate':
case 'enddate':
case 'timecreated':
case 'timemodified':
$fieldtype = column::TYPE_TIMESTAMP;
break;
case 'summary':