mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
FIX Ensure environment is checked before enabling deprecations (#11055)
This commit is contained in:
parent
bbc6167fe3
commit
7eab49f850
@ -234,14 +234,23 @@ class Deprecation
|
||||
|
||||
public static function isEnabled(): bool
|
||||
{
|
||||
if (Environment::hasEnv('SS_DEPRECATION_ENABLED')) {
|
||||
$envVar = Environment::getEnv('SS_DEPRECATION_ENABLED');
|
||||
return self::varAsBoolean($envVar);
|
||||
$hasEnv = Environment::hasEnv('SS_DEPRECATION_ENABLED');
|
||||
|
||||
// Return early if disabled
|
||||
if ($hasEnv && !Environment::getEnv('SS_DEPRECATION_ENABLED')) {
|
||||
return false;
|
||||
}
|
||||
if (!$hasEnv && !static::$currentlyEnabled) {
|
||||
// Static property is ignored if SS_DEPRECATION_ENABLED was set
|
||||
return false;
|
||||
}
|
||||
|
||||
// If it's enabled, explicitly don't allow for non-dev environments
|
||||
if (!Director::isDev()) {
|
||||
return false;
|
||||
}
|
||||
return static::$currentlyEnabled;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,12 +4,14 @@ namespace SilverStripe\Dev\Tests;
|
||||
|
||||
use PHPUnit\Framework\Error\Deprecated;
|
||||
use ReflectionMethod;
|
||||
use ReflectionProperty;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Core\Environment;
|
||||
use SilverStripe\Dev\Deprecation;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Dev\Tests\DeprecationTest\DeprecationTestObject;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Core\Kernel;
|
||||
|
||||
class DeprecationTest extends SapphireTest
|
||||
{
|
||||
@ -445,4 +447,104 @@ class DeprecationTest extends SapphireTest
|
||||
|
||||
$this->assertSame($expected, $reflectionVarAsBoolean->invoke(null, $rawValue));
|
||||
}
|
||||
|
||||
public function provideIsEnabled()
|
||||
{
|
||||
return [
|
||||
'dev, explicitly enabled' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => true,
|
||||
'staticEnabled' => true,
|
||||
'expected' => true,
|
||||
],
|
||||
'dev, explicitly enabled override static' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => true,
|
||||
'staticEnabled' => false,
|
||||
'expected' => true,
|
||||
],
|
||||
'dev, explicitly disabled override static' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => false,
|
||||
'staticEnabled' => true,
|
||||
'expected' => false,
|
||||
],
|
||||
'dev, explicitly disabled' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => false,
|
||||
'staticEnabled' => false,
|
||||
'expected' => false,
|
||||
],
|
||||
'dev, statically disabled' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => null,
|
||||
'staticEnabled' => true,
|
||||
'expected' => true,
|
||||
],
|
||||
'dev, statically disabled' => [
|
||||
'envMode' => 'dev',
|
||||
'envEnabled' => null,
|
||||
'staticEnabled' => false,
|
||||
'expected' => false,
|
||||
],
|
||||
'live, explicitly enabled' => [
|
||||
'envMode' => 'live',
|
||||
'envEnabled' => true,
|
||||
'staticEnabled' => true,
|
||||
'expected' => false,
|
||||
],
|
||||
'live, explicitly disabled' => [
|
||||
'envMode' => 'live',
|
||||
'envEnabled' => false,
|
||||
'staticEnabled' => false,
|
||||
'expected' => false,
|
||||
],
|
||||
'live, statically disabled' => [
|
||||
'envMode' => 'live',
|
||||
'envEnabled' => null,
|
||||
'staticEnabled' => true,
|
||||
'expected' => false,
|
||||
],
|
||||
'live, statically disabled' => [
|
||||
'envMode' => 'live',
|
||||
'envEnabled' => null,
|
||||
'staticEnabled' => false,
|
||||
'expected' => false,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideIsEnabled
|
||||
*/
|
||||
public function testIsEnabled(string $envMode, ?bool $envEnabled, bool $staticEnabled, bool $expected)
|
||||
{
|
||||
/** @var Kernel $kernel */
|
||||
$kernel = Injector::inst()->get(Kernel::class);
|
||||
$origMode = $kernel->getEnvironment();
|
||||
$origEnvEnabled = Environment::getEnv('SS_DEPRECATION_ENABLED');
|
||||
$reflectionEnabled = new ReflectionProperty(Deprecation::class, 'currentlyEnabled');
|
||||
$reflectionEnabled->setAccessible(true);
|
||||
$origStaticEnabled = $reflectionEnabled->getValue();
|
||||
|
||||
try {
|
||||
$kernel->setEnvironment($envMode);
|
||||
Environment::setEnv('SS_DEPRECATION_ENABLED', $envEnabled);
|
||||
$this->setEnabledViaStatic($staticEnabled);
|
||||
$this->assertSame($expected, Deprecation::isEnabled());
|
||||
} finally {
|
||||
$kernel->setEnvironment($origMode);
|
||||
Environment::setEnv('SS_DEPRECATION_ENABLED', $origEnvEnabled);
|
||||
$this->setEnabledViaStatic($origStaticEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
private function setEnabledViaStatic(bool $enabled): void
|
||||
{
|
||||
if ($enabled) {
|
||||
Deprecation::enable();
|
||||
} else {
|
||||
Deprecation::disable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user