░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/competency/tests/reportbuilder/datasource
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: competencies_test.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_competency\reportbuilder\datasource; use core_competency_generator; use core_competency\user_competency; use core_reportbuilder_generator; use core_reportbuilder\local\filters\{boolean_select, date, select, text}; use core_reportbuilder\tests\core_reportbuilder_testcase; /** * Unit tests for comptencies datasource * * @package core_competency * @covers \core_competency\reportbuilder\datasource\competencies * @copyright 2024 Paul Holden <paulh@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class competencies_test extends core_reportbuilder_testcase { /** * Test default datasource */ public function test_datasource_default(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); /** @var core_competency_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_competency'); // First framework has two competencies. $framework = $generator->create_framework(['shortname' => 'Zoology']); $generator->create_competency(['competencyframeworkid' => $framework->get('id'), 'shortname' => 'Zebras']); $competency = $generator->create_competency([ 'competencyframeworkid' => $framework->get('id'), 'shortname' => 'Aardvarks', ]); // Framework two has no competencies. $generator->create_framework(['shortname' => 'Algebra']); // Assign user to second competency. $generator->create_user_competency([ 'competencyid' => $competency->get('id'), 'userid' => $user->id, 'proficiency' => true, 'grade' => 1, ]); /** @var core_reportbuilder_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder'); $report = $generator->create_report(['name' => 'Competencies', 'source' => competencies::class, 'default' => 1]); $content = $this->get_custom_report_content($report->get('id')); // Default columns are framework name, competency name, user fullname, proficient. Sorted by first three. $this->assertEquals([ ['Algebra', '', '', ''], ['Zoology', 'Aardvarks', fullname($user), 'Yes'], ['Zoology', 'Zebras', '', ''], ], array_map('array_values', $content)); } /** * Test datasource columns that aren't added by default */ public function test_datasource_non_default_columns(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); $cohort = $this->getDataGenerator()->create_cohort(['name' => 'My cohort']); cohort_add_member($cohort->id, $user->id); $scale = $this->getDataGenerator()->create_scale(['name' => 'My scale', 'scale' => 'A,B,C,D']); /** @var core_competency_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_competency'); $framework = $generator->create_framework(['description' => 'So cool', 'idnumber' => 'FRM101', 'scaleid' => $scale->id]); $competency = $generator->create_competency(['competencyframeworkid' => $framework->get('id'), 'idnumber' => 'COM101']); $generator->create_user_competency([ 'competencyid' => $competency->get('id'), 'userid' => $user->id, 'proficiency' => true, 'grade' => 3, ]); /** @var core_reportbuilder_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder'); $report = $generator->create_report(['name' => 'Competencies', 'source' => competencies::class, 'default' => 0]); // Framework. $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:description']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:idnumber']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:scale']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:visible']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:timecreated']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:timemodified']); // Competency. $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'competency:idnumber']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'competency:timecreated']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'competency:timemodified']); // User competency. $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'usercompetency:status']); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'usercompetency:rating']); // Cohort. $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'cohort:name']); $content = $this->get_custom_report_content($report->get('id')); $this->assertCount(1, $content); [ $frameworkdescription, $frameworkidnumber, $frameworkscale, $frameworkvisible, $frameworktimecreated, $frameworktimemodified, $competencyidnumber, $competencytimecreated, $competencytimemodified, $usercompetencystatus, $usercompetencyrating, $cohortname, ] = array_values($content[0]); $this->assertEquals('So cool', $frameworkdescription); $this->assertEquals('FRM101', $frameworkidnumber); $this->assertEquals('My scale', $frameworkscale); $this->assertEquals('Yes', $frameworkvisible); $this->assertNotEmpty($frameworktimecreated); $this->assertNotEmpty($frameworktimemodified); $this->assertEquals('COM101', $competencyidnumber); $this->assertNotEmpty($competencytimecreated); $this->assertNotEmpty($competencytimemodified); $this->assertEquals('Idle', $usercompetencystatus); $this->assertEquals('C', $usercompetencyrating); $this->assertEquals('My cohort', $cohortname); } /** * Data provider for {@see test_datasource_filters} * * @return array[] */ public static function datasource_filters_provider(): array { return [ // Framework. 'Framework name' => ['framework:name', [ 'framework:name_operator' => text::IS_EQUAL_TO, 'framework:name_value' => 'How much I care', ], true], 'Framework name (no match)' => ['framework:name', [ 'framework:name_operator' => text::IS_EQUAL_TO, 'framework:name_value' => 'Something else', ], false], 'Framework idnumber' => ['framework:idnumber', [ 'framework:idnumber_operator' => text::IS_EQUAL_TO, 'framework:idnumber_value' => 'FRM101', ], true], 'Framework idnumber (no match)' => ['framework:idnumber', [ 'framework:idnumber_operator' => text::IS_EQUAL_TO, 'framework:idnumber_value' => 'FRM102', ], false], 'Framework scale' => ['framework:scale', [ 'framework:scale_operator' => select::EQUAL_TO, 'framework:scale_value' => '<SCALEID>', ], true], 'Framework scale (no match)' => ['framework:scale', [ 'framework:scale_operator' => select::NOT_EQUAL_TO, 'framework:scale_value' => '<SCALEID>', ], false], 'Framework visible' => ['framework:visible', [ 'framework:visible_operator' => boolean_select::CHECKED, ], true], 'Framework visible (no match)' => ['framework:visible', [ 'framework:visible_operator' => boolean_select::NOT_CHECKED, ], false], 'Framework time created' => ['framework:timecreated', [ 'framework:timecreated_operator' => date::DATE_RANGE, 'framework:timecreated_from' => 1622502000, ], true], 'Framework time created (no match)' => ['framework:timecreated', [ 'framework:timecreated_operator' => date::DATE_RANGE, 'framework:timecreated_to' => 1622502000, ], false], 'Framework time modified' => ['framework:timemodified', [ 'framework:timemodified_operator' => date::DATE_RANGE, 'framework:timemodified_from' => 1622502000, ], true], 'Framework time modified (no match)' => ['framework:timemodified', [ 'framework:timemodified_operator' => date::DATE_RANGE, 'framework:timemodified_to' => 1622502000, ], false], // Competency. 'Competency name' => ['competency:name', [ 'competency:name_operator' => text::IS_EQUAL_TO, 'competency:name_value' => 'My framework', ], true], 'Competency name (no match)' => ['competency:name', [ 'competency:name_operator' => text::IS_EQUAL_TO, 'competency:name_value' => 'Something else', ], false], 'Competency idnumber' => ['competency:idnumber', [ 'competency:idnumber_operator' => text::IS_EQUAL_TO, 'competency:idnumber_value' => 'COM101', ], true], 'Competency idnumber (no match)' => ['competency:idnumber', [ 'competency:idnumber_operator' => text::IS_EQUAL_TO, 'competency:idnumber_value' => 'COM102', ], false], 'Competency time created' => ['competency:timecreated', [ 'competency:timecreated_operator' => date::DATE_RANGE, 'competency:timecreated_from' => 1622502000, ], true], 'Competency time created (no match)' => ['competency:timecreated', [ 'competency:timecreated_operator' => date::DATE_RANGE, 'competency:timecreated_to' => 1622502000, ], false], 'Competency time modified' => ['competency:timemodified', [ 'competency:timemodified_operator' => date::DATE_RANGE, 'competency:timemodified_from' => 1622502000, ], true], 'Competency time modified (no match)' => ['competency:timemodified', [ 'competency:timemodified_operator' => date::DATE_RANGE, 'competency:timemodified_to' => 1622502000, ], false], // User competency. 'User competency status' => ['usercompetency:status', [ 'usercompetency:status_operator' => SELECT::EQUAL_TO, 'usercompetency:status_value' => user_competency::STATUS_IDLE, ], true], 'User competency status (no match)' => ['usercompetency:status', [ 'usercompetency:status_operator' => SELECT::EQUAL_TO, 'usercompetency:status_value' => user_competency::STATUS_WAITING_FOR_REVIEW, ], false], 'User competency proficient' => ['usercompetency:proficient', [ 'usercompetency:proficient_operator' => boolean_select::CHECKED, ], true], 'User competency proficient (no match)' => ['usercompetency:proficient', [ 'usercompetency:proficient_operator' => boolean_select::NOT_CHECKED, ], false], // User. 'User username' => ['user:username', [ 'user:username_operator' => text::IS_EQUAL_TO, 'user:username_value' => 'testuser', ], true], 'User username (no match)' => ['user:username', [ 'user:username_operator' => text::IS_NOT_EQUAL_TO, 'user:username_value' => 'testuser', ], false], // Cohort. 'Cohort name' => ['cohort:name', [ 'cohort:name_operator' => text::IS_EQUAL_TO, 'cohort:name_value' => 'My cohort', ], true], 'Cohort name (no match)' => ['cohort:name', [ 'cohort:name_operator' => text::IS_EQUAL_TO, 'cohort:name_value' => 'Another cohort', ], false], ]; } /** * Test datasource filters * * @param string $filtername * @param array $filtervalues * @param bool $expectmatch * * @dataProvider datasource_filters_provider */ public function test_datasource_filters( string $filtername, array $filtervalues, bool $expectmatch ): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(['username' => 'testuser']); $cohort = $this->getDataGenerator()->create_cohort(['name' => 'My cohort']); cohort_add_member($cohort->id, $user->id); $scale = $this->getDataGenerator()->create_scale([]); /** @var core_competency_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_competency'); $framework = $generator->create_framework([ 'shortname' => 'How much I care', 'description' => 'Sometimes I feel my heart will overflow', 'idnumber' => 'FRM101', 'scaleid' => $scale->id, ]); $competency = $generator->create_competency([ 'competencyframeworkid' => $framework->get('id'), 'shortname' => 'My framework', 'idnumber' => 'COM101', ]); $generator->create_user_competency([ 'competencyid' => $competency->get('id'), 'userid' => $user->id, 'proficiency' => true, 'grade' => 3, ]); /** @var core_reportbuilder_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_reportbuilder'); // Create report containing single column, and given filter. $report = $generator->create_report(['name' => 'Competencies', 'source' => competencies::class, 'default' => 0]); $generator->create_column(['reportid' => $report->get('id'), 'uniqueidentifier' => 'framework:idnumber']); // Add filter, set it's values. $generator->create_filter(['reportid' => $report->get('id'), 'uniqueidentifier' => $filtername]); $content = $this->get_custom_report_content( reportid: $report->get('id'), filtervalues: str_replace('<SCALEID>', $scale->id, $filtervalues), ); if ($expectmatch) { $this->assertCount(1, $content); $this->assertEquals('FRM101', reset($content[0])); } else { $this->assertEmpty($content); } } /** * 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(); $user = $this->getDataGenerator()->create_user(); /** @var core_competency_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('core_competency'); $framework = $generator->create_framework(); $competency = $generator->create_competency(['competencyframeworkid' => $framework->get('id')]); $generator->create_user_competency(['competencyid' => $competency->get('id'), 'userid' => $user->id]); $this->datasource_stress_test_columns(competencies::class); $this->datasource_stress_test_columns_aggregation(competencies::class); $this->datasource_stress_test_conditions(competencies::class, 'framework:idnumber'); } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 competencies_test.php
PHP
16.7 KB
2026-02-11 01:44
EDIT