You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.2 KiB
146 lines
5.2 KiB
2 years ago
|
<?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/>.
|
||
|
|
||
|
/**
|
||
|
* @package core_backup
|
||
|
* @category phpunit
|
||
|
* @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||
|
*/
|
||
|
|
||
|
defined('MOODLE_INTERNAL') || die();
|
||
|
|
||
|
// Include all the needed stuff
|
||
|
global $CFG;
|
||
|
require_once($CFG->dirroot . '/backup/util/helper/convert_helper.class.php');
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Provides access to the protected methods we need to test
|
||
|
*/
|
||
|
class testable_convert_helper extends convert_helper {
|
||
|
|
||
|
public static function choose_conversion_path($format, array $descriptions) {
|
||
|
return parent::choose_conversion_path($format, $descriptions);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Defines the test methods
|
||
|
*/
|
||
|
class backup_convert_helper_testcase extends basic_testcase {
|
||
|
|
||
|
public function test_choose_conversion_path() {
|
||
|
|
||
|
// no converters available
|
||
|
$descriptions = array();
|
||
|
$path = testable_convert_helper::choose_conversion_path(backup::FORMAT_MOODLE1, $descriptions);
|
||
|
$this->assertEquals($path, array());
|
||
|
|
||
|
// missing source and/or targets
|
||
|
$descriptions = array(
|
||
|
// some custom converter
|
||
|
'exporter' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => 'some_custom_format',
|
||
|
'cost' => 10,
|
||
|
),
|
||
|
// another custom converter
|
||
|
'converter' => array(
|
||
|
'from' => 'yet_another_crazy_custom_format',
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 10,
|
||
|
),
|
||
|
);
|
||
|
$path = testable_convert_helper::choose_conversion_path(backup::FORMAT_MOODLE1, $descriptions);
|
||
|
$this->assertEquals($path, array());
|
||
|
|
||
|
$path = testable_convert_helper::choose_conversion_path('some_other_custom_format', $descriptions);
|
||
|
$this->assertEquals($path, array());
|
||
|
|
||
|
// single step conversion
|
||
|
$path = testable_convert_helper::choose_conversion_path('yet_another_crazy_custom_format', $descriptions);
|
||
|
$this->assertEquals($path, array('converter'));
|
||
|
|
||
|
// no conversion needed - this is supposed to be detected by the caller
|
||
|
$path = testable_convert_helper::choose_conversion_path(backup::FORMAT_MOODLE, $descriptions);
|
||
|
$this->assertEquals($path, array());
|
||
|
|
||
|
// two alternatives
|
||
|
$descriptions = array(
|
||
|
// standard moodle 1.9 -> 2.x converter
|
||
|
'moodle1' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 10,
|
||
|
),
|
||
|
// alternative moodle 1.9 -> 2.x converter
|
||
|
'alternative' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 8,
|
||
|
)
|
||
|
);
|
||
|
$path = testable_convert_helper::choose_conversion_path(backup::FORMAT_MOODLE1, $descriptions);
|
||
|
$this->assertEquals($path, array('alternative'));
|
||
|
|
||
|
// complex case
|
||
|
$descriptions = array(
|
||
|
// standard moodle 1.9 -> 2.x converter
|
||
|
'moodle1' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 10,
|
||
|
),
|
||
|
// alternative moodle 1.9 -> 2.x converter
|
||
|
'alternative' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 8,
|
||
|
),
|
||
|
// custom converter from 1.9 -> custom 'CFv1' format
|
||
|
'cc1' => array(
|
||
|
'from' => backup::FORMAT_MOODLE1,
|
||
|
'to' => 'CFv1',
|
||
|
'cost' => 2,
|
||
|
),
|
||
|
// custom converter from custom 'CFv1' format -> moodle 2.0 format
|
||
|
'cc2' => array(
|
||
|
'from' => 'CFv1',
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 5,
|
||
|
),
|
||
|
// custom converter from CFv1 -> CFv2 format
|
||
|
'cc3' => array(
|
||
|
'from' => 'CFv1',
|
||
|
'to' => 'CFv2',
|
||
|
'cost' => 2,
|
||
|
),
|
||
|
// custom converter from CFv2 -> moodle 2.0 format
|
||
|
'cc4' => array(
|
||
|
'from' => 'CFv2',
|
||
|
'to' => backup::FORMAT_MOODLE,
|
||
|
'cost' => 2,
|
||
|
),
|
||
|
);
|
||
|
|
||
|
// ask the helper to find the most effective way
|
||
|
$path = testable_convert_helper::choose_conversion_path(backup::FORMAT_MOODLE1, $descriptions);
|
||
|
$this->assertEquals($path, array('cc1', 'cc3', 'cc4'));
|
||
|
}
|
||
|
}
|