From dcb24cf06c122ee475d5e99e39c6dd454b064a7a Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 30 Jan 2015 12:49:00 +1100 Subject: [PATCH] Controller method to allow enterprise users to search for other users which share management of their enterprises --- .../admin/search_controller_decorator.rb | 19 ++++++++++ .../spree/admin/search_controller_spec.rb | 35 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 app/controllers/spree/admin/search_controller_decorator.rb create mode 100644 spec/controllers/spree/admin/search_controller_spec.rb diff --git a/app/controllers/spree/admin/search_controller_decorator.rb b/app/controllers/spree/admin/search_controller_decorator.rb new file mode 100644 index 0000000000..13fb62d467 --- /dev/null +++ b/app/controllers/spree/admin/search_controller_decorator.rb @@ -0,0 +1,19 @@ +Spree::Admin::SearchController.class_eval do + def known_users + binding.pry + if exact_match = Spree.user_class.find_by_email(params[:q]) + @users = [exact_match] + else + @users = spree_current_user.known_users.ransack({ + :m => 'or', + :email_start => params[:q], + :ship_address_firstname_start => params[:q], + :ship_address_lastname_start => params[:q], + :bill_address_firstname_start => params[:q], + :bill_address_lastname_start => params[:q] + }).result.limit(10) + end + render :users + + end +end diff --git a/spec/controllers/spree/admin/search_controller_spec.rb b/spec/controllers/spree/admin/search_controller_spec.rb new file mode 100644 index 0000000000..b66ba94888 --- /dev/null +++ b/spec/controllers/spree/admin/search_controller_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Spree::Admin::SearchController do + include AuthenticationWorkflow + context "Distributor Enterprise User" do + let!(:owner) { create_enterprise_user( email: "test1@email.com" ) } + let!(:manager) { create_enterprise_user( email: "test2@email.com" ) } + let!(:random) { create_enterprise_user( email: "test3@email.com" ) } + let!(:enterprise) { create(:enterprise, owner: owner, users: [owner, manager]) } + before { login_as_enterprise_user [enterprise] } + + describe 'searching for known users' do + describe "when search query is not an exact match" do + before do + spree_get :known_users, q: "test" + end + + it "returns a list of users that I share management of enteprises with" do + expect(assigns(:users)).to include owner, manager + expect(assigns(:users)).to_not include random + end + end + + describe "when search query exactly matches the email of a user in the system" do + before do + spree_get :known_users, q: "test3@email.com" + end + + it "returns that user, regardless of the relationship between the two users" do + expect(assigns(:users)).to eq [random] + end + end + end + end +end