diff --git a/decidim-admin/app/controllers/concerns/decidim/admin/verification_conflicts/filterable.rb b/decidim-admin/app/controllers/concerns/decidim/admin/verification_conflicts/filterable.rb new file mode 100644 index 0000000000000..cb2937b676a8a --- /dev/null +++ b/decidim-admin/app/controllers/concerns/decidim/admin/verification_conflicts/filterable.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require "active_support/concern" + +module Decidim + module Admin + module VerificationConflicts + module Filterable + extend ActiveSupport::Concern + + included do + include Decidim::Admin::Filterable + + private + + def base_query + collection + end + + def search_field_predicate + :current_user_name_or_current_user_nickname_or_current_user_email_cont + end + + def filters + [] + end + end + end + end + end +end diff --git a/decidim-admin/app/controllers/decidim/admin/conflicts_controller.rb b/decidim-admin/app/controllers/decidim/admin/conflicts_controller.rb index a3c7881737bfc..5533813993cfa 100644 --- a/decidim-admin/app/controllers/decidim/admin/conflicts_controller.rb +++ b/decidim-admin/app/controllers/decidim/admin/conflicts_controller.rb @@ -3,18 +3,16 @@ module Decidim module Admin class ConflictsController < Decidim::Admin::ApplicationController + include Decidim::Admin::VerificationConflicts::Filterable + layout "decidim/admin/users" - helper_method :context_breadcrumb_items + helper_method :context_breadcrumb_items, :conflicts add_breadcrumb_item_from_menu :impersonate_menu def index enforce_permission_to :index, :impersonatable_user - - @conflicts = Decidim::Verifications::Conflict.joins(:current_user).where( - decidim_users: { decidim_organization_id: current_organization.id } - ) end def edit @@ -66,6 +64,16 @@ def impersonations_breadcrumb_item url: decidim_admin.impersonatable_users_path } end + + def collection + @collection ||= Decidim::Verifications::Conflict.joins(:current_user).where( + decidim_users: { decidim_organization_id: current_organization.id } + ) + end + + def conflicts + @conflicts ||= filtered_collection.order(created_at: :desc) + end end end end diff --git a/decidim-admin/app/views/decidim/admin/conflicts/index.html.erb b/decidim-admin/app/views/decidim/admin/conflicts/index.html.erb index ac81afc7dfcd1..16117766de80e 100644 --- a/decidim-admin/app/views/decidim/admin/conflicts/index.html.erb +++ b/decidim-admin/app/views/decidim/admin/conflicts/index.html.erb @@ -1,10 +1,32 @@ <% add_decidim_page_title(t("title", scope: "decidim.admin.conflicts")) %> -
-
-

- <%= t("title", scope: "decidim.admin.conflicts") %> -

+
+

+ <%= t("title", scope: "decidim.admin.conflicts") %> +

+
+ +
+ +
+ +
@@ -17,7 +39,7 @@ - <% @conflicts.each do |conflict| %> + <% conflicts.each do |conflict| %> @@ -30,3 +52,4 @@
<%= conflict.current_user.name %> <%= conflict.managed_user.name %>
+<%= decidim_paginate conflicts %> diff --git a/decidim-admin/config/locales/en.yml b/decidim-admin/config/locales/en.yml index b0cf812736638..8644aca3caaef 100644 --- a/decidim-admin/config/locales/en.yml +++ b/decidim-admin/config/locales/en.yml @@ -351,6 +351,8 @@ en: conflicts: attempts: Attempts 'false': 'No' + index: + text: Search by current user email, name or nickname. managed_user_name: Managed User solved: Solved title: Verification conflicts diff --git a/decidim-admin/spec/system/admin_checks_conflicts_spec.rb b/decidim-admin/spec/system/admin_checks_conflicts_spec.rb new file mode 100644 index 0000000000000..461bbf1e62a5c --- /dev/null +++ b/decidim-admin/spec/system/admin_checks_conflicts_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe "Admin checks conflicts" do + let(:organization) { create(:organization) } + let(:resource_controller) { Decidim::Admin::ConflictsController } + + let!(:user) { create(:user, :admin, :confirmed, organization:) } + let!(:first_conflictive_user) { create(:user, :admin, :confirmed, organization:) } + let!(:second_conflictive_user) { create(:user, :admin, :confirmed, organization:) } + + let!(:first_user_conflicts) { create_list(:conflict, 15, current_user: first_conflictive_user) } + let!(:second_user_conflicts) { create_list(:conflict, 15, current_user: second_conflictive_user) } + + before do + switch_to_host(organization.host) + login_as user, scope: :user + visit decidim_admin.root_path + click_on "Participants" + click_on "Verification conflicts" + end + + include_context "with filterable context" + + context "when listing conflicts" do + before { visit current_path } + + it_behaves_like "paginating a collection" do + let!(:collection) { create_list(:conflict, 50, current_user: first_conflictive_user) } + end + end + + context "when searching by current user name, nickname or email" do + before { visit current_path } + + it "can be searched by name" do + search_by_text(first_conflictive_user.name) + + expect(page).to have_content(first_conflictive_user.name) + expect(page).to have_no_content(second_conflictive_user.name) + end + + it "can be searched by nickname" do + search_by_text(first_conflictive_user.nickname) + + expect(page).to have_content(first_conflictive_user.name) + expect(page).to have_no_content(second_conflictive_user.name) + end + + it "can be searched by email" do + search_by_text(first_conflictive_user.email) + + expect(page).to have_content(first_conflictive_user.name) + expect(page).to have_no_content(second_conflictive_user.name) + end + end +end