190558640e
We should respect the value of the PHPUNIT_LONGTEST constant in the
report source stress tests, as it was discovered after 165e26fa that
the default configuration of some CIs (GHA) was not sufficient to run
them.
Hence, use the PHPUNIT_LONGTEST to determine whether to execute said
tests. Note this constant is enabled on internal CI.
134 lines
5.2 KiB
PHP
134 lines
5.2 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace core_course\reportbuilder\datasource;
|
|
|
|
use core_customfield_generator;
|
|
use core_reportbuilder_testcase;
|
|
use core_reportbuilder_generator;
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
global $CFG;
|
|
require_once("{$CFG->dirroot}/reportbuilder/tests/helpers.php");
|
|
|
|
/**
|
|
* Unit tests for component datasources
|
|
*
|
|
* @package core_course
|
|
* @covers \core_course\reportbuilder\datasource\courses
|
|
* @copyright 2021 Paul Holden <paulh@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class courses_test extends core_reportbuilder_testcase {
|
|
|
|
/**
|
|
* Test courses datasource
|
|
*/
|
|
public function test_courses_datasource(): void {
|
|
$this->resetAfterTest();
|
|
|
|
// Test subject.
|
|
$category = $this->getDataGenerator()->create_category(['name' => 'My cats']);
|
|
$course = $this->getDataGenerator()->create_course([
|
|
'category' => $category->id,
|
|
'fullname' => 'All about cats',
|
|
'shortname' => 'C101',
|
|
'idnumber' => 'CAT101'
|
|
]);
|
|
|
|
/** @var core_reportbuilder_generator $generator */
|
|
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
|
$report = $generator->create_report(['name' => 'Courses', 'source' => courses::class]);
|
|
|
|
$content = $this->get_custom_report_content($report->get('id'));
|
|
$this->assertCount(1, $content);
|
|
|
|
$contentrow = array_values(reset($content));
|
|
$this->assertEquals([
|
|
'My cats', // Category name.
|
|
'C101', // Course shortname.
|
|
'All about cats', // Course fullname.
|
|
'CAT101', // Course ID number.
|
|
], $contentrow);
|
|
}
|
|
|
|
/**
|
|
* Tests courses datasource using multilang filters
|
|
*/
|
|
public function test_courses_datasource_multilang_filters(): void {
|
|
$this->resetAfterTest();
|
|
|
|
filter_set_global_state('multilang', TEXTFILTER_ON);
|
|
filter_set_applies_to_strings('multilang', true);
|
|
|
|
// Test subject.
|
|
$category = $this->getDataGenerator()->create_category([
|
|
'name' => '<span class="multilang" lang="en">Cat (en)</span><span class="multilang" lang="es">Cat (es)</span>',
|
|
]);
|
|
$course = $this->getDataGenerator()->create_course([
|
|
'category' => $category->id,
|
|
'fullname' => '<span class="multilang" lang="en">Crs (en)</span><span class="multilang" lang="es">Crs (es)</span>',
|
|
]);
|
|
|
|
/** @var core_reportbuilder_generator $generator */
|
|
$generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder');
|
|
|
|
// Create a report containing columns that support multilang content.
|
|
$report = $generator->create_report(['name' => 'Courses', 'source' => courses::class, 'default' => 0]);
|
|
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course_category:name']);
|
|
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:fullname']);
|
|
$generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'course:coursefullnamewithlink']);
|
|
|
|
$content = $this->get_custom_report_content($report->get('id'));
|
|
$this->assertCount(1, $content);
|
|
|
|
$contentrow = array_values(reset($content));
|
|
$this->assertEquals([
|
|
'Cat (en)',
|
|
'Crs (en)',
|
|
'<a href="' . (string) course_get_url($course->id) . '">Crs (en)</a>',
|
|
], $contentrow);
|
|
}
|
|
|
|
/**
|
|
* Stress test datasource
|
|
*
|
|
* In order to execute this test PHPUNIT_LONGTEST should be defined as true in phpunit.xml or directly in config.php
|
|
*/
|
|
public function test_stress_datasource(): void {
|
|
if (!PHPUNIT_LONGTEST) {
|
|
$this->markTestSkipped('PHPUNIT_LONGTEST is not defined');
|
|
}
|
|
|
|
$this->resetAfterTest();
|
|
|
|
/** @var core_customfield_generator $generator */
|
|
$generator = $this->getDataGenerator()->get_plugin_generator('core_customfield');
|
|
$customfieldcategory = $generator->create_category();
|
|
$generator->create_field(['categoryid' => $customfieldcategory->get('id'), 'shortname' => 'hi']);
|
|
|
|
$category = $this->getDataGenerator()->create_category();
|
|
$course = $this->getDataGenerator()->create_course(['category' => $category->id, 'customfield_hi' => 'Hello']);
|
|
|
|
$this->datasource_stress_test_columns(courses::class);
|
|
$this->datasource_stress_test_columns_aggregation(courses::class);
|
|
$this->datasource_stress_test_conditions(courses::class, 'course:idnumber');
|
|
}
|
|
}
|