diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index 5fd2224c5..a042f1fae 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -925,6 +925,10 @@ module JamRuby case ordering = Search.order_param(params) when :liked + rel = rel.select("COUNT(likers) AS lcount, users.id") + rel = rel.joins("LEFT JOIN users_likers AS likers ON likers.user_id = users.id") + rel = rel.group("users.id") + rel = rel.order("COUNT(likers) DESC") 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") diff --git a/ruby/spec/jam_ruby/models/musician_search_spec.rb b/ruby/spec/jam_ruby/models/musician_search_spec.rb index 61e9d0285..94d18343d 100644 --- a/ruby/spec/jam_ruby/models/musician_search_spec.rb +++ b/ruby/spec/jam_ruby/models/musician_search_spec.rb @@ -54,8 +54,23 @@ describe User do results.all.count.should == 2 end - it "should find all musicians sorted by follows with pagination" do - pending + it "should find all musicians sorted by likes with pagination" do + # establish sorting order + [@user2, @user3, @user1].each { |uu| User.create_user_like(@user4.id, uu.id) } + [@user2, @user4].each { |uu| User.create_user_like(@user3.id, uu.id) } + [@user2].each { |uu| User.create_user_like(@user2.id, uu.id) } + + # get all the users in correct order + params = { :per_page => @users.size, :orderby => :liked } + 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 + [@user3, @user4, @user1].each { |uu| User.create_user_like(@user2.id, uu.id) } + results = User.musician_search(params) + results[0].id.should == @user2.id end it "should find all musicians sorted by now playing" do