MDL-64285 core: Fix environment check test

* Looping the environment results and skipping some items mean that
if a test gets skipped, the rest of the environment results won't be
tested. It's better to use a data provider for this in order to
individually test each environment result.
This commit is contained in:
Jun Pataleta
2018-12-13 16:05:14 +08:00
parent 6f41a2c318
commit d2df0daf5b
+41 -15
View File
@@ -32,26 +32,52 @@ defined('MOODLE_INTERNAL') || die();
class core_environment_testcase extends advanced_testcase {
/**
* Test the environment.
* Test the environment check status.
*/
public function test_environment() {
public function test_environment_check_status() {
global $CFG;
require_once($CFG->libdir.'/environmentlib.php');
list($envstatus, $environment_results) = check_moodle_environment(normalize_version($CFG->release), ENV_SELECT_RELEASE);
$this->assertNotEmpty($envstatus);
foreach ($environment_results as $environment_result) {
if ($environment_result->part === 'php_setting'
and $environment_result->info === 'opcache.enable'
and $environment_result->getLevel() === 'optional'
and $environment_result->getStatus() === false
) {
$this->markTestSkipped('OPCache extension is not necessary for unit testing.');
continue;
}
$this->assertTrue($environment_result->getStatus(), "Problem detected in environment ($environment_result->part:$environment_result->info), fix all warnings and errors!");
$results = check_moodle_environment(normalize_version($CFG->release), ENV_SELECT_RELEASE);
// The first element of the results array contains the environment check status.
$status = reset($results);
$this->assertTrue($status);
}
/**
* Data provider for Moodle environment check tests.
*
* @return array
*/
public function environment_provider() {
global $CFG;
require_once($CFG->libdir.'/environmentlib.php');
$results = check_moodle_environment(normalize_version($CFG->release), ENV_SELECT_RELEASE);
// The second element of the results array contains the list of environment results.
$environmentresults = end($results);
return array_map(function($result) {
return [$result];
}, $environmentresults);
}
/**
* Test the environment.
*
* @dataProvider environment_provider
* @param environment_results $result
*/
public function test_environment($result) {
if ($result->part === 'php_setting'
&& $result->info === 'opcache.enable'
&& $result->getLevel() === 'optional'
&& $result->getStatus() === false) {
$this->markTestSkipped('OPCache extension is not necessary for unit testing.');
}
$info = "{$result->part}:{$result->info}";
$this->assertTrue($result->getStatus(), "Problem detected in environment ($info), fix all warnings and errors!");
}
/**