require 'spec_helper' describe "Musician Search API", :type => :api do include Rack::Test::Methods def get_query(query={}) qstr = '' query.each { |kk,vv| qstr += "#{kk}=#{CGI::escape(vv.to_s)}&" } uri = "/api/search.json?#{Search::PARAM_MUSICIAN}=1&#{qstr}" get uri, "CONTENT_TYPE" => 'application/json' end describe "musician search page" do let(:user) { FactoryGirl.create(:user) } before(:each) do 2.downto(1) { FactoryGirl.create(:geocoder) } @users = [] @users << @user1 = FactoryGirl.create(:user) @users << @user2 = FactoryGirl.create(:user) @users << @user3 = FactoryGirl.create(:user) @users << @user4 = FactoryGirl.create(:user) post '/sessions', "session[email]" => user.email, "session[password]" => user.password expect(rack_mock_session.cookie_jar["remember_token"]).to eq(user.remember_token) end it "default search" do get_query good_response expect(json['musicians'].count).to be [Search::M_PER_PAGE, User.musicians.count].min end context 'location filtering' do it "gets no musicians for out of range locations" do get_query({:city => 'San Francisco', :distance => 100}) good_response expect((json['musicians'] || []).count).to be 0 end it "gets musicians for long-distance locations" do get_query({:city => 'Miami', :distance => 1000}) good_response expect(json['musicians'].count).to be >= 1 end end context 'instrument filtering' do it "gets musicians for default instrument" do get_query({:instrument => 'electric guitar'}) good_response expect(json['musicians'].count).to be >= 1 end it "gets no musicians for unused instruments" do get_query({:instrument => 'tuba'}) good_response expect(json['musicians'].count).to eq(0) end end context 'results have expected data' do it "has follower stats " do @user4.followers.concat([@user2, @user3, @user4]) @user3.followers.concat([@user3, @user4]) @user2.followers.concat([@user4]) expect(@user4.followers.count).to be 3 get_query good_response musician = json["musicians"][0] expect(musician["id"]).to eq(@user4.id) followings = musician['followings'] expect(followings.length).to be 3 expect(musician['follow_count'].to_i).to be > 0 end it "has friend stats" do Friendship.save(@user1.id, @user2.id) get_query good_response friend = json['musicians'].detect { |mm| mm['id'] == @user1.id } expect(friend['friend_count']).to be 1 end end end end