Commit 5b9232378ea22313997d4a22626c17226da12f90

Authored by Michel Felipe
1 parent 4edfee6d

Avoid count hits and add comments in archived articles. Added to new unit tests and translated msg

app/controllers/my_profile/cms_controller.rb
@@ -99,7 +99,6 @@ class CmsController < MyProfileController @@ -99,7 +99,6 @@ class CmsController < MyProfileController
99 @article.image.save! 99 @article.image.save!
100 end 100 end
101 @article.last_changed_by = user 101 @article.last_changed_by = user
102 - @article.old_parent_id = @article.parent_id  
103 if @article.update_attributes(params[:article]) 102 if @article.update_attributes(params[:article])
104 if !continue 103 if !continue
105 if @article.content_type.nil? || @article.image? 104 if @article.content_type.nil? || @article.image?
app/models/article.rb
@@ -638,13 +638,21 @@ class Article < ActiveRecord::Base @@ -638,13 +638,21 @@ class Article < ActiveRecord::Base
638 end 638 end
639 639
640 def hit 640 def hit
641 - self.class.connection.execute('update articles set hits = hits + 1 where id = %d' % self.id.to_i)  
642 - self.hits += 1 641 + if !archived?
  642 + self.class.connection.execute('update articles set hits = hits + 1 where id = %d' % self.id.to_i)
  643 + self.hits += 1
  644 + end
643 end 645 end
644 646
645 def self.hit(articles) 647 def self.hit(articles)
646 - Article.where(:id => articles.map(&:id)).update_all('hits = hits + 1')  
647 - articles.each { |a| a.hits += 1 } 648 + ids = []
  649 + articles.each do |article|
  650 + if !article.archived?
  651 + ids << article.id
  652 + article.hits += 1
  653 + end
  654 + end
  655 + Article.where(:id => ids).update_all('hits = hits + 1') if !ids.empty?
648 end 656 end
649 657
650 def can_display_hits? 658 def can_display_hits?
@@ -851,7 +859,7 @@ class Article &lt; ActiveRecord::Base @@ -851,7 +859,7 @@ class Article &lt; ActiveRecord::Base
851 end 859 end
852 860
853 def parent_archived? 861 def parent_archived?
854 - if (self.old_parent_id != self.parent_id) && self.parent && self.parent.archived? 862 + if self.parent_id_changed? && self.parent && self.parent.archived?
855 errors.add(:parent_folder, N_('is archived!!')) 863 errors.add(:parent_folder, N_('is archived!!'))
856 end 864 end
857 end 865 end
app/models/comment.rb
@@ -35,6 +35,8 @@ class Comment &lt; ActiveRecord::Base @@ -35,6 +35,8 @@ class Comment &lt; ActiveRecord::Base
35 end 35 end
36 end 36 end
37 37
  38 + validate :article_archived?
  39 +
38 acts_as_having_settings 40 acts_as_having_settings
39 41
40 xss_terminate :only => [ :body, :title, :name ], :on => 'validation' 42 xss_terminate :only => [ :body, :title, :name ], :on => 'validation'
@@ -214,4 +216,10 @@ class Comment &lt; ActiveRecord::Base @@ -214,4 +216,10 @@ class Comment &lt; ActiveRecord::Base
214 self.article.archived? 216 self.article.archived?
215 end 217 end
216 218
  219 + protected
  220 +
  221 + def article_archived?
  222 + errors.add(:article, N_('associated with this comment is achived!')) if archived?
  223 + end
  224 +
