From 388ec0d5b6d1549abed15802d6bdbfc8b1c05294 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sun, 9 Apr 2017 08:45:01 -0400 Subject: Search cleanup (#1333) * Clean up SQL output in Tag and Account search methods * Add basic coverage for Tag.search_for * Add coverage for Account.search_for * Add coverage for Account.advanced_search_for --- spec/models/account_spec.rb | 55 +++++++++++++++++++++++++++++++++++++++++++++ spec/models/tag_spec.rb | 11 +++++++++ 2 files changed, 66 insertions(+) (limited to 'spec') diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 93a45459d..0c3b2b042 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -170,6 +170,61 @@ RSpec.describe Account, type: :model do end end + describe '.search_for' do + before do + @match = Fabricate( + :account, + display_name: "Display Name", + username: "username", + domain: "example.com" + ) + _missing = Fabricate( + :account, + display_name: "Missing", + username: "missing", + domain: "missing.com" + ) + end + + it 'finds accounts with matching display_name' do + results = Account.search_for("display") + expect(results).to eq [@match] + end + + it 'finds accounts with matching username' do + results = Account.search_for("username") + expect(results).to eq [@match] + end + + it 'finds accounts with matching domain' do + results = Account.search_for("example") + expect(results).to eq [@match] + end + + it 'ranks multiple matches higher' do + account = Fabricate( + :account, + username: "username", + display_name: "username" + ) + results = Account.search_for("username") + expect(results).to eq [account, @match] + end + end + + describe '.advanced_search_for' do + it 'ranks followed accounts higher' do + account = Fabricate(:account) + match = Fabricate(:account, username: "Matching") + followed_match = Fabricate(:account, username: "Matcher") + Fabricate(:follow, account: account, target_account: followed_match) + + results = Account.advanced_search_for("match", account) + expect(results).to eq [followed_match, match] + expect(results.first.rank).to be > results.last.rank + end + end + describe '.find_local' do before do Fabricate(:account, username: 'Alice') diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 360bbc16d..7a5b8ec89 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -12,4 +12,15 @@ RSpec.describe Tag, type: :model do expect(subject.match('https://en.wikipedia.org/wiki/Ghostbusters_(song)#Lawsuit')).to be_nil end end + + describe '.search_for' do + it 'finds tag records with matching names' do + tag = Fabricate(:tag, name: "match") + _miss_tag = Fabricate(:tag, name: "miss") + + results = Tag.search_for("match") + + expect(results).to eq [tag] + end + end end -- cgit