From a8874f5fb7e338fc3a77f430273f73ecd41e4c16 Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Sat, 25 Dec 2021 09:05:14 +0000 Subject: [PATCH] Demonstrate (and ensure) custom search --- .../admin/log_entries_controller.rb | 26 +++++++++++++++ .../spec/features/log_search_spec.rb | 32 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 spec/example_app/spec/features/log_search_spec.rb diff --git a/spec/example_app/app/controllers/admin/log_entries_controller.rb b/spec/example_app/app/controllers/admin/log_entries_controller.rb index 6d3c6ac5f0..ef95094213 100644 --- a/spec/example_app/app/controllers/admin/log_entries_controller.rb +++ b/spec/example_app/app/controllers/admin/log_entries_controller.rb @@ -1,4 +1,30 @@ module Admin class LogEntriesController < Admin::ApplicationController + def filter_resources(resources, search_term:) + return resources if search_term.blank? + + customer_ids = Customer.where( + [ + "name ILIKE ?", + "%#{search_term}%", + ], + ).pluck(:id) + order_ids = Order.joins(:customer).where( + [ + "customers.name ILIKE ?", + "%#{search_term}%", + ], + ).pluck(:id) + + customers_filter = resources.where( + logeable_type: "Customer", + logeable_id: customer_ids, + ) + orders_filter = resources.where( + logeable_type: "Order", + logeable_id: order_ids, + ) + customers_filter.or(orders_filter) + end end end diff --git a/spec/example_app/spec/features/log_search_spec.rb b/spec/example_app/spec/features/log_search_spec.rb new file mode 100644 index 0000000000..ef8becd7b3 --- /dev/null +++ b/spec/example_app/spec/features/log_search_spec.rb @@ -0,0 +1,32 @@ +require "rails_helper" + +RSpec.feature "Log search", type: :feature do + it "filters logs related to a customer name", :js do + c1 = create(:customer, name: "John Petrucci") + c2 = create(:customer, name: "John Myung") + c3 = create(:customer, name: "James LaBrie") + o1a = create(:order, customer: c1) + o2 = create(:order, customer: c2) + o3 = create(:order, customer: c3) + o1b = create(:order, customer: c1) + + [c1, c2, o1a, c3, o2, o3, o1b].each do |record| + create(:log_entry, logeable: record) + end + + visit admin_log_entries_path + expect(page).to have_records_table(rows: 7) + + fill_in :search, with: "John" + submit_search + expect(page).to have_records_table(rows: 5) + end + + def have_records_table(rows:) + have_css("[role=main] table tr[data-url]", count: rows) + end + + def submit_search + page.execute_script("$('.search').submit()") + end +end