From 59c2fdb59636b4d8128f30fae7dd81a60bf85e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Sat, 29 Aug 2015 16:29:55 +0200 Subject: [PATCH] adds search method to Organization --- app/models/organization.rb | 4 ++++ spec/models/organization_spec.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/models/organization.rb b/app/models/organization.rb index 20c74d31c..a4561ba7f 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -28,4 +28,8 @@ class Organization < ActiveRecord::Base (verified_at.blank? || verified_at < rejected_at) end + def self.search(text) + text.present? ? joins(:user).where("users.email = ? OR users.phone_number = ? OR organizations.name ILIKE ?", text, text, "%#{text}%") : none + end + end diff --git a/spec/models/organization_spec.rb b/spec/models/organization_spec.rb index 6fad93d5b..c755413c1 100644 --- a/spec/models/organization_spec.rb +++ b/spec/models/organization_spec.rb @@ -43,4 +43,31 @@ describe Organization do expect(subject.rejected?).to be false end end + + describe "self.search" do + before(:all) {@organization = create(:organization, name: "Watershed", user: create(:user, phone_number: "333"))} + + it "returns no results if search term is empty" do + expect(Organization.search(" ").size).to eq(0) + end + + it "finds fuzzily by name" do + expect(Organization.search("Greenpeace").size).to eq 0 + search = Organization.search("Tershe") + expect(search.size).to eq 1 + expect(search.first).to eq @organization + end + + scenario "finds by users email" do + search = Organization.search(@organization.user.email) + expect(search.size).to eq 1 + expect(search.first).to eq @organization + end + + scenario "finds by users phone number" do + search = Organization.search(@organization.user.phone_number) + expect(search.size).to eq 1 + expect(search.first).to eq @organization + end + end end