When administrators disabled features and users tried to access them with the browser, we were responding with a 500 "Internal Server Error" page, which in my humble opinion was incorrect. There was no error at all; the server worked exactly as expected. I think a 403 "Forbidden" code is better; since that feature is disabled, we're refusing to let users access it. We could also respond with a 404 "Not found", although I wonder whether that'll be confusing when administrators temporarily or accidentally disable a feature. A similar thing might happen if we responded with a 410 "Gone" code. Actually this case might be more confusing since users aren't that familiar with this code. In any case, all these options are better than the 500 error.
116 lines
2.9 KiB
Ruby
116 lines
2.9 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin feature flags", :admin do
|
|
before do
|
|
Setting["process.budgets"] = true
|
|
end
|
|
|
|
scenario "Enabled features are listed on menu" do
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
expect(page).to have_link "Participatory budgets"
|
|
expect(page).to have_link "Debates"
|
|
end
|
|
end
|
|
|
|
scenario "Disable a participatory process", :show_exceptions do
|
|
setting = Setting.find_by(key: "process.budgets")
|
|
budget = create(:budget)
|
|
|
|
visit admin_settings_path
|
|
within("#settings-tabs") { click_link "Participation processes" }
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Disable"
|
|
expect(page).not_to have_button "Enable"
|
|
|
|
accept_confirm { click_button "Disable" }
|
|
end
|
|
|
|
expect(page).to have_content "Value updated"
|
|
|
|
within("#side_menu") do
|
|
expect(page).not_to have_link "Participatory budgets"
|
|
end
|
|
|
|
visit budget_path(budget)
|
|
|
|
expect(page).to have_title "Forbidden"
|
|
|
|
visit admin_budgets_path
|
|
|
|
expect(page).to have_current_path admin_budgets_path
|
|
expect(page).to have_title "Forbidden"
|
|
end
|
|
|
|
scenario "Enable a disabled participatory process" do
|
|
Setting["process.budgets"] = nil
|
|
setting = Setting.find_by(key: "process.budgets")
|
|
|
|
visit admin_root_path
|
|
|
|
within("#side_menu") do
|
|
expect(page).not_to have_link "Participatory budgets"
|
|
end
|
|
|
|
visit admin_settings_path
|
|
within("#settings-tabs") { click_link "Participation processes" }
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Enable"
|
|
expect(page).not_to have_button "Disable"
|
|
|
|
accept_confirm { click_button "Enable" }
|
|
end
|
|
|
|
expect(page).to have_content "Value updated"
|
|
|
|
within("#side_menu") do
|
|
expect(page).to have_link "Participatory budgets"
|
|
end
|
|
end
|
|
|
|
scenario "Disable a feature" do
|
|
setting = Setting.find_by(key: "feature.twitter_login")
|
|
|
|
visit admin_settings_path
|
|
click_link "Features"
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Disable"
|
|
expect(page).not_to have_button "Enable"
|
|
|
|
accept_confirm { click_button "Disable" }
|
|
end
|
|
|
|
expect(page).to have_content "Value updated"
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Enable"
|
|
expect(page).not_to have_button "Disable"
|
|
end
|
|
end
|
|
|
|
scenario "Enable a disabled feature" do
|
|
setting = Setting.find_by(key: "feature.map")
|
|
|
|
visit admin_settings_path
|
|
click_link "Features"
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Enable"
|
|
expect(page).not_to have_button "Disable"
|
|
|
|
accept_confirm { click_button "Enable" }
|
|
end
|
|
|
|
expect(page).to have_content "Value updated"
|
|
|
|
within("#edit_setting_#{setting.id}") do
|
|
expect(page).to have_button "Disable"
|
|
expect(page).not_to have_button "Enable"
|
|
end
|
|
end
|
|
end
|