Commit f50aa6ef75bb1774e7f3d14bf53e207d97f5f711

Authored by Victor Costa
1 parent bd4954d3

Improve article validation at comment group plugin

plugins/comment_group/lib/ext/article.rb
... ... @@ -7,8 +7,8 @@ class Article
7 7 validate :not_empty_group_comments_removed
8 8  
9 9 def not_empty_group_comments_removed
10   - if body
11   - groups_with_comments = group_comments.collect {|comment| comment.group_id}.uniq
  10 + if body && body_changed?
  11 + groups_with_comments = Comment.find(:all, :select => 'distinct group_id', :conditions => {:source_id => self.id}).map(&:group_id).compact
12 12 groups = Hpricot(body.to_s).search('.macro').collect{|element| element['data-macro-group_id'].to_i}
13 13 errors.add_to_base(N_('Not empty group comment cannot be removed')) unless (groups_with_comments-groups).empty?
14 14 end
... ...
plugins/comment_group/test/unit/article_test.rb
... ... @@ -16,16 +16,24 @@ class ArticleTest < ActiveSupport::TestCase
16 16 end
17 17  
18 18 should 'do not allow a exclusion of a group comment macro if this group has comments' do
19   - article.update_attribute(:body, "<div class=\"macro\" data-macro-group_id=2></div>")
  19 + article.body = "<div class=\"macro\" data-macro-group_id=2></div>"
20 20 comment1 = fast_create(Comment, :group_id => 1, :source_id => article.id)
21 21 assert !article.save
22 22 assert_equal 'Not empty group comment cannot be removed', article.errors[:base]
23 23 end
24 24  
25 25 should 'allow save if comment group macro is not removed for group with comments' do
26   - article.update_attribute(:body, "<div class=\"macro\" data-macro-group_id=1></div>")
  26 + article.body = "<div class=\"macro\" data-macro-group_id=1></div>"
27 27 comment1 = fast_create(Comment, :group_id => 1, :source_id => article.id)
28 28 assert article.save
29 29 end
30 30  
  31 + should 'do not validate empty group if article body is not changed' do
  32 + article.body = "<div class=\"macro\" data-macro-group_id=2></div>"
  33 + assert article.save
  34 + comment1 = fast_create(Comment, :group_id => 1, :source_id => article.id)
  35 + article.name = article.name + 'changed'
  36 + assert article.save
  37 + end
  38 +
31 39 end
... ...