From 44b2a078789405b0b7dfb80e501ee2a7c726431d Mon Sep 17 00:00:00 2001 From: cyrillefr Date: Sat, 5 Oct 2019 04:02:39 +0200 Subject: [PATCH] Moderate legislation proposals (#3602) Moderate legislation proposals - added a controller for moderation/legislation - updated view to appropriate link + added route - added a spec - Feature test - test for faded - javascripts for visual effects --- app/assets/javascripts/application.js | 1 + .../moderator_legislation_proposals.js | 12 +++++++++ app/controllers/concerns/polymorphic.rb | 2 ++ .../legislation/proposals_controller.rb | 19 +++++++++++++ .../legislation/proposals/_actions.html.erb | 2 +- app/views/legislation/proposals/show.html.erb | 2 +- .../legislation/proposals/hide.js.erb | 3 +++ config/routes/moderation.rb | 6 +++++ .../moderation/legislation_proposals_spec.rb | 27 +++++++++++++++++++ 9 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/moderator_legislation_proposals.js create mode 100644 app/controllers/moderation/legislation/proposals_controller.rb create mode 100644 app/views/moderation/legislation/proposals/hide.js.erb create mode 100644 spec/features/moderation/legislation_proposals_spec.rb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 1fbde90cb..5ca18f609 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -35,6 +35,7 @@ //= require moderator_proposals //= require moderator_budget_investments //= require moderator_proposal_notifications +//= require moderator_legislation_proposals //= require prevent_double_submission //= require gettext //= require annotator diff --git a/app/assets/javascripts/moderator_legislation_proposals.js b/app/assets/javascripts/moderator_legislation_proposals.js new file mode 100644 index 000000000..f03fa4813 --- /dev/null +++ b/app/assets/javascripts/moderator_legislation_proposals.js @@ -0,0 +1,12 @@ +(function() { + "use strict"; + App.ModeratorLegislationProposals = { + add_class_faded: function(id) { + $("#" + id).addClass("faded"); + $("#comments").addClass("faded"); + }, + hide_moderator_actions: function(id) { + $("#" + id + " .js-moderator-proposals-actions:first").hide(); + } + }; +}).call(this); diff --git a/app/controllers/concerns/polymorphic.rb b/app/controllers/concerns/polymorphic.rb index 076a43076..d69ca25f9 100644 --- a/app/controllers/concerns/polymorphic.rb +++ b/app/controllers/concerns/polymorphic.rb @@ -5,6 +5,8 @@ module Polymorphic def resource if resource_model.to_s == "Budget::Investment" @resource ||= instance_variable_get("@investment") + elsif resource_model.to_s == "Legislation::Proposal" + @resource ||= instance_variable_get("@proposal") else @resource ||= instance_variable_get("@#{resource_name}") end diff --git a/app/controllers/moderation/legislation/proposals_controller.rb b/app/controllers/moderation/legislation/proposals_controller.rb new file mode 100644 index 000000000..885c508e0 --- /dev/null +++ b/app/controllers/moderation/legislation/proposals_controller.rb @@ -0,0 +1,19 @@ +class Moderation::Legislation::ProposalsController < Moderation::BaseController + include ModerateActions + include FeatureFlags + + has_filters %w[pending_flag_review all with_ignored_flag], only: :index + has_orders %w[flags created_at], only: :index + + feature_flag :legislation + + before_action :load_resources, only: [:index, :moderate] + + load_and_authorize_resource class: "Legislation::Proposal" + + private + + def resource_model + Legislation::Proposal + end +end diff --git a/app/views/legislation/proposals/_actions.html.erb b/app/views/legislation/proposals/_actions.html.erb index 5a02d96ec..91c4afedd 100644 --- a/app/views/legislation/proposals/_actions.html.erb +++ b/app/views/legislation/proposals/_actions.html.erb @@ -1,5 +1,5 @@ <% if can? :hide, proposal %> - <%= link_to t("admin.actions.hide").capitalize, hide_moderation_proposal_path(proposal), + <%= link_to t("admin.actions.hide").capitalize, hide_moderation_legislation_proposal_path(proposal), method: :put, remote: true, data: { confirm: t("admin.actions.confirm") } %> <% end %> diff --git a/app/views/legislation/proposals/show.html.erb b/app/views/legislation/proposals/show.html.erb index 3c93d82e5..d6f44c592 100644 --- a/app/views/legislation/proposals/show.html.erb +++ b/app/views/legislation/proposals/show.html.erb @@ -92,7 +92,7 @@ <%= render "shared/geozone", geozonable: @proposal %>
- <%= render "proposals/actions", proposal: @proposal %> + <%= render "legislation/proposals/actions", proposal: @proposal %>
diff --git a/app/views/moderation/legislation/proposals/hide.js.erb b/app/views/moderation/legislation/proposals/hide.js.erb new file mode 100644 index 000000000..2e15a703e --- /dev/null +++ b/app/views/moderation/legislation/proposals/hide.js.erb @@ -0,0 +1,3 @@ +var proposal_id = "<%= dom_id(@proposal) %>"; +App.ModeratorLegislationProposals.add_class_faded(proposal_id); +App.ModeratorLegislationProposals.hide_moderator_actions(proposal_id); diff --git a/config/routes/moderation.rb b/config/routes/moderation.rb index b8b77d4a0..83984badd 100644 --- a/config/routes/moderation.rb +++ b/config/routes/moderation.rb @@ -18,6 +18,12 @@ namespace :moderation do put :moderate, on: :collection end + namespace :legislation do + resources :proposals, only: :index do + put :hide, on: :member + put :moderate, on: :collection + end + end resources :comments, only: :index do put :hide, on: :member put :moderate, on: :collection diff --git a/spec/features/moderation/legislation_proposals_spec.rb b/spec/features/moderation/legislation_proposals_spec.rb new file mode 100644 index 000000000..18404b697 --- /dev/null +++ b/spec/features/moderation/legislation_proposals_spec.rb @@ -0,0 +1,27 @@ +require "rails_helper" + +describe "Moderate legislation proposals" do + + scenario "Hide", :js do + citizen = create(:user) + legislation_process = create(:legislation_process) + legislation_proposal = create(:legislation_proposal, legislation_process_id: legislation_process.id) + moderator = create(:moderator) + + login_as(moderator.user) + visit legislation_process_proposal_path(legislation_process, legislation_proposal) + + within("#legislation_proposal_#{legislation_proposal.id}") do + accept_confirm { click_link "Hide" } + end + + expect(page).to have_css("#legislation_proposal_#{legislation_proposal.id}.faded") + + logout + login_as(citizen) + visit legislation_process_proposals_path(legislation_process) + + expect(page).to have_css(".proposal-content", count: 0) + expect(page).not_to have_link("Hide") + end +end