From 853f2c6fbaaecaf1da3bc9fd13de3c5dc7667ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Mon, 25 Jan 2016 12:44:00 +0100 Subject: [PATCH] fixes disabling of features via admin interface --- app/models/setting.rb | 5 +- spec/features/admin/feature_flags_spec.rb | 61 +++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 spec/features/admin/feature_flags_spec.rb diff --git a/app/models/setting.rb b/app/models/setting.rb index b8b29a645..b6df3daef 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -5,13 +5,12 @@ class Setting < ActiveRecord::Base class << self def [](key) - where(key: key).pluck(:value).first + where(key: key).pluck(:value).first.presence end def []=(key, value) setting = where(key: key).first || new(key: key) - setting.value = value - setting.value = nil if setting.value == false + setting.value = value.presence setting.save! value end diff --git a/spec/features/admin/feature_flags_spec.rb b/spec/features/admin/feature_flags_spec.rb new file mode 100644 index 000000000..b4d2a006c --- /dev/null +++ b/spec/features/admin/feature_flags_spec.rb @@ -0,0 +1,61 @@ +require 'rails_helper' + +feature 'Admin feature flags' do + + background do + login_as(create(:administrator).user) + end + + scenario 'Enabled features are listed on menu' do + visit admin_root_path + + within('#admin_menu') do + expect(page).to have_link "Spending proposals" + expect(page).to have_link "Hidden debates" + end + end + + scenario 'Disable a feature' do + setting_id = Setting.find_by(key: 'feature.spending_proposals').id + + visit admin_settings_path + + within("#edit_setting_#{setting_id}") do + fill_in "setting_#{setting_id}", with: '' + click_button 'Update' + end + + visit admin_root_path + + within('#admin_menu') do + expect(page).not_to have_link "Spending proposals" + end + + expect{ visit spending_proposals_path }.to raise_exception(FeatureFlags::FeatureDisabled) + expect{ visit admin_spending_proposals_path }.to raise_exception(FeatureFlags::FeatureDisabled) + end + + scenario 'Enable a disabled feature' do + Setting['feature.spending_proposals'] = nil + setting_id = Setting.find_by(key: 'feature.spending_proposals').id + + visit admin_root_path + + within('#admin_menu') do + expect(page).not_to have_link "Spending proposals" + end + + visit admin_settings_path + + within("#edit_setting_#{setting_id}") do + fill_in "setting_#{setting_id}", with: 'true' + click_button 'Update' + end + + visit admin_root_path + + within('#admin_menu') do + expect(page).to have_link "Spending proposals" + end + end +end \ No newline at end of file