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")