Disable SDG sections when settings are disabled
This commit is contained in:
@@ -13,6 +13,8 @@ class SDGManagement::MenuComponent < ApplicationComponent
|
||||
|
||||
def relatable_links
|
||||
SDG::Related::RELATABLE_TYPES.map do |type|
|
||||
next unless setting["process.#{process_name(type)}"] && setting["sdg.process.#{process_name(type)}"]
|
||||
|
||||
[
|
||||
t("sdg_management.menu.#{table_name(type)}"),
|
||||
relatable_type_path(type),
|
||||
@@ -37,4 +39,14 @@ class SDGManagement::MenuComponent < ApplicationComponent
|
||||
def table_name(type)
|
||||
type.constantize.table_name
|
||||
end
|
||||
|
||||
def process_name(type)
|
||||
process_name = type.split("::").first
|
||||
|
||||
if process_name == "Legislation"
|
||||
"legislation"
|
||||
else
|
||||
process_name.constantize.table_name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class SDGManagement::RelationsController < SDGManagement::BaseController
|
||||
before_action :check_feature_flags
|
||||
before_action :load_record, only: [:edit, :update]
|
||||
|
||||
def index
|
||||
@@ -23,4 +24,12 @@ class SDGManagement::RelationsController < SDGManagement::BaseController
|
||||
def relatable_class
|
||||
params[:relatable_type].classify.constantize
|
||||
end
|
||||
|
||||
def check_feature_flags
|
||||
process_name = params[:relatable_type].split("/").first
|
||||
process_name = process_name.pluralize unless process_name == "legislation"
|
||||
|
||||
check_feature_flag(process_name)
|
||||
raise FeatureDisabled, process_name unless Setting["sdg.process.#{process_name}"]
|
||||
end
|
||||
end
|
||||
|
||||
92
spec/components/sdg_management/menu_component_spec.rb
Normal file
92
spec/components/sdg_management/menu_component_spec.rb
Normal file
@@ -0,0 +1,92 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe SDGManagement::MenuComponent, type: :component do
|
||||
let(:component) { SDGManagement::MenuComponent.new }
|
||||
|
||||
before do
|
||||
Setting["sdg.process.budgets"] = true
|
||||
Setting["sdg.process.debates"] = true
|
||||
Setting["sdg.process.legislation"] = true
|
||||
Setting["sdg.process.polls"] = true
|
||||
Setting["sdg.process.proposals"] = true
|
||||
end
|
||||
|
||||
context "processes enabled" do
|
||||
it "generates links to all processes" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_link "Goals and Targets"
|
||||
expect(page).to have_link "Participatory budgets"
|
||||
expect(page).to have_link "Debates"
|
||||
expect(page).to have_link "Collaborative legislation"
|
||||
expect(page).to have_link "Polls"
|
||||
expect(page).to have_link "Proposals"
|
||||
end
|
||||
end
|
||||
|
||||
context "processes disabled" do
|
||||
before do
|
||||
Setting["process.budgets"] = false
|
||||
Setting["process.debates"] = false
|
||||
Setting["process.legislation"] = false
|
||||
Setting["process.polls"] = false
|
||||
Setting["process.proposals"] = false
|
||||
end
|
||||
|
||||
it "does not generate links to any processes" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_css "a", count: 1
|
||||
expect(page).to have_link "Goals and Targets"
|
||||
end
|
||||
end
|
||||
|
||||
context "SDG processes disabled" do
|
||||
before do
|
||||
Setting["sdg.process.budgets"] = false
|
||||
Setting["sdg.process.debates"] = false
|
||||
Setting["sdg.process.legislation"] = false
|
||||
Setting["sdg.process.polls"] = false
|
||||
Setting["sdg.process.proposals"] = false
|
||||
end
|
||||
|
||||
it "does not generate links to any processes" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_css "a", count: 1
|
||||
expect(page).to have_link "Goals and Targets"
|
||||
end
|
||||
end
|
||||
|
||||
context "one process disabled" do
|
||||
before { Setting["process.debates"] = false }
|
||||
|
||||
it "generates links to the enabled processes" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_link "Goals and Targets"
|
||||
expect(page).to have_link "Participatory budgets"
|
||||
expect(page).to have_link "Collaborative legislation"
|
||||
expect(page).to have_link "Polls"
|
||||
expect(page).to have_link "Proposals"
|
||||
|
||||
expect(page).not_to have_link "Debates"
|
||||
end
|
||||
end
|
||||
|
||||
context "one SDG process disabled" do
|
||||
before { Setting["sdg.process.legislation"] = false }
|
||||
|
||||
it "generates links to the enabled processes" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_link "Goals and Targets"
|
||||
expect(page).to have_link "Debates"
|
||||
expect(page).to have_link "Participatory budgets"
|
||||
expect(page).to have_link "Polls"
|
||||
expect(page).to have_link "Proposals"
|
||||
|
||||
expect(page).not_to have_link "Collaborative legislation"
|
||||
end
|
||||
end
|
||||
end
|
||||
98
spec/controllers/sdg_management/relations_spec.rb
Normal file
98
spec/controllers/sdg_management/relations_spec.rb
Normal file
@@ -0,0 +1,98 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe SDGManagement::RelationsController do
|
||||
before do
|
||||
sign_in create(:administrator).user
|
||||
|
||||
Setting["feature.sdg"] = true
|
||||
Setting["sdg.process.budgets"] = true
|
||||
Setting["sdg.process.debates"] = true
|
||||
Setting["sdg.process.legislation"] = true
|
||||
Setting["sdg.process.polls"] = true
|
||||
Setting["sdg.process.proposals"] = true
|
||||
end
|
||||
|
||||
context "processes disabled" do
|
||||
it "raises feature disabled for budgets" do
|
||||
Setting["process.budgets"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "budget/investments" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for debates" do
|
||||
Setting["process.debates"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "debates" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for legislation processes" do
|
||||
Setting["process.legislation"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "legislation/processes" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for polls" do
|
||||
Setting["process.polls"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "polls" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for proposals" do
|
||||
Setting["process.proposals"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "proposals" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
end
|
||||
|
||||
context "SDG processes disabled" do
|
||||
it "raises feature disabled for budgets" do
|
||||
Setting["sdg.process.budgets"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "budget/investments" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for debates" do
|
||||
Setting["sdg.process.debates"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "debates" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for legislation processes" do
|
||||
Setting["sdg.process.legislation"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "legislation/processes" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for polls" do
|
||||
Setting["sdg.process.polls"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "polls" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
|
||||
it "raises feature disabled for proposals" do
|
||||
Setting["sdg.process.proposals"] = false
|
||||
|
||||
expect do
|
||||
get :index, params: { relatable_type: "proposals" }
|
||||
end.to raise_exception(FeatureFlags::FeatureDisabled)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,6 +4,11 @@ describe "SDG Relations", :js do
|
||||
before do
|
||||
login_as(create(:administrator).user)
|
||||
Setting["feature.sdg"] = true
|
||||
Setting["sdg.process.budgets"] = true
|
||||
Setting["sdg.process.debates"] = true
|
||||
Setting["sdg.process.legislation"] = true
|
||||
Setting["sdg.process.polls"] = true
|
||||
Setting["sdg.process.proposals"] = true
|
||||
end
|
||||
|
||||
scenario "navigation" do
|
||||
|
||||
Reference in New Issue
Block a user