Commit 967cac32b6f332384dd124773a7a4408d798d014

Authored by JoenioCosta
1 parent 37fbb823

ActionItem194: fixed criteria used to list or not articles in 'recent documents'

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1667 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/models/article.rb
@@ -19,7 +19,11 @@ class Article < ActiveRecord::Base @@ -19,7 +19,11 @@ class Article < ActiveRecord::Base
19 acts_as_versioned 19 acts_as_versioned
20 20
21 acts_as_searchable :fields => [ :name, :abstract, :body, :tag_list ] 21 acts_as_searchable :fields => [ :name, :abstract, :body, :tag_list ]
22 - 22 +
  23 + before_update do |article|
  24 + article.advertise = true
  25 + end
  26 +
23 # retrieves all articles belonging to the given +profile+ that are not 27 # retrieves all articles belonging to the given +profile+ that are not
24 # sub-articles of any other article. 28 # sub-articles of any other article.
25 def self.top_level_for(profile) 29 def self.top_level_for(profile)
app/models/profile.rb
@@ -260,14 +260,13 @@ class Profile < ActiveRecord::Base @@ -260,14 +260,13 @@ class Profile < ActiveRecord::Base
260 260
261 hacked_after_create :insert_default_homepage_and_feed 261 hacked_after_create :insert_default_homepage_and_feed
262 def insert_default_homepage_and_feed 262 def insert_default_homepage_and_feed
263 - hp = self.articles.build(:name => _("%s's home page") % self.name, :body => _("<p>This is a default homepage created for %s. It can be changed though the control panel.</p>") % self.name) 263 + hp = self.articles.build(:name => _("%s's home page") % self.name, :body => _("<p>This is a default homepage created for %s. It can be changed though the control panel.</p>") % self.name, :advertise => false)
264 hp.save! 264 hp.save!
265 self.home_page = hp 265 self.home_page = hp
266 self.save! 266 self.save!
267 267
268 feed = RssFeed.new(:name => 'feed') 268 feed = RssFeed.new(:name => 'feed')
269 self.articles << feed 269 self.articles << feed
270 - feed.save!  
271 end 270 end
272 271
273 # Adds a person as member of this Profile. 272 # Adds a person as member of this Profile.
app/models/recent_documents_block.rb
@@ -8,14 +8,9 @@ class RecentDocumentsBlock &lt; Block @@ -8,14 +8,9 @@ class RecentDocumentsBlock &lt; Block
8 8
9 include ActionController::UrlWriter 9 include ActionController::UrlWriter
10 def content 10 def content
11 - docs =  
12 - if self.limit.nil?  
13 - owner.recent_documents  
14 - else  
15 - owner.recent_documents(self.limit)  
16 - end 11 + docs = self.limit.nil? ? owner.recent_documents : owner.recent_documents(self.limit)
17 12
18 - docs = docs.select{|d| d.kind_of?(TextArticle)} 13 + docs.delete_if{|d| d.kind_of?(Article) and !d.advertise?}
19 14
20 block_title(_('Recent content')) + 15 block_title(_('Recent content')) +
21 content_tag('ul', docs.map {|item| content_tag('li', link_to(item.title, item.url))}.join("\n")) 16 content_tag('ul', docs.map {|item| content_tag('li', link_to(item.title, item.url))}.join("\n"))
app/models/rss_feed.rb
1 class RssFeed < Article 1 class RssFeed < Article
2 2
  3 + # i dont know why before filter dont work here
  4 + def initialize(*args)
  5 + super(*args)
  6 + self.advertise = false
  7 + end
  8 +
3 # store setting in body 9 # store setting in body
4 serialize :body, Hash 10 serialize :body, Hash
5 - 11 +
6 def body 12 def body
7 self[:body] ||= {} 13 self[:body] ||= {}
8 end 14 end
db/migrate/007_create_articles.rb
@@ -35,6 +35,10 @@ class CreateArticles &lt; ActiveRecord::Migration @@ -35,6 +35,10 @@ class CreateArticles &lt; ActiveRecord::Migration
35 # attachment_fu data for images 35 # attachment_fu data for images
36 t.column :height, :integer # in pixels 36 t.column :height, :integer # in pixels
37 t.column :width, :integer # in pixels 37 t.column :width, :integer # in pixels
  38 +
  39 + # show in recent content?
  40 + t.column :advertise, :boolean, :default => true
  41 +
