diff --git a/app/components/sdg_management/relations/index_component.html.erb b/app/components/sdg_management/relations/index_component.html.erb
index 75e6b4170..3366a1372 100644
--- a/app/components/sdg_management/relations/index_component.html.erb
+++ b/app/components/sdg_management/relations/index_component.html.erb
@@ -9,6 +9,8 @@
"aria-label": target_label %>
<% end %>
+<%= render "shared/filter_subnav", i18n_namespace: "sdg_management.relations.index" %>
+
diff --git a/app/components/sdg_management/relations/index_component.rb b/app/components/sdg_management/relations/index_component.rb
index 4af870992..9c66e85e8 100644
--- a/app/components/sdg_management/relations/index_component.rb
+++ b/app/components/sdg_management/relations/index_component.rb
@@ -1,6 +1,7 @@
class SDGManagement::Relations::IndexComponent < ApplicationComponent
include Header
include SDG::Goals::OptionsForSelect
+ delegate :valid_filters, :current_filter, to: :helpers
attr_reader :records
diff --git a/app/controllers/sdg_management/relations_controller.rb b/app/controllers/sdg_management/relations_controller.rb
index e16c1f63b..697def9c6 100644
--- a/app/controllers/sdg_management/relations_controller.rb
+++ b/app/controllers/sdg_management/relations_controller.rb
@@ -2,8 +2,12 @@ class SDGManagement::RelationsController < SDGManagement::BaseController
before_action :check_feature_flags
before_action :load_record, only: [:edit, :update]
+ FILTERS = %w[pending_sdg_review all sdg_reviewed].freeze
+ has_filters FILTERS, only: :index
+
def index
@records = relatable_class
+ .send(@current_filter)
.accessible_by(current_ability)
.by_goal(params[:goal_code])
.by_target(params[:target_code])
diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml
index c644c0311..95818bc30 100644
--- a/config/i18n-tasks.yml
+++ b/config/i18n-tasks.yml
@@ -219,6 +219,7 @@ ignore_unused:
- "seeds.settings.*"
- "dashboard.polls.*.submit"
- "sdg.goals.goal_*"
+ - "sdg_management.relations.index.filter*"
####
## Exclude these keys from the `i18n-tasks eq-base" report:
# ignore_eq_base:
diff --git a/config/locales/en/sdg_management.yml b/config/locales/en/sdg_management.yml
index f4736fe8e..d3cdef6a5 100644
--- a/config/locales/en/sdg_management.yml
+++ b/config/locales/en/sdg_management.yml
@@ -32,3 +32,10 @@ en:
title: "New local target"
update:
notice: "Local target updated successfully"
+ relations:
+ index:
+ filter: "Filter"
+ filters:
+ all: "All"
+ pending_sdg_review: "Pending"
+ sdg_reviewed: "Marked as reviewed"
diff --git a/config/locales/es/sdg_management.yml b/config/locales/es/sdg_management.yml
index 488599bc5..11162fcb8 100644
--- a/config/locales/es/sdg_management.yml
+++ b/config/locales/es/sdg_management.yml
@@ -32,3 +32,10 @@ es:
title: "Nueva meta localizada"
update:
notice: "Meta localizada asctualizada correctamente"
+ relations:
+ index:
+ filter: "Filtro"
+ filters:
+ all: "Todos"
+ pending_sdg_review: "Pendientes"
+ sdg_reviewed: "Marcados como revisados"
diff --git a/spec/components/sdg_management/relations/index_component_spec.rb b/spec/components/sdg_management/relations/index_component_spec.rb
index e194a4aaf..dbe5be7e4 100644
--- a/spec/components/sdg_management/relations/index_component_spec.rb
+++ b/spec/components/sdg_management/relations/index_component_spec.rb
@@ -1,6 +1,16 @@
require "rails_helper"
describe SDGManagement::Relations::IndexComponent, type: :component do
+ before do
+ allow(ViewComponent::Base).to receive(:test_controller).and_return("SDGManagement::RelationsController")
+ allow_any_instance_of(SDGManagement::RelationsController).to receive(:valid_filters)
+ .and_return(SDGManagement::RelationsController::FILTERS)
+ allow_any_instance_of(SDGManagement::RelationsController).to receive(:current_filter)
+ .and_return(SDGManagement::RelationsController::FILTERS.first)
+ allow_any_instance_of(ApplicationHelper).to receive(:current_path_with_query_params)
+ .and_return("/anything")
+ end
+
describe "#goal_options" do
it "orders goals by code in the select" do
component = SDGManagement::Relations::IndexComponent.new(Proposal.none.page(1))
diff --git a/spec/system/sdg_management/relations_spec.rb b/spec/system/sdg_management/relations_spec.rb
index 05b0a9965..53fa1c808 100644
--- a/spec/system/sdg_management/relations_spec.rb
+++ b/spec/system/sdg_management/relations_spec.rb
@@ -18,26 +18,31 @@ describe "SDG Relations", :js do
expect(page).to have_current_path "/sdg_management/budget/investments"
expect(page).to have_css "h2", exact_text: "Participatory budgets"
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
within("#side_menu") { click_link "Debates" }
expect(page).to have_current_path "/sdg_management/debates"
expect(page).to have_css "h2", exact_text: "Debates"
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
within("#side_menu") { click_link "Collaborative legislation" }
expect(page).to have_current_path "/sdg_management/legislation/processes"
expect(page).to have_css "h2", exact_text: "Collaborative legislation"
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
within("#side_menu") { click_link "Polls" }
expect(page).to have_current_path "/sdg_management/polls"
expect(page).to have_css "h2", exact_text: "Polls"
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
within("#side_menu") { click_link "Proposals" }
expect(page).to have_current_path "/sdg_management/proposals"
expect(page).to have_css "h2", exact_text: "Proposals"
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
end
describe "Index" do
@@ -88,6 +93,39 @@ describe "SDG Relations", :js do
expect(page).to have_css "h2", exact_text: "Build a hospital"
end
+ scenario "list records pending to review for the current model by default" do
+ create(:debate, title: "I'm a debate")
+ create(:sdg_review, relatable: create(:debate, title: "I'm a reviewed debate"))
+
+ visit sdg_management_debates_path
+
+ expect(page).to have_css "li.is-active h2", exact_text: "Pending"
+ expect(page).to have_text "I'm a debate"
+ expect(page).not_to have_text "I'm a reviewed debate"
+ end
+
+ scenario "list all records for the current model when user clicks on 'all' tab" do
+ create(:debate, title: "I'm a debate")
+ create(:sdg_review, relatable: create(:debate, title: "I'm a reviewed debate"))
+
+ visit sdg_management_debates_path
+ click_link "All"
+
+ expect(page).to have_text "I'm a debate"
+ expect(page).to have_text "I'm a reviewed debate"
+ end
+
+ scenario "list reviewed records for the current model when user clicks on 'reviewed' tab" do
+ create(:debate, title: "I'm a debate")
+ create(:sdg_review, relatable: create(:debate, title: "I'm a reviewed debate"))
+
+ visit sdg_management_debates_path
+ click_link "Marked as reviewed"
+
+ expect(page).not_to have_text "I'm a debate"
+ expect(page).to have_text "I'm a reviewed debate"
+ end
+
describe "search" do
scenario "search by terms" do
create(:poll, name: "Internet speech freedom")