2015-10-11 05:41:23 -04:00
|
|
|
require 'rails_helper'
|
2013-02-05 14:16:51 -05:00
|
|
|
|
|
|
|
describe SearchController do
|
|
|
|
|
2014-09-02 05:15:08 -04:00
|
|
|
context "integration" do
|
|
|
|
|
|
|
|
before do
|
2016-12-21 21:13:14 -05:00
|
|
|
SearchIndexer.enable
|
2014-09-02 05:15:08 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "can search correctly" do
|
|
|
|
my_post = Fabricate(:post, raw: 'this is my really awesome post')
|
|
|
|
xhr :get, :query, term: 'awesome', include_blurb: true
|
|
|
|
|
2015-01-09 12:04:02 -05:00
|
|
|
expect(response).to be_success
|
2014-09-02 05:15:08 -04:00
|
|
|
data = JSON.parse(response.body)
|
2015-01-09 12:04:02 -05:00
|
|
|
expect(data['posts'][0]['id']).to eq(my_post.id)
|
|
|
|
expect(data['posts'][0]['blurb']).to eq('this is my really awesome post')
|
|
|
|
expect(data['topics'][0]['id']).to eq(my_post.topic_id)
|
2014-09-02 05:15:08 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2013-05-24 14:03:45 -04:00
|
|
|
let(:search_context) { {type: 'user', id: 'eviltrout'} }
|
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
context "basics" do
|
|
|
|
let(:guardian) { Guardian.new }
|
|
|
|
let(:search) { mock() }
|
2013-05-22 14:36:14 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
before do
|
|
|
|
Guardian.stubs(:new).returns(guardian)
|
|
|
|
end
|
2013-05-22 14:36:14 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
it 'performs the query' do
|
|
|
|
Search.expects(:new).with('test', guardian: guardian).returns(search)
|
|
|
|
search.expects(:execute)
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
xhr :get, :query, term: 'test'
|
|
|
|
end
|
2013-05-22 14:36:14 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
it 'performs the query with a filter' do
|
|
|
|
Search.expects(:new).with('test', guardian: guardian, type_filter: 'topic').returns(search)
|
|
|
|
search.expects(:execute)
|
2013-05-22 14:36:14 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
xhr :get, :query, term: 'test', type_filter: 'topic'
|
|
|
|
end
|
2013-02-05 14:16:51 -05:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
it "performs the query and returns results including blurbs" do
|
|
|
|
Search.expects(:new).with('test', guardian: guardian, include_blurbs: true).returns(search)
|
|
|
|
search.expects(:execute)
|
2014-04-11 16:07:39 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
xhr :get, :query, term: 'test', include_blurbs: 'true'
|
|
|
|
end
|
2014-04-11 16:07:39 -04:00
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
it 'performs the query with a filter and passes through search_for_id' do
|
|
|
|
Search.expects(:new).with('test', guardian: guardian, search_for_id: true, type_filter: 'topic').returns(search)
|
|
|
|
search.expects(:execute)
|
|
|
|
|
|
|
|
xhr :get, :query, term: 'test', type_filter: 'topic', search_for_id: true
|
|
|
|
end
|
2014-04-11 16:07:39 -04:00
|
|
|
end
|
|
|
|
|
2014-08-28 15:42:29 -04:00
|
|
|
|
2013-05-24 14:03:45 -04:00
|
|
|
context "search context" do
|
|
|
|
|
|
|
|
it "raises an error with an invalid context type" do
|
2015-01-09 12:04:02 -05:00
|
|
|
expect {
|
2013-05-24 14:03:45 -04:00
|
|
|
xhr :get, :query, term: 'test', search_context: {type: 'security', id: 'hole'}
|
2015-01-09 12:04:02 -05:00
|
|
|
}.to raise_error(Discourse::InvalidParameters)
|
2013-05-24 14:03:45 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "raises an error with a missing id" do
|
2015-01-09 12:04:02 -05:00
|
|
|
expect {
|
2013-05-24 14:03:45 -04:00
|
|
|
xhr :get, :query, term: 'test', search_context: {type: 'user'}
|
2015-01-09 12:04:02 -05:00
|
|
|
}.to raise_error(Discourse::InvalidParameters)
|
2013-05-24 14:03:45 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context "with a user" do
|
|
|
|
|
|
|
|
let(:user) { Fabricate(:user) }
|
|
|
|
|
|
|
|
it "raises an error if the user can't see the context" do
|
|
|
|
Guardian.any_instance.expects(:can_see?).with(user).returns(false)
|
|
|
|
xhr :get, :query, term: 'test', search_context: {type: 'user', id: user.username}
|
2015-01-09 12:04:02 -05:00
|
|
|
expect(response).not_to be_success
|
2013-05-24 14:03:45 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
it 'performs the query with a search context' do
|
|
|
|
guardian = Guardian.new
|
|
|
|
Guardian.stubs(:new).returns(guardian)
|
|
|
|
|
|
|
|
search = mock()
|
|
|
|
Search.expects(:new).with('test', guardian: guardian, search_context: user).returns(search)
|
|
|
|
search.expects(:execute)
|
|
|
|
|
|
|
|
xhr :get, :query, term: 'test', search_context: {type: 'user', id: user.username}
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-02-05 14:16:51 -05:00
|
|
|
end
|