diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb
new file mode 100644
index 000000000..464a155d0
--- /dev/null
+++ b/app/helpers/tags_helper.rb
@@ -0,0 +1,10 @@
+module TagsHelper
+ def taggables_path(taggable, tag_name)
+ case taggable.class.name
+ when "Legislation::Proposal"
+ legislation_process_proposals_path(taggable.process, search: tag_name)
+ else
+ polymorphic_path(taggable.class, search: tag_name)
+ end
+ end
+end
diff --git a/app/models/sdg/process_enabled.rb b/app/models/sdg/process_enabled.rb
index 67a17902a..29b567bcf 100644
--- a/app/models/sdg/process_enabled.rb
+++ b/app/models/sdg/process_enabled.rb
@@ -7,7 +7,7 @@ class SDG::ProcessEnabled
end
def enabled?
- feature?("sdg") && feature?(process_name) && setting["sdg.process.#{process_name}"]
+ feature?("sdg") && feature?(process_name) && setting["sdg.process.#{process_name}"] && relatable?
end
def name
@@ -39,4 +39,10 @@ class SDG::ProcessEnabled
def module_name
name.split("::").first
end
+
+ def relatable?
+ return true if controller_path_name?
+
+ (SDG::Related::RELATABLE_TYPES & [record_or_name.class.name, record_or_name]).any?
+ end
end
diff --git a/app/views/shared/_tags.html.erb b/app/views/shared/_tags.html.erb
index 103455017..f4ac1773e 100644
--- a/app/views/shared/_tags.html.erb
+++ b/app/views/shared/_tags.html.erb
@@ -7,7 +7,7 @@
<% taggable.tag_list_with_limit(limit).each do |tag| %>
<%= link_to sanitize(tag.name),
- polymorphic_path(taggable.class, search: tag.name) %>
+ taggables_path(taggable, tag.name) %>
<% end %>
<% if taggable.tags_count_out_of_limit(limit) > 0 %>
diff --git a/spec/models/sdg/process_enabled_spec.rb b/spec/models/sdg/process_enabled_spec.rb
new file mode 100644
index 000000000..5094b1d42
--- /dev/null
+++ b/spec/models/sdg/process_enabled_spec.rb
@@ -0,0 +1,75 @@
+require "rails_helper"
+
+describe SDG::ProcessEnabled do
+ describe "#enabled?" do
+ context "SDG feature and namespace are enabled" do
+ before do
+ Setting["feature.sdg"] = true
+ %w[debates proposals polls budgets legislation].each do |process_name|
+ Setting["sdg.process.#{process_name}"] = true
+ end
+ end
+
+ it "returns true with relatable records" do
+ SDG::Related::RELATABLE_TYPES.each do |relatable_type|
+ process = SDG::ProcessEnabled.new(relatable_type.constantize.new)
+
+ expect(process).to be_enabled
+ end
+ end
+
+ it "returns true with relatable class names" do
+ SDG::Related::RELATABLE_TYPES.each do |relatable_type|
+ process = SDG::ProcessEnabled.new(relatable_type)
+
+ expect(process).to be_enabled
+ end
+ end
+
+ it "returns true with relatable controller paths" do
+ process = SDG::ProcessEnabled.new("budgets/investments")
+
+ expect(process).to be_enabled
+ end
+
+ it "returns false when record or name are not a relatable type" do
+ expect(SDG::ProcessEnabled.new(build(:legislation_proposal))).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("Legislation::Proposal")).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("officing/booth")).not_to be_enabled
+ end
+ end
+
+ context "SDG feature is disabled" do
+ before do
+ Setting["feature.sdg"] = false
+ Setting["sdg.process.debates"] = true
+ end
+
+ it "returns false" do
+ expect(SDG::ProcessEnabled.new(build(:debate))).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("Debate")).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("debates")).not_to be_enabled
+ end
+ end
+
+ context "Some SDG processes are disabled" do
+ before do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.debates"] = true
+ Setting["sdg.process.proposals"] = false
+ end
+
+ it "returns false for disabled processes" do
+ expect(SDG::ProcessEnabled.new(build(:proposal))).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("Proposal")).not_to be_enabled
+ expect(SDG::ProcessEnabled.new("proposals")).not_to be_enabled
+ end
+
+ it "returns true for enabled processes" do
+ expect(SDG::ProcessEnabled.new(build(:debate))).to be_enabled
+ expect(SDG::ProcessEnabled.new("Debate")).to be_enabled
+ expect(SDG::ProcessEnabled.new("debates")).to be_enabled
+ end
+ end
+ end
+end
diff --git a/spec/system/legislation/proposals_spec.rb b/spec/system/legislation/proposals_spec.rb
index db773cf69..50162f2ae 100644
--- a/spec/system/legislation/proposals_spec.rb
+++ b/spec/system/legislation/proposals_spec.rb
@@ -210,4 +210,30 @@ describe "Legislation Proposals" do
expect(page).to have_link(process.title)
end
end
+
+ scenario "Shows proposal tags as proposals filter", :js do
+ create(:legislation_proposal, process: process, tag_list: "Culture", title: "Open concert")
+ create(:legislation_proposal, process: process, tag_list: "Sports", title: "Baseball field")
+
+ visit legislation_process_proposals_path(process)
+
+ expect(page).to have_content "Open concert"
+ expect(page).to have_content "Baseball field"
+
+ click_link "Culture"
+
+ expect(page).not_to have_content "Baseball field"
+ expect(page).to have_content "Open concert"
+ end
+
+ scenario "Show proposal tags on show when SDG is enabled", :js do
+ Setting["feature.sdg"] = true
+ Setting["sdg.process.legislation"] = true
+
+ proposal = create(:legislation_proposal, process: process, tag_list: "Culture")
+
+ visit legislation_process_proposal_path(proposal.process, proposal)
+
+ expect(page).to have_link("Culture")
+ end
end