Commit d70939498abb44ac6e94700b8df922c000dcab16

Authored by Leandro Santos
2 parents de194b8c a2289792

Merge branch 'display_filter_refactoring'

app/models/article.rb
@@ -487,15 +487,16 @@ class Article < ActiveRecord::Base @@ -487,15 +487,16 @@ class Article < ActiveRecord::Base
487 scope :more_recent, :order => "created_at DESC" 487 scope :more_recent, :order => "created_at DESC"
488 488
489 scope :display_filter, lambda {|user, profile| 489 scope :display_filter, lambda {|user, profile|
490 - user.nil? ?  
491 - {:conditions => ['articles.published = ?', true]} :  
492 - {:conditions => [" articles.published = ? OR  
493 - articles.last_changed_by_id = ? OR  
494 - articles.profile_id = ? OR  
495 - ? OR articles.show_to_followers = ? AND ? ",  
496 - true, user.id, user.id, user.has_permission?(:view_private_content, profile),  
497 - true, user.follows?(profile)]  
498 - } 490 + return published if (user.nil? && profile.public?)
  491 + return [] if user.nil? || (!profile.public? && !user.follows?(profile))
  492 + where(
  493 + [
  494 + "published = ? OR last_changed_by_id = ? OR profile_id = ? OR ?
  495 + OR (show_to_followers = ? AND ?)", true, user.id, user.id,
  496 + user.has_permission?(:view_private_content, profile),
  497 + true, user.follows?(profile)
  498 + ]
  499 + )
499 } 500 }
500 501
501 502
app/models/person.rb
@@ -435,6 +435,7 @@ roles] } @@ -435,6 +435,7 @@ roles] }
435 end 435 end
436 436
437 def follows?(profile) 437 def follows?(profile)
  438 + return false if profile.nil?
438 profile.followed_by?(self) 439 profile.followed_by?(self)
439 end 440 end
440 441
test/unit/article_test.rb
@@ -2018,4 +2018,87 @@ class ArticleTest < ActiveSupport::TestCase @@ -2018,4 +2018,87 @@ class ArticleTest < ActiveSupport::TestCase
2018 assert_equal [a], Article.display_filter(user, p) 2018 assert_equal [a], Article.display_filter(user, p)
2019 end 2019 end
2020 2020
  2021 + should 'display_filter do not show person private content to non friends passing nil as profile parameter' do
  2022 + user = create_user('someuser').person
  2023 + p = fast_create(Person)
  2024 + assert !p.is_a_friend?(user)
  2025 + assert !user.is_admin?
  2026 + Article.delete_all
  2027 + fast_create(Article, :published => false, :profile_id => p.id)
  2028 + assert_equal [], Article.display_filter(user, nil)
  2029 + end
  2030 +
  2031 + should 'display_filter do not show community private content to non members passing nil as profile parameter' do
  2032 + user = create_user('someuser').person
  2033 + p = fast_create(Community)
  2034 + assert !user.is_member_of?(p)
  2035 + Article.delete_all
  2036 + fast_create(Article, :published => false, :profile_id => p.id)
  2037 + assert_equal [], Article.display_filter(user, nil)
  2038 + end
  2039 +
  2040 + should 'display_filter show community public content of private community for user members' do
  2041 + user = create_user('someuser').person
  2042 + p = fast_create(Community, :public_profile => false)
  2043 + p.add_member(user)
  2044 + assert user.is_member_of?(p)
  2045 + user.stubs(:has_permission?).with(:view_private_content, p).returns(false)
  2046 + Article.delete_all
  2047 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2048 + fast_create(Article, :published => false, :profile_id => p.id)
  2049 + fast_create(Article, :published => false, :profile_id => p.id)
  2050 + assert_equal [a], Article.display_filter(user, p)
  2051 + end
  2052 +
  2053 + should 'display_filter not show public content of private community for non members' do
  2054 + user = create_user('someuser').person
  2055 + p = fast_create(Community, :public_profile => false)
  2056 + assert !user.is_member_of?(p)
  2057 + user.stubs(:has_permission?).with(:view_private_content, p).returns(false)
  2058 + Article.delete_all
  2059 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2060 + fast_create(Article, :published => false, :profile_id => p.id)
  2061 + assert_equal [], Article.display_filter(user, p)
  2062 + end
  2063 +
  2064 + should 'display_filter not show public content of private community for non members when user is nil' do
  2065 + p = fast_create(Community, :public_profile => false)
  2066 + Article.delete_all
  2067 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2068 + fast_create(Article, :published => false, :profile_id => p.id)
  2069 + assert_equal [], Article.display_filter(nil, p)
  2070 + end
  2071 +
  2072 + should 'display_filter show person public content of private person profile for user friends' do
  2073 + user = create_user('someuser').person
  2074 + p = fast_create(Person, :public_profile => false)
  2075 + p.add_friend(user)
  2076 + assert p.is_a_friend?(user)
  2077 + user.stubs(:has_permission?).with(:view_private_content, p).returns(false)
  2078 + Article.delete_all
  2079 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2080 + fast_create(Article, :published => false, :profile_id => p.id)
  2081 + fast_create(Article, :published => false, :profile_id => p.id)
  2082 + assert_equal [a], Article.display_filter(user, p)
  2083 + end
  2084 +
  2085 + should 'display_filter not show public content of private person for non friends' do
  2086 + user = create_user('someuser').person
  2087 + p = fast_create(Person, :public_profile => false)
  2088 + assert !user.is_a_friend?(p)
  2089 + user.stubs(:has_permission?).with(:view_private_content, p).returns(false)
  2090 + Article.delete_all
  2091 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2092 + fast_create(Article, :published => false, :profile_id => p.id)
  2093 + assert_equal [], Article.display_filter(user, p)
  2094 + end
  2095 +
  2096 + should 'display_filter not show public content of private person for non friends when user is nil' do
  2097 + p = fast_create(Person, :public_profile => false)
  2098 + Article.delete_all
  2099 + a = fast_create(Article, :published => true, :profile_id => p.id)
  2100 + fast_create(Article, :published => false, :profile_id => p.id)
  2101 + assert_equal [], Article.display_filter(nil, p)
  2102 + end
  2103 +
2021 end 2104 end
test/unit/person_test.rb
@@ -1631,4 +1631,9 @@ class PersonTest < ActiveSupport::TestCase @@ -1631,4 +1631,9 @@ class PersonTest < ActiveSupport::TestCase
1631 assert person.can_change_homepage? 1631 assert person.can_change_homepage?
1632 end 1632 end
1633 1633
  1634 + should 'follow? return false when no profile is passed as parameter' do
  1635 + person = Person.new
  1636 + assert_equal false, person.follows?(nil)
  1637 + end
  1638 +
1634 end 1639 end