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 19 acts_as_versioned
20 20  
21 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 27 # retrieves all articles belonging to the given +profile+ that are not
24 28 # sub-articles of any other article.
25 29 def self.top_level_for(profile)
... ...
app/models/profile.rb
... ... @@ -260,14 +260,13 @@ class Profile < ActiveRecord::Base
260 260  
261 261 hacked_after_create :insert_default_homepage_and_feed
262 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 264 hp.save!
265 265 self.home_page = hp
266 266 self.save!
267 267  
268 268 feed = RssFeed.new(:name => 'feed')
269 269 self.articles << feed
270   - feed.save!
271 270 end
272 271  
273 272 # Adds a person as member of this Profile.
... ...
app/models/recent_documents_block.rb
... ... @@ -8,14 +8,9 @@ class RecentDocumentsBlock &lt; Block
8 8  
9 9 include ActionController::UrlWriter
10 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 15 block_title(_('Recent content')) +
21 16 content_tag('ul', docs.map {|item| content_tag('li', link_to(item.title, item.url))}.join("\n"))
... ...
app/models/rss_feed.rb
1 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 9 # store setting in body
4 10 serialize :body, Hash
5   -
  11 +
6 12 def body
7 13 self[:body] ||= {}
8 14 end
... ...
db/migrate/007_create_articles.rb
... ... @@ -35,6 +35,10 @@ class CreateArticles &lt; ActiveRecord::Migration
35 35 # attachment_fu data for images
36 36 t.column :height, :integer # in pixels
37 37 t.column :width, :integer # in pixels
  38 +
  39 + # show in recent content?
  40 + t.column :advertise, :boolean, :default => true
  41 +
38 42 end
39 43  
40 44 Article.create_versioned_table
... ...
test/functional/profile_controller_test.rb
... ... @@ -88,4 +88,26 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
88 88 assert_tag :tag => 'a', :content => 'Friends', :attributes => { :href => /profile\/#{person.identifier}\/friends$/ }
89 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 113 end
... ...
test/unit/profile_test.rb
... ... @@ -410,6 +410,28 @@ class ProfileTest &lt; Test::Unit::TestCase
410 410 assert_equal [p3,p2], Profile.recent(2)
411 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 435 private
414 436  
415 437 def assert_invalid_identifier(id)
... ... @@ -417,4 +439,5 @@ class ProfileTest &lt; Test::Unit::TestCase
417 439 assert !profile.valid?
418 440 assert profile.errors.invalid?(:identifier)
419 441 end
  442 +
420 443 end
... ...
test/unit/recent_documents_block_test.rb
... ... @@ -40,14 +40,19 @@ class RecentDocumentsBlockTest &lt; Test::Unit::TestCase
40 40 assert_no_match /href=.*\/testinguser\/first/, output
41 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 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 54 assert_match /href=.*\/testinguser\/first/, output
50   - assert_no_match /href=.*\/testinguser\/sixth/, output
  55 + assert_match /href=.*\/testinguser\/feed/, output
51 56 end
52 57  
53 58 end
... ...
test/unit/rss_feed_test.rb
... ... @@ -201,4 +201,10 @@ class RssFeedTest &lt; Test::Unit::TestCase
201 201 assert_equal 'rss-feed', RssFeed.new.icon_name
202 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 210 end
... ...