diff --git a/app/models/article.rb b/app/models/article.rb index dd1ee55..5a3e3ad 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -487,15 +487,16 @@ class Article < ActiveRecord::Base scope :more_recent, :order => "created_at DESC" scope :display_filter, lambda {|user, profile| - user.nil? ? - {:conditions => ['articles.published = ?', true]} : - {:conditions => [" articles.published = ? OR - articles.last_changed_by_id = ? OR - articles.profile_id = ? OR - ? OR articles.show_to_followers = ? AND ? ", - true, user.id, user.id, user.has_permission?(:view_private_content, profile), - true, user.follows?(profile)] - } + return published if (user.nil? && profile.public?) + return [] if user.nil? || (!profile.public? && !user.follows?(profile)) + where( + [ + "published = ? OR last_changed_by_id = ? OR profile_id = ? OR ? + OR (show_to_followers = ? AND ?)", true, user.id, user.id, + user.has_permission?(:view_private_content, profile), + true, user.follows?(profile) + ] + ) } diff --git a/test/unit/article_test.rb b/test/unit/article_test.rb index 3393f85..ccc1e3d 100644 --- a/test/unit/article_test.rb +++ b/test/unit/article_test.rb @@ -2018,4 +2018,72 @@ class ArticleTest < ActiveSupport::TestCase assert_equal [a], Article.display_filter(user, p) end + should 'display_filter show community public content of private community for user members' do + user = create_user('someuser').person + p = fast_create(Community, :public_profile => false) + p.add_member(user) + assert user.is_member_of?(p) + user.stubs(:has_permission?).with(:view_private_content, p).returns(false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [a], Article.display_filter(user, p) + end + + should 'display_filter not show public content of private community for non members' do + user = create_user('someuser').person + p = fast_create(Community, :public_profile => false) + assert !user.is_member_of?(p) + user.stubs(:has_permission?).with(:view_private_content, p).returns(false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [], Article.display_filter(user, p) + end + + should 'display_filter not show public content of private community for non members when user is nil' do + p = fast_create(Community, :public_profile => false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [], Article.display_filter(nil, p) + end + + should 'display_filter show person public content of private person profile for user friends' do + user = create_user('someuser').person + p = fast_create(Person, :public_profile => false) + p.add_friend(user) + assert p.is_a_friend?(user) + user.stubs(:has_permission?).with(:view_private_content, p).returns(false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [a], Article.display_filter(user, p) + end + + should 'display_filter not show public content of private person for non friends' do + user = create_user('someuser').person + p = fast_create(Person, :public_profile => false) + assert !user.is_a_friend?(p) + user.stubs(:has_permission?).with(:view_private_content, p).returns(false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [], Article.display_filter(user, p) + end + + should 'display_filter not show public content of private person for non friends when user is nil' do + p = fast_create(Person, :public_profile => false) + Article.delete_all + a = fast_create(Article, :published => true, :profile_id => p.id) + fast_create(Article, :published => false, :profile_id => p.id) + assert_equal [], Article.display_filter(nil, p) + end + + + + + end -- libgit2 0.21.2