Commit e75adff3 authored by Ben Hayward's avatar Ben Hayward

Updated and fixed

1 merge request!337[Sprint/NuancedNumbat](feat): Enable feature flags when staging cookie set. #857
Pipeline #85094671 canceled with stages
in 1 minute and 25 seconds
......@@ -48,11 +48,16 @@ class Manager
public function has($feature)
{
$features = $this->config->get('features') ?: [];
$featureOverrides = empty($_COOKIE['staging-features'])
?: json_decode(base64_decode($_COOKIE['staging-features'], true), true);
if ($featureOverrides[$feature]) {
return $featureOverrides[$feature];
try {
$featureOverrides = $_COOKIE['staging-features']
? json_decode(base64_decode($_COOKIE['staging-features'], true), true)
: null;
if ($featureOverrides[$feature]) {
return $featureOverrides[$feature];
}
} catch (\Exception $e) {
// Invalid cookie
}
if (!isset($features[$feature])) {
......@@ -74,7 +79,19 @@ class Manager
*/
public function export()
{
return $this->config->get('features') ?: [];
$features = $this->config->get('features');
try {
$featureOverrides = $_COOKIE['staging-features']
? json_decode(base64_decode($_COOKIE['staging-features'], true), true)
: null;
if ($featureOverrides) {
return array_merge($featureOverrides, $features);
}
} catch (\Exception $e) {
// Invalid cookie
}
return $features;
}
/**
......
......@@ -7,16 +7,21 @@ use Minds\Core\Di\Di;
use Minds\Core\Features\Manager;
use Minds\Entities\User;
use PhpSpec\ObjectBehavior;
use Minds\Common\Cookie;
class ManagerSpec extends ObjectBehavior
{
/** @var Config */
protected $config;
public function let(Config $config)
/** @var Cookie */
protected $cookie;
public function let(Config $config, Cookie $cookie)
{
$this->beConstructedWith($config);
$this->config = $config;
$this->cookie = $cookie;
}
public function it_is_initializable()
......@@ -92,4 +97,26 @@ class ManagerSpec extends ObjectBehavior
$this->export()->shouldReturn($features);
}
public function it_should_return_has_staging_features_cookie_when_set()
{
$_COOKIE['staging-features'] = 'eyJ0ZXN0Ijp0cnVlfQ==';
$this->has('test')->shouldReturn(true);
}
public function it_should_when_exporting_include_overriden_staging_features()
{
$this->config->get('features')
->shouldBeCalled()
->willReturn(['plus' => true, 'wire' => 'admin']);
$_COOKIE['staging-features'] = 'eyJ0ZXN0Ijp0cnVlfQ==';
$this->export()->shouldReturn([
'test' => true,
'plus' => true,
'wire' => 'admin'
]);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment