See Release Notes
Long Term Support Release
<?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/>. /** * Unit tests for tool_health. * * @package tool_health * @copyright 2013 Marko Vidberg * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); global $CFG; require_once($CFG->dirroot . '/' . $CFG->admin . '/tool/health/locallib.php'); /** * Health lib testcase. * * @package tool_health * @copyright 2013 Marko Vidberg * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class healthlib_testcase extends advanced_testcase { /** * Data provider for test_tool_health_category_find_loops. */ public static function provider_loop_categories() { return array( // One item loop including root. 0 => array( array( '1' => (object) array('id' => 1, 'parent' => 1) ), array( '1' => (object) array('id' => 1, 'parent' => 1) ), ), // One item loop not including root. 1 => array( array( '1' => (object) array('id' => 1, 'parent' => 0), '2' => (object) array('id' => 2, 'parent' => 2) ), array( '2' => (object) array('id' => 2, 'parent' => 2) ), ), // Two item loop including root. 2 => array( array( '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 1) ), array( '2' => (object) array('id' => 2, 'parent' => 1), '1' => (object) array('id' => 1, 'parent' => 2), ) ), // Two item loop not including root. 3 => array( array( '1' => (object) array('id' => 1, 'parent' => 0), '2' => (object) array('id' => 2, 'parent' => 3), '3' => (object) array('id' => 3, 'parent' => 2), ), array( '3' => (object) array('id' => 3, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 3), ) ), // Three item loop including root. 4 => array( array( '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 3), '3' => (object) array('id' => 3, 'parent' => 1), ), array( '3' => (object) array('id' => 3, 'parent' => 1), '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 3), ) ), // Three item loop not including root. 5 => array( array( '1' => (object) array('id' => 1, 'parent' => 0), '2' => (object) array('id' => 2, 'parent' => 3), '3' => (object) array('id' => 3, 'parent' => 4), '4' => (object) array('id' => 4, 'parent' => 2) ), array( '4' => (object) array('id' => 4, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 3), '3' => (object) array('id' => 3, 'parent' => 4), ) ), // Multi-loop. 6 => array( array( '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 1), '3' => (object) array('id' => 3, 'parent' => 4), '4' => (object) array('id' => 4, 'parent' => 5), '5' => (object) array('id' => 5, 'parent' => 3), '6' => (object) array('id' => 6, 'parent' => 6), '7' => (object) array('id' => 7, 'parent' => 1), '8' => (object) array('id' => 8, 'parent' => 7), ), array( '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 1), '8' => (object) array('id' => 8, 'parent' => 7), '7' => (object) array('id' => 7, 'parent' => 1), '6' => (object) array('id' => 6, 'parent' => 6), '5' => (object) array('id' => 5, 'parent' => 3), '3' => (object) array('id' => 3, 'parent' => 4), '4' => (object) array('id' => 4, 'parent' => 5), ) ), // Double-loop 7 => array( array( '1' => (object) array('id' => 1, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 1), '3' => (object) array('id' => 3, 'parent' => 2), '4' => (object) array('id' => 4, 'parent' => 2), ), array( '4' => (object) array('id' => 4, 'parent' => 2), '3' => (object) array('id' => 3, 'parent' => 2), '2' => (object) array('id' => 2, 'parent' => 1), '1' => (object) array('id' => 1, 'parent' => 2), ) ) ); } /** * Data provider for test_tool_health_category_find_missing_parents. */ public static function provider_missing_parent_categories() { return array( // Test for two items, both with direct ancestor (parent) missing. 0 => array( array( '1' => (object) array('id' => 1, 'parent' => 0), '2' => (object) array('id' => 2, 'parent' => 3), '4' => (object) array('id' => 4, 'parent' => 5), '6' => (object) array('id' => 6, 'parent' => 2) ), array( '4' => (object) array('id' => 4, 'parent' => 5), '2' => (object) array('id' => 2, 'parent' => 3) ), ) ); } /** * Test finding loops between two items referring to each other. * * @param array $categories * @param array $expected * @dataProvider provider_loop_categories */ public function test_tool_health_category_find_loops($categories, $expected) { $loops = tool_health_category_find_loops($categories); $this->assertEquals($expected, $loops); } /** * Test finding missing parent categories. * * @param array $categories * @param array $expected * @dataProvider provider_missing_parent_categories */ public function test_tool_health_category_find_missing_parents($categories, $expected) { $missingparent = tool_health_category_find_missing_parents($categories); $this->assertEquals($expected, $missingparent); } /** * Test listing missing parent categories. */ public function test_tool_health_category_list_missing_parents() { $missingparent = array((object) array('id' => 2, 'parent' => 3, 'name' => 'test'), (object) array('id' => 4, 'parent' => 5, 'name' => 'test2')); $result = tool_health_category_list_missing_parents($missingparent);< $this->assertRegExp('/Category 2: test/', $result); < $this->assertRegExp('/Category 4: test2/', $result);> $this->assertMatchesRegularExpression('/Category 2: test/', $result); > $this->assertMatchesRegularExpression('/Category 4: test2/', $result);} /** * Test listing loop categories. */ public function test_tool_health_category_list_loops() { $loops = array((object) array('id' => 2, 'parent' => 3, 'name' => 'test')); $result = tool_health_category_list_loops($loops);< $this->assertRegExp('/Category 2: test/', $result);> $this->assertMatchesRegularExpression('/Category 2: test/', $result);} }