diff --git a/app/models/user.rb b/app/models/user.rb index 22af43d39..a3a71a297 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,7 +51,16 @@ class User self.save post - end ######### Posts and Such ############### + end + + def posts_for( opts = {} ) + if opts[:group] + group = self.groups.find_by_id( opts[:group].id ) + self.posts.find_all_by_person_id( group.person_ids ) + end + end + + ######### Posts and Such ############### def retract( post ) retraction = Retraction.for(post) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 621e0ad5d..805464409 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -371,6 +371,39 @@ describe User do Post.count.should be 1 end + describe 'group streams' do + before do + @group = @user.group(:name => 'heroes') + @group2 = @user.group(:name => 'stuff') + @user2 = Factory.create :user + @user.activate_friend(@user2.person, @group) + + @user3 = Factory.create :user + @user.activate_friend(@user3.person, @group2) + + @user4 = Factory.create :user + @user.activate_friend(@user4.person, @group2) + end + + it 'should generate a valid stream for a group of people' do + status_message1 = @user2.post :status_message, :message => "hi" + status_message2 = @user3.post :status_message, :message => "heyyyy" + status_message3 = @user4.post :status_message, :message => "yooo" + + @user.receive status_message1.to_diaspora_xml + @user.receive status_message2.to_diaspora_xml + @user.receive status_message3.to_diaspora_xml + @user.reload + + @user.posts_for(:group => @group).include?(status_message1).should be true + @user.posts_for(:group => @group).include?(status_message2).should be false + @user.posts_for(:group => @group).include?(status_message3).should be false + + @user.posts_for(:group => @group2).include?(status_message1).should be false + @user.posts_for(:group => @group2).include?(status_message2).should be true + @user.posts_for(:group => @group2).include?(status_message3).should be true + end + end end end