vrfs-774: first musician searches working properly
This commit is contained in:
parent
fe5dc2c6ab
commit
5d4ab42906
|
|
@ -5,10 +5,10 @@ module JamRuby
|
|||
|
||||
LIMIT = 10
|
||||
|
||||
ORDER_LIKED = ['Most Liked', :liked]
|
||||
ORDER_FOLLOWS = ['Most Followed', :followed]
|
||||
ORDER_LIKED = ['Most Liked', :liked]
|
||||
ORDER_PLAYING = ['Playing Now', :playing]
|
||||
ORDERINGS = [ORDER_LIKED, ORDER_FOLLOWS, ORDER_PLAYING]
|
||||
ORDERINGS = [ORDER_FOLLOWS, ORDER_LIKED, ORDER_PLAYING]
|
||||
ORDERING_KEYS = ORDERINGS.collect { |oo| oo[1] }
|
||||
|
||||
def self.order_param(params)
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ module JamRuby
|
|||
devise :database_authenticatable,
|
||||
:recoverable, :rememberable
|
||||
|
||||
# include Geokit::ActsAsMappable::Glue unless defined?(acts_as_mappable)
|
||||
# acts_as_mappable
|
||||
include Geokit::ActsAsMappable::Glue unless defined?(acts_as_mappable)
|
||||
acts_as_mappable
|
||||
|
||||
after_update :check_lat_lng
|
||||
|
||||
|
|
@ -925,12 +925,17 @@ module JamRuby
|
|||
|
||||
case ordering = Search.order_param(params)
|
||||
when :liked
|
||||
rel = rel.order("SELECT COUNT(*) FROM users_likers WHERE users_likers.user_id = ")
|
||||
when :followed
|
||||
rel = rel.select("COUNT(follows) AS fcount, users.id")
|
||||
rel = rel.joins("LEFT JOIN users_followers AS follows ON follows.user_id = users.id")
|
||||
rel = rel.group("users.id")
|
||||
rel = rel.order("COUNT(follows) DESC")
|
||||
when :playing
|
||||
end
|
||||
|
||||
rel.page(params[:page].to_i)
|
||||
perpage = params[:per_page] || 20
|
||||
page = [params[:page].to_i, 1].max
|
||||
rel = rel.paginate(:page => page, :per_page => perpage)
|
||||
rel
|
||||
end
|
||||
|
||||
def self.search(query, options = { :limit => 10 })
|
||||
|
|
|
|||
|
|
@ -15,14 +15,43 @@ describe User do
|
|||
state: "NC",
|
||||
country: "USA"
|
||||
}
|
||||
@user1 = FactoryGirl.create(:user, params)
|
||||
@users = []
|
||||
@users << @user1 = FactoryGirl.create(:user, params)
|
||||
params[:email] = "user2@example.com"
|
||||
@user2 = FactoryGirl.create(:user, params)
|
||||
@users << @user2 = FactoryGirl.create(:user, params)
|
||||
params[:email] = "user3@example.com"
|
||||
@users << @user3 = FactoryGirl.create(:user, params)
|
||||
params[:email] = "user4@example.com"
|
||||
@users << @user4 = FactoryGirl.create(:user, params)
|
||||
end
|
||||
|
||||
it "should find all musicians sorted by likes with pagination" do
|
||||
pending
|
||||
User.musician_search
|
||||
it "should find all musicians sorted by followers with pagination" do
|
||||
# establish sorting order
|
||||
@user4.followers.concat([@user2, @user3, @user4])
|
||||
@user3.followers.concat([@user3, @user4])
|
||||
@user2.followers.concat([@user1])
|
||||
@user4.followers.count.should == 3
|
||||
|
||||
UserFollower.count.should == 6
|
||||
|
||||
# get all the users in correct order
|
||||
params = { :per_page => @users.size }
|
||||
results = User.musician_search(params)
|
||||
results.all.count.should == @users.size
|
||||
|
||||
results.each_with_index do |uu, idx|
|
||||
uu.id.should == @users.reverse[idx].id
|
||||
end
|
||||
|
||||
# refresh the order to ensure it works right
|
||||
@user2.followers.concat([@user3, @user4, @user2])
|
||||
results = User.musician_search(params)
|
||||
results[0].id.should == @user2.id
|
||||
|
||||
# make sure pagination works right
|
||||
params = { :per_page => 2, :page => 1 }
|
||||
results = User.musician_search(params)
|
||||
results.all.count.should == 2
|
||||
end
|
||||
|
||||
it "should find all musicians sorted by follows with pagination" do
|
||||
|
|
|
|||
Loading…
Reference in New Issue