From 2bb0a2dfafe2165e2a495fec1d343ea96ad52d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Sun, 20 Dec 2020 18:15:08 +0100 Subject: [PATCH] Make "see all" links filter per goal --- .../widgets/feeds/feed_component.rb | 10 +++- app/models/concerns/filterable.rb | 2 +- .../widgets/feeds/feed_component_spec.rb | 57 +++++++++++++++++++ spec/system/sdg/goals_spec.rb | 24 +++++++- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 spec/components/widgets/feeds/feed_component_spec.rb diff --git a/app/components/widgets/feeds/feed_component.rb b/app/components/widgets/feeds/feed_component.rb index b858db7c7..2b41f9495 100644 --- a/app/components/widgets/feeds/feed_component.rb +++ b/app/components/widgets/feeds/feed_component.rb @@ -7,7 +7,7 @@ class Widgets::Feeds::FeedComponent < ApplicationComponent end def see_all_path - polymorphic_path(feed.items.model) + polymorphic_path(feed.items.model, filters) end private @@ -22,4 +22,12 @@ class Widgets::Feeds::FeedComponent < ApplicationComponent Widgets::Feeds::ProcessComponent end end + + def filters + if feed.respond_to?(:goal) + { advanced_search: { goal: feed.goal.code }} + else + {} + end + end end diff --git a/app/models/concerns/filterable.rb b/app/models/concerns/filterable.rb index 31d64ae89..0c7520580 100644 --- a/app/models/concerns/filterable.rb +++ b/app/models/concerns/filterable.rb @@ -20,7 +20,7 @@ module Filterable def allowed_filter?(filter, value) return if value.blank? - ["official_level", "date_range"].include?(filter) + ["official_level", "date_range", "goal"].include?(filter) end end end diff --git a/spec/components/widgets/feeds/feed_component_spec.rb b/spec/components/widgets/feeds/feed_component_spec.rb new file mode 100644 index 000000000..8d2cae566 --- /dev/null +++ b/spec/components/widgets/feeds/feed_component_spec.rb @@ -0,0 +1,57 @@ +require "rails_helper" + +describe Widgets::Feeds::FeedComponent, type: :component do + describe "#see_all_path" do + context "debates" do + let(:feed) { Widget::Feed.new(kind: "debates") } + + it "points to the debates path for homepage debates feeds" do + component = Widgets::Feeds::FeedComponent.new(feed) + + render_inline component + + expect(component.see_all_path).to eq "/debates" + end + + it "points to the debates filtered by goal for goal feeds" do + component = Widgets::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) + + render_inline component + + expect(component.see_all_path).to eq "/debates?advanced_search#{CGI.escape("[goal]")}=6" + end + end + + context "proposals" do + let(:feed) { Widget::Feed.new(kind: "proposals") } + + it "points to the proposals path for homepage proposals feeds" do + component = Widgets::Feeds::FeedComponent.new(feed) + + render_inline component + + expect(component.see_all_path).to eq "/proposals" + end + + it "points to the proposals filtered by goal for goal feeds" do + component = Widgets::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) + + render_inline component + + expect(component.see_all_path).to eq "/proposals?advanced_search#{CGI.escape("[goal]")}=6" + end + end + + context "processes" do + let(:feed) { Widget::Feed.new(kind: "processes") } + + it "points to the legislation processes path for homepage processes feeds" do + component = Widgets::Feeds::FeedComponent.new(feed) + + render_inline component + + expect(component.see_all_path).to eq "/legislation/processes" + end + end + end +end diff --git a/spec/system/sdg/goals_spec.rb b/spec/system/sdg/goals_spec.rb index 277fe0eb0..808a9afbd 100644 --- a/spec/system/sdg/goals_spec.rb +++ b/spec/system/sdg/goals_spec.rb @@ -33,14 +33,16 @@ describe "SDG Goals", :js do end describe "Show" do - scenario "shows the SDG and its related content" do + before do goal = SDG::Goal[15] create(:debate, title: "Solar panels", sdg_goals: [SDG::Goal[7]]) create(:debate, title: "Hunting ground", sdg_goals: [goal]) create(:proposal, title: "Animal farm", sdg_goals: [goal]) create(:proposal, title: "Sea farm", sdg_goals: [SDG::Goal[14]]) + end + scenario "shows the SDG and its related content" do visit sdg_goal_path(15) within(".sdg-goal header") { expect(page).to have_content "Life on Land" } @@ -55,5 +57,25 @@ describe "SDG Goals", :js do expect(page).not_to have_content "Solar panels" end end + + scenario "has links to debates and proposals filtered by goal" do + visit sdg_goal_path(15) + + click_link "See all debates" + + within "#debates" do + expect(page).to have_content "Hunting ground" + expect(page).not_to have_content "Solar panels" + end + + go_back + + click_link "See all proposals" + + within "#proposals" do + expect(page).to have_content "Animal farm" + expect(page).not_to have_content "Sea farm" + end + end end end