125 lines
3.3 KiB
Ruby
125 lines
3.3 KiB
Ruby
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
|
|
f1 = Follow.new
|
|
f1.user = @user2
|
|
f1.followable = @user4
|
|
f1.save
|
|
|
|
f2 = Follow.new
|
|
f2.user = @user3
|
|
f2.followable = @user4
|
|
f2.save
|
|
|
|
f3 = Follow.new
|
|
f3.user = @user4
|
|
f3.followable = @user4
|
|
f3.save
|
|
|
|
# @user3
|
|
f4 = Follow.new
|
|
f4.user = @user3
|
|
f4.followable = @user3
|
|
f4.save
|
|
|
|
f5 = Follow.new
|
|
f5.user = @user4
|
|
f5.followable = @user3
|
|
f5.save
|
|
|
|
# @user2
|
|
f6 = Follow.new
|
|
f6.user = @user1
|
|
f6.followable = @user2
|
|
f6.save
|
|
|
|
# @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
|