diff --git a/Modules/Setting/Support/Settings.php b/Modules/Setting/Support/Settings.php index b8e467451..c11587735 100644 --- a/Modules/Setting/Support/Settings.php +++ b/Modules/Setting/Support/Settings.php @@ -32,16 +32,16 @@ public function get($name, $locale = null, $default = null) $defaultFromConfig = $this->getDefaultFromConfigFor($name); $setting = $this->setting->findByName($name); - if (! $setting) { + if ($setting === null) { return is_null($default) ? $defaultFromConfig : $default; } if ($setting->isTranslatable) { if ($setting->hasTranslation($locale)) { - return empty($setting->translate($locale)->value) ? $defaultFromConfig : $setting->translate($locale)->value; + return trim($setting->translate($locale)->value) === '' ? $defaultFromConfig : $setting->translate($locale)->value; } } else { - return $setting->plainValue === null ? $defaultFromConfig : $setting->plainValue; + return trim($setting->plainValue) === '' ? $defaultFromConfig : $setting->plainValue; } return $defaultFromConfig; diff --git a/Modules/Setting/Tests/SettingsTest.php b/Modules/Setting/Tests/SettingsTest.php index 5db984cb1..cf50d8586 100644 --- a/Modules/Setting/Tests/SettingsTest.php +++ b/Modules/Setting/Tests/SettingsTest.php @@ -57,6 +57,49 @@ public function it_gets_setting_in_given_locale() $this->assertEquals('AsgardCMS_fr', $setting); } + /** @test */ + public function it_returns_correctly_if_setting_is_falsey() + { + // Prepare + $data = [ + 'blog::posts-per-page' => 0, + ]; + + // Run + $this->settingRepository->createOrUpdate($data); + + // Assert + $setting = $this->setting->get('blog::posts-per-page'); + $this->assertEquals(0, $setting); + } + + /** @test */ + public function it_returns_correctly_if_setting_for_locale_is_falsey() + { + // Prepare + $this->app['config']->set('asgard.block.settings', [ + 'display-some-feature' => [ + 'description' => 'block::settings.display-some-feature', + 'view' => 'text', + 'translatable' => true, + ], + ]); + + $data = [ + 'block::display-some-feature' => [ + 'en' => 0, + 'fr' => 1, + ], + ]; + + // Run + $this->settingRepository->createOrUpdate($data); + + // Assert + $this->assertEquals(0, $this->setting->get('block::display-some-feature', 'en')); + $this->assertEquals(1, $this->setting->get('block::display-some-feature', 'fr')); + } + /** @test */ public function it_returns_a_default_value_if_no_setting_found() {