From 72785a69cb5fb865c70a0fb11a2acfe6465809d9 Mon Sep 17 00:00:00 2001 From: Raphael <raphael@joindiaspora.com> Date: Mon, 17 Jan 2011 12:21:38 -0800 Subject: [PATCH] Correct ordering problem in posts_from --- lib/diaspora/user/querying.rb | 7 +++---- spec/models/user/querying_spec.rb | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/diaspora/user/querying.rb b/lib/diaspora/user/querying.rb index e3d5b06a9e..337afe6e6e 100644 --- a/lib/diaspora/user/querying.rb +++ b/lib/diaspora/user/querying.rb @@ -70,10 +70,9 @@ module Diaspora end def posts_from(person) - public_posts = person.posts.where(:public => true) - directed_posts = raw_visible_posts.where(:person_id => person.id) - posts = public_posts | directed_posts - posts.sort!{|p1,p2| p1.created_at <=> p2.created_at } + asp = Aspect.arel_table + p = Post.arel_table + Post.joins(:aspects).where( p[:public].eq(true).or(asp[:user_id].eq(self.id))).order("updated_at DESC") end end end diff --git a/spec/models/user/querying_spec.rb b/spec/models/user/querying_spec.rb index 95150482d2..875b2963a9 100644 --- a/spec/models/user/querying_spec.rb +++ b/spec/models/user/querying_spec.rb @@ -213,12 +213,11 @@ describe User do describe '#posts_from' do before do + @user3 = Factory(:user) + @aspect3 = @user3.aspects.create(:name => "bros") - @user3 = Factory(:user) - @aspect3 = @user3.aspects.create(:name => "bros") - - @public_message = @user3.post(:status_message, :message => "hey there", :to => 'all', :public => true) - @private_message = @user3.post(:status_message, :message => "hey there", :to => @aspect3.id) + @public_message = @user3.post(:status_message, :message => "hey there", :to => 'all', :public => true) + @private_message = @user3.post(:status_message, :message => "hey there", :to => @aspect3.id) end it 'displays public posts for a non-contact' do @@ -238,5 +237,16 @@ describe User do @user.posts_from(@user3.person).should include @public_message @user.posts_from(@user3.person).should include new_message end + + it 'displays recent posts first' do + msg3 = @user3.post(:status_message, :message => "hey there", :to => 'all', :public => true) + msg4 = @user3.post(:status_message, :message => "hey there", :to => 'all', :public => true) + msg3.updated_at = Time.now+10 + msg3.save! + msg4.updated_at = Time.now+14 + msg4.save! + + @user.posts_from(@user3.person).map{|p| p.id}.should == [msg4, msg3, @public_message].map{|p| p.id} + end end end -- GitLab