38 end 42 end
39 43
40 Article.create_versioned_table 44 Article.create_versioned_table
test/functional/profile_controller_test.rb
@@ -88,4 +88,26 @@ class ProfileControllerTest &lt; Test::Unit::TestCase @@ -88,4 +88,26 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
88 assert_tag :tag => 'a', :content => 'Friends', :attributes => { :href => /profile\/#{person.identifier}\/friends$/ } 88 assert_tag :tag => 'a', :content => 'Friends', :attributes => { :href => /profile\/#{person.identifier}\/friends$/ }
89 end 89 end
90 90
  91 + should 'not show homepage and feed automatically created on recent content' do
  92 + person = create_user('person_1').person
  93 + get :index, :profile => person.identifier
  94 + assert_tag :tag => 'div', :content => 'Recent content', :attributes => { :class => 'block recent-documents-block' }, :child => { :tag => 'ul', :content => '' }
  95 + end
  96 +
  97 + should 'show homepage on recent content after update' do
  98 + person = create_user('person_1').person
  99 + person.home_page.name = 'Changed name'
  100 + assert person.home_page.save!
  101 + get :index, :profile => person.identifier
  102 + assert_tag :tag => 'div', :content => 'Recent content', :attributes => { :class => 'block recent-documents-block' }, :child => { :tag => 'ul', :content => /#{person.home_page.name}/ }
  103 + end
  104 +
  105 + should 'show feed on recent content after update' do
  106 + person = create_user('person_1').person
  107 + person.articles.find_by_path('feed').name = 'Changed name'
  108 + assert person.articles.find_by_path('feed').save!
  109 + get :index, :profile => person.identifier
  110 + assert_tag :tag => 'div', :content => 'Recent content', :attributes => { :class => 'block recent-documents-block' }, :child => { :tag => 'ul', :content => /#{person.articles.find_by_path('feed').name}/ }
  111 + end
  112 +
91 end 113 end
test/unit/profile_test.rb
@@ -410,6 +410,28 @@ class ProfileTest &lt; Test::Unit::TestCase @@ -410,6 +410,28 @@ class ProfileTest &lt; Test::Unit::TestCase
410 assert_equal [p3,p2], Profile.recent(2) 410 assert_equal [p3,p2], Profile.recent(2)
411 end 411 end
412 412
  413 + should 'advertise false to homepage and feed on creation' do
  414 + profile = Profile.create!(:name => 'my test profile', :identifier => 'mytestprofile')
  415 + assert !profile.home_page.advertise?
  416 + assert !profile.articles.find_by_path('feed').advertise?
  417 + end
  418 +
  419 + should 'advertise true to homepage after update' do
  420 + profile = Profile.create!(:name => 'my test profile', :identifier => 'mytestprofile')
  421 + assert !profile.home_page.advertise?
  422 + profile.home_page.name = 'Changed name'
  423 + assert profile.home_page.save!
  424 + assert profile.home_page.advertise?
  425 + end
  426 +
  427 + should 'advertise true to feed after update' do
  428 + profile = Profile.create!(:name => 'my test profile', :identifier => 'mytestprofile')
  429 + assert !profile.articles.find_by_path('feed').advertise?
  430 + profile.articles.find_by_path('feed').name = 'Changed name'
  431 + assert profile.articles.find_by_path('feed').save!
  432 + assert profile.articles.find_by_path('feed').advertise?
  433 + end
  434 +
413 private 435 private
414 436
415 def assert_invalid_identifier(id) 437 def assert_invalid_identifier(id)
@@ -417,4 +439,5 @@ class ProfileTest &lt; Test::Unit::TestCase @@ -417,4 +439,5 @@ class ProfileTest &lt; Test::Unit::TestCase
417 assert !profile.valid? 439 assert !profile.valid?
418 assert profile.errors.invalid?(:identifier) 440 assert profile.errors.invalid?(:identifier)
419 end 441 end
  442 +
420 end 443 end
test/unit/recent_documents_block_test.rb
@@ -40,14 +40,19 @@ class RecentDocumentsBlockTest &lt; Test::Unit::TestCase @@ -40,14 +40,19 @@ class RecentDocumentsBlockTest &lt; Test::Unit::TestCase
40 assert_no_match /href=.*\/testinguser\/first/, output 40 assert_no_match /href=.*\/testinguser\/first/, output
41 end 41 end
42 42
43 - should 'not list rss feed articles' do  
44 - profile.articles << RssFeed.create(:name => 'sixth')  
45 - profile.save!  
46 - 43 + should 'not list rss feed articles automatically created' do
  44 + assert_equal 'feed', profile.articles.find_by_path('feed').name
47 output = block.content 45 output = block.content
  46 + assert_match /href=.*\/testinguser\/first/, output
  47 + assert_no_match /href=.*\/testinguser\/feed/, output
  48 + end
48 49
  50 + should 'list rss feed articles after update' do
  51 + profile.articles.find_by_path('feed').name = 'chaged name'
  52 + assert profile.articles.find_by_path('feed').save!
  53 + output = block.content
49 assert_match /href=.*\/testinguser\/first/, output 54 assert_match /href=.*\/testinguser\/first/, output
50 - assert_no_match /href=.*\/testinguser\/sixth/, output 55 + assert_match /href=.*\/testinguser\/feed/, output
51 end 56 end
52 57
53 end 58 end
test/unit/rss_feed_test.rb
@@ -201,4 +201,10 @@ class RssFeedTest &lt; Test::Unit::TestCase @@ -201,4 +201,10 @@ class RssFeedTest &lt; Test::Unit::TestCase
201 assert_equal 'rss-feed', RssFeed.new.icon_name 201 assert_equal 'rss-feed', RssFeed.new.icon_name
202 end 202 end
203 203
  204 + should 'advertise is false before create' do
  205 + profile = create_user('testuser').person
  206 + feed = RssFeed.create!(:name => 'testfeed', :profile => profile)
  207 + assert !feed.advertise?
  208 + end
  209 +
204 end 210 end