217 end 225 end
app/views/content_viewer/_publishing_info.html.erb
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 <div id='article-sub-header'> 16 <div id='article-sub-header'>
17 <% if @page.display_hits? %> 17 <% if @page.display_hits? %>
18 <div id="article-hits"> 18 <div id="article-hits">
19 - <%= n_('Viewed one time', 'Viewed %{num} times', @page.hits) % { :num => @page.hits } %> 19 + <%= n_('Viewed one time %{desc}', 'Viewed %{num} times %{desc}', @page.hits) % { :num => @page.hits, :desc => @page.archived? ? '<b>'+_('(Not countable anymore)')+'</b>' : '' } %>
20 </div> 20 </div>
21 <% end %> 21 <% end %>
22 22
plugins/vote/test/functional/vote_plugin_profile_controller_test.rb
@@ -36,12 +36,14 @@ class VotePluginProfileControllerTest &lt; ActionController::TestCase @@ -36,12 +36,14 @@ class VotePluginProfileControllerTest &lt; ActionController::TestCase
36 end 36 end
37 37
38 should 'not vote if a target is archived' do 38 should 'not vote if a target is archived' do
39 - article = Article.create!(:profile => profile, :name => 'Archived article', :archived => true) 39 + article = Article.create!(:profile => profile, :name => 'Archived article', :archived => false)
40 comment = Comment.create!(:body => 'Comment test', :source => article, :author => profile) 40 comment = Comment.create!(:body => 'Comment test', :source => article, :author => profile)
41 xhr :post, :vote, :profile => profile.identifier, :id => article.id, :model => 'article', :vote => 1 41 xhr :post, :vote, :profile => profile.identifier, :id => article.id, :model => 'article', :vote => 1
42 - assert profile.votes.empty? 42 + assert !profile.votes.empty?
43 43
  44 + article.update_attributes(:archived => true)
44 xhr :post, :vote, :profile => profile.identifier, :id => comment.id, :model => 'comment', :vote => 1 45 xhr :post, :vote, :profile => profile.identifier, :id => comment.id, :model => 'comment', :vote => 1
  46 +
45 assert !profile.voted_for?(comment) 47 assert !profile.voted_for?(comment)
46 end 48 end
47 49
po/noosfero.pot
@@ -5073,6 +5073,10 @@ msgid_plural &quot;Viewed %{num} times&quot; @@ -5073,6 +5073,10 @@ msgid_plural &quot;Viewed %{num} times&quot;
5073 msgstr[0] "" 5073 msgstr[0] ""
5074 msgstr[1] "" 5074 msgstr[1] ""
5075 5075
  5076 +#: app/views/content_viewer/_publishing_info.html.erb:19
  5077 +msgid "(Not countable anymore)"
  5078 +msgstr ""
  5079 +
5076 #: app/views/content_viewer/versions_diff.html.erb:5 5080 #: app/views/content_viewer/versions_diff.html.erb:5
5077 msgid "Changes on \"%s\"" 5081 msgid "Changes on \"%s\""
5078 msgstr "" 5082 msgstr ""
po/pt/noosfero.po
@@ -5231,11 +5231,15 @@ msgid &quot;Reply&quot; @@ -5231,11 +5231,15 @@ msgid &quot;Reply&quot;
5231 msgstr "Responder" 5231 msgstr "Responder"
5232 5232
5233 #: app/views/content_viewer/_publishing_info.html.erb:19 5233 #: app/views/content_viewer/_publishing_info.html.erb:19
5234 -msgid "Viewed one time"  
5235 -msgid_plural "Viewed %{num} times" 5234 +msgid "Viewed one time %{desc}"
  5235 +msgid_plural "Viewed %{num} times %{desc}"
5236 msgstr[0] "Visualizado uma vez" 5236 msgstr[0] "Visualizado uma vez"
5237 msgstr[1] "Visualizado %{num} vezes" 5237 msgstr[1] "Visualizado %{num} vezes"
5238 5238
  5239 +#: app/views/content_viewer/_publishing_info.html.erb:19
  5240 +msgid "(Not countable anymore)"
  5241 +msgstr "(Não mais contabilizado)"
  5242 +
5239 #: app/views/content_viewer/versions_diff.html.erb:5 5243 #: app/views/content_viewer/versions_diff.html.erb:5
5240 msgid "Changes on \"%s\"" 5244 msgid "Changes on \"%s\""
5241 msgstr "Mudanças em \"%s\"" 5245 msgstr "Mudanças em \"%s\""
test/unit/article_test.rb
@@ -2177,10 +2177,21 @@ class ArticleTest &lt; ActiveSupport::TestCase @@ -2177,10 +2177,21 @@ class ArticleTest &lt; ActiveSupport::TestCase
2177 a3 = fast_create(Article) 2177 a3 = fast_create(Article)
2178 Article.hit([a1, a2, a3]) 2178 Article.hit([a1, a2, a3])
2179 Article.hit([a2, a3]) 2179 Article.hit([a2, a3])
  2180 +
2180 assert_equal [1, 2, 2], [a1.hits, a2.hits, a3.hits] 2181 assert_equal [1, 2, 2], [a1.hits, a2.hits, a3.hits]
2181 assert_equal [1, 2, 2], [a1.reload.hits, a2.reload.hits, a3.reload.hits] 2182 assert_equal [1, 2, 2], [a1.reload.hits, a2.reload.hits, a3.reload.hits]
2182 end 2183 end
2183 2184
  2185 + should 'not update hit attribute of archiveds articles' do
  2186 + a1 = fast_create(Article)
  2187 + a2 = fast_create(Article, :archived => true)
  2188 + a3 = fast_create(Article, :archived => true)
  2189 + Article.hit([a1, a2, a3])
  2190 +
  2191 + assert_equal [1, 0, 0], [a1.hits, a2.hits, a3.hits]
  2192 + assert_equal [1, 0, 0], [a1.reload.hits, a2.reload.hits, a3.reload.hits]
  2193 + end
  2194 +
2184 should 'vote in a article' do 2195 should 'vote in a article' do
2185 article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil) 2196 article = create(Article, :name => 'Test', :profile => profile, :last_changed_by => nil)
2186 profile.vote(article, 5) 2197 profile.vote(article, 5)
@@ -2222,4 +2233,25 @@ class ArticleTest &lt; ActiveSupport::TestCase @@ -2222,4 +2233,25 @@ class ArticleTest &lt; ActiveSupport::TestCase
2222 assert !a.display_preview? 2233 assert !a.display_preview?
2223 end 2234 end
2224 2235
  2236 + should 'check if a article is archived' do
  2237 + folder = Folder.create!(:name => 'Parent Archived', :profile => profile)
  2238 + a1 = Article.create!(:name => 'Test', :profile => profile, :parent_id => folder.id, :archived => false)
  2239 + a2 = Article.create!(:name => 'Test 2', :profile => profile, :archived => true)
  2240 + folder.update_attributes(:archived => true)
  2241 + a1.reload
  2242 +
  2243 + assert a1.archived?
  2244 + assert a2.archived?
  2245 + end
  2246 +
  2247 + should 'try add a child article to a archived folder' do
  2248 + folder = Folder.create!(:name => 'Parent Archived', :profile => profile, :archived => true)
  2249 +
  2250 + err = assert_raises ActiveRecord::RecordInvalid do
  2251 + a1 = Article.create!(:name => 'Test', :profile => profile, :parent_id => folder.id, :archived => false)
  2252 + end
  2253 +
  2254 + assert_match 'Parent folder is archived', err.message
  2255 + end
  2256 +
2225 end 2257 end
test/unit/comment_test.rb
@@ -94,6 +94,17 @@ class CommentTest &lt; ActiveSupport::TestCase @@ -94,6 +94,17 @@ class CommentTest &lt; ActiveSupport::TestCase
94 assert_equal cc + 1, ActionTracker::Record.find(activity.id).comments_count 94 assert_equal cc + 1, ActionTracker::Record.find(activity.id).comments_count
95 end 95 end
96 96
  97 + should 'try add a comment to a archived article' do
  98 + person = fast_create(Person)
  99 + article = Article.create!(:name => 'Test', :profile => person, :archived => true)
  100 +
  101 + err = assert_raises ActiveRecord::RecordInvalid do
  102 + comment = create(Comment, :source => article, :author_id => person.id)
  103 + end
  104 +
  105 + assert_match 'Article associated with this comment is achived', err.message
  106 + end
  107 +
97 should 'provide author name for authenticated authors' do 108 should 'provide author name for authenticated authors' do
98 owner = create_user('testuser').person 109 owner = create_user('testuser').person
99 assert_equal 'testuser', build(Comment, :author => owner).author_name 110 assert_equal 'testuser', build(Comment, :author => owner).author_name