1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 declare(strict_types=1); 18 19 namespace core_reportbuilder\local\filters; 20 21 use advanced_testcase; 22 use lang_string; 23 use core_reportbuilder\local\report\filter; 24 25 /** 26 * Unit tests for number report filter 27 * 28 * @package core_reportbuilder 29 * @covers \core_reportbuilder\local\filters\base 30 * @covers \core_reportbuilder\local\filters\number 31 * @copyright 2021 David Matamoros <davidmc@moodle.com> 32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 33 */ 34 class number_test extends advanced_testcase { 35 36 /** 37 * Data provider for {@see test_get_sql_filter_simple} 38 * 39 * @return array[] 40 */ 41 public function get_sql_filter_simple_provider(): array { 42 return [ 43 [number::ANY_VALUE, null, null, true], 44 [number::IS_NOT_EMPTY, null, null, true], 45 [number::IS_EMPTY, null, null, false], 46 [number::LESS_THAN, 1, null, false], 47 [number::LESS_THAN, 123, null, false], 48 [number::LESS_THAN, 124, null, true], 49 [number::GREATER_THAN, 1, null, true], 50 [number::GREATER_THAN, 123, null, false], 51 [number::GREATER_THAN, 124, null, false], 52 [number::EQUAL_TO, 123, null, true], 53 [number::EQUAL_TO, 124, null, false], 54 [number::EQUAL_OR_LESS_THAN, 124, null, true], 55 [number::EQUAL_OR_LESS_THAN, 123, null, true], 56 [number::EQUAL_OR_LESS_THAN, 122, null, false], 57 [number::EQUAL_OR_GREATER_THAN, 122, null, true], 58 [number::EQUAL_OR_GREATER_THAN, 123, null, true], 59 [number::EQUAL_OR_GREATER_THAN, 124, null, false], 60 [number::RANGE, 122, 124, true], 61 [number::RANGE, 124, 125, false], 62 [number::RANGE, 122, 123, true], 63 [number::RANGE, 123, 124, true], 64 ]; 65 } 66 67 /** 68 * Test getting filter SQL 69 * 70 * @param int $operator 71 * @param int|null $value1 72 * @param int|null $value2 73 * @param bool $expectmatch 74 * 75 * @dataProvider get_sql_filter_simple_provider 76 */ 77 public function test_get_sql_filter_simple(int $operator, ?int $value1, ?int $value2, bool $expectmatch): void { 78 global $DB; 79 80 $this->resetAfterTest(); 81 82 $course = $this->getDataGenerator()->create_course([ 83 'timecreated' => 123, 84 ]); 85 86 $filter = new filter( 87 number::class, 88 'test', 89 new lang_string('course'), 90 'testentity', 91 'timecreated' 92 ); 93 94 // Create instance of our filter, passing given operator. 95 [$select, $params] = number::create($filter)->get_sql_filter([ 96 $filter->get_unique_identifier() . '_value1' => $value1, 97 $filter->get_unique_identifier() . '_value2' => $value2, 98 $filter->get_unique_identifier() . '_operator' => $operator, 99 ]); 100 101 $fullnames = $DB->get_fieldset_select('course', 'fullname', $select, $params); 102 if ($expectmatch) { 103 $this->assertContains($course->fullname, $fullnames); 104 } else { 105 $this->assertNotContains($course->fullname, $fullnames); 106 } 107 } 108 109 /** 110 * Data provider for {@see test_get_sql_filter_invalid} 111 * 112 * @return array[] 113 */ 114 public function get_sql_filter_invalid_provider(): array { 115 return [ 116 [number::LESS_THAN], 117 [number::GREATER_THAN], 118 [number::EQUAL_TO], 119 [number::EQUAL_OR_LESS_THAN], 120 [number::EQUAL_OR_GREATER_THAN], 121 [number::RANGE], 122 ]; 123 } 124 125 /** 126 * Test getting filter SQL for operators that require values 127 * 128 * @param int $operator 129 * 130 * @dataProvider get_sql_filter_invalid_provider 131 */ 132 public function test_get_sql_filter_invalid(int $operator): void { 133 $filter = new filter( 134 number::class, 135 'test', 136 new lang_string('course'), 137 'testentity', 138 'timecreated' 139 ); 140 141 [$select, $params] = number::create($filter)->get_sql_filter([ 142 $filter->get_unique_identifier() . '_operator' => $operator, 143 ]); 144 145 $this->assertEquals('', $select); 146 $this->assertEquals([], $params); 147 } 148 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body