Commit 4a0c41a88d0e51150cf922872c79e1e8d3166ead
1 parent
4d6d3322
Exists in
master
comment_paragraph: fix tests
Showing
8 changed files
with
112 additions
and
37 deletions
Show diff stats
lib/comment_paragraph_plugin.rb
@@ -41,7 +41,7 @@ class CommentParagraphPlugin < Noosfero::Plugin | @@ -41,7 +41,7 @@ class CommentParagraphPlugin < Noosfero::Plugin | ||
41 | end | 41 | end |
42 | 42 | ||
43 | def self.activation_mode_default_setting | 43 | def self.activation_mode_default_setting |
44 | - 'auto' | 44 | + 'manual' |
45 | end | 45 | end |
46 | 46 | ||
47 | end | 47 | end |
lib/comment_paragraph_plugin/macros/allow_comment.rb
@@ -12,7 +12,7 @@ class CommentParagraphPlugin::AllowComment < Noosfero::Plugin::Macro | @@ -12,7 +12,7 @@ class CommentParagraphPlugin::AllowComment < Noosfero::Plugin::Macro | ||
12 | count = article.paragraph_comments.without_spam.in_paragraph(paragraph_uuid).count | 12 | count = article.paragraph_comments.without_spam.in_paragraph(paragraph_uuid).count |
13 | 13 | ||
14 | proc { | 14 | proc { |
15 | - if controller.kind_of?(ContentViewerController) | 15 | + if controller.kind_of?(ContentViewerController) && article.comment_paragraph_plugin_activated? |
16 | render :partial => 'comment_paragraph_plugin_profile/comment_paragraph', | 16 | render :partial => 'comment_paragraph_plugin_profile/comment_paragraph', |
17 | :locals => {:paragraph_uuid => paragraph_uuid, :article_id => article.id, :inner_html => inner_html, :count => count, :profile_identifier => article.profile.identifier } | 17 | :locals => {:paragraph_uuid => paragraph_uuid, :article_id => article.id, :inner_html => inner_html, :count => count, :profile_identifier => article.profile.identifier } |
18 | else | 18 | else |
lib/ext/article.rb
@@ -6,25 +6,26 @@ class Article | @@ -6,25 +6,26 @@ class Article | ||
6 | 6 | ||
7 | before_save :comment_paragraph_plugin_parse_html | 7 | before_save :comment_paragraph_plugin_parse_html |
8 | 8 | ||
9 | + before_create :comment_paragraph_plugin_set_initial_value | ||
10 | + | ||
9 | settings_items :comment_paragraph_plugin_activate, :type => :boolean, :default => false | 11 | settings_items :comment_paragraph_plugin_activate, :type => :boolean, :default => false |
10 | 12 | ||
11 | def comment_paragraph_plugin_enabled? | 13 | def comment_paragraph_plugin_enabled? |
12 | environment.plugin_enabled?(CommentParagraphPlugin) && self.kind_of?(TextArticle) | 14 | environment.plugin_enabled?(CommentParagraphPlugin) && self.kind_of?(TextArticle) |
13 | end | 15 | end |
14 | 16 | ||
15 | - protected | ||
16 | - | ||
17 | - def comment_paragraph_plugin_activate? | ||
18 | - comment_paragraph_plugin_enabled? && comment_paragraph_plugin_settings.activation_mode == 'auto' | 17 | + def comment_paragraph_plugin_activated? |
18 | + comment_paragraph_plugin_activate && comment_paragraph_plugin_enabled? | ||
19 | end | 19 | end |
20 | 20 | ||
21 | + protected | ||
22 | + | ||
21 | def comment_paragraph_plugin_parse_html | 23 | def comment_paragraph_plugin_parse_html |
22 | - comment_paragraph_plugin_activate = comment_paragraph_plugin_activate? | ||
23 | - return unless comment_paragraph_plugin_activate | 24 | + return unless comment_paragraph_plugin_activated? |
24 | 25 | ||
25 | - if body && body_changed? | 26 | + if body && (body_changed? || setting_changed?(:comment_paragraph_plugin_activate)) |
26 | parsed_paragraphs = [] | 27 | parsed_paragraphs = [] |
27 | - updated = body_change[1] | 28 | + updated = body_changed? ? body_change[1] : body |
28 | doc = Hpricot(updated) | 29 | doc = Hpricot(updated) |
29 | doc.search("/*").each do |paragraph| | 30 | doc.search("/*").each do |paragraph| |
30 | if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/ | 31 | if paragraph.to_html =~ /^<div(.*)paragraph_comment(.*)$/ || paragraph.to_html =~ /^<p>\W<\/p>$/ |
@@ -41,6 +42,12 @@ class Article | @@ -41,6 +42,12 @@ class Article | ||
41 | end | 42 | end |
42 | end | 43 | end |
43 | 44 | ||
45 | + def comment_paragraph_plugin_set_initial_value | ||
46 | + self.comment_paragraph_plugin_activate = comment_paragraph_plugin_enabled? && | ||
47 | + comment_paragraph_plugin_settings.activation_mode == 'auto' | ||
48 | + true | ||
49 | + end | ||
50 | + | ||
44 | def comment_paragraph_plugin_settings | 51 | def comment_paragraph_plugin_settings |
45 | @comment_paragraph_plugin_settings ||= Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin) | 52 | @comment_paragraph_plugin_settings ||= Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin) |
46 | end | 53 | end |
test/functional/comment_paragraph_plugin_admin_controller_test.rb
@@ -22,10 +22,10 @@ class CommentParagraphPluginAdminControllerTest < ActionController::TestCase | @@ -22,10 +22,10 @@ class CommentParagraphPluginAdminControllerTest < ActionController::TestCase | ||
22 | end | 22 | end |
23 | 23 | ||
24 | should 'update comment paragraph plugin settings' do | 24 | should 'update comment paragraph plugin settings' do |
25 | - assert_not_equal 'manual', plugin_settings.get_setting(:activation_mode) | ||
26 | - post :index, :settings => { :activation_mode => 'manual' } | 25 | + assert_not_equal 'auto', plugin_settings.get_setting(:activation_mode) |
26 | + post :index, :settings => { :activation_mode => 'auto' } | ||
27 | environment.reload | 27 | environment.reload |
28 | - assert_equal 'manual', plugin_settings.get_setting(:activation_mode) | 28 | + assert_equal 'auto', plugin_settings.get_setting(:activation_mode) |
29 | end | 29 | end |
30 | 30 | ||
31 | should 'get article types previously selected' do | 31 | should 'get article types previously selected' do |
test/functional/comment_paragraph_plugin_public_controller_test.rb
@@ -9,8 +9,7 @@ class CommentParagraphPluginPublicControllerTest < ActionController::TestCase | @@ -9,8 +9,7 @@ class CommentParagraphPluginPublicControllerTest < ActionController::TestCase | ||
9 | 9 | ||
10 | def setup | 10 | def setup |
11 | @profile = create_user('testuser').person | 11 | @profile = create_user('testuser').person |
12 | - @article = profile.articles.build(:name => 'test') | ||
13 | - @article.save! | 12 | + @article = profile.articles.create!(:name => 'test') |
14 | end | 13 | end |
15 | attr_reader :article, :profile | 14 | attr_reader :article, :profile |
16 | 15 |
test/functional/content_viewer_controller_test.rb
@@ -10,10 +10,12 @@ end | @@ -10,10 +10,12 @@ end | ||
10 | class ContentViewerControllerTest < ActionController::TestCase | 10 | class ContentViewerControllerTest < ActionController::TestCase |
11 | 11 | ||
12 | def setup | 12 | def setup |
13 | - @profile = fast_create(Community) | ||
14 | - @page = fast_create(Article, :profile_id => @profile.id, :body => "<div class=\"macro\" data-macro-paragraph_uuid=\"0\" data-macro='comment_paragraph_plugin/allow_comment' ></div>") | ||
15 | @environment = Environment.default | 13 | @environment = Environment.default |
16 | @environment.enable_plugin(CommentParagraphPlugin) | 14 | @environment.enable_plugin(CommentParagraphPlugin) |
15 | + @profile = fast_create(Community) | ||
16 | + @page = fast_create(TextArticle, :profile_id => @profile.id, :body => "<p>inner text</p>") | ||
17 | + @page.comment_paragraph_plugin_activate = true | ||
18 | + @page.save! | ||
17 | end | 19 | end |
18 | 20 | ||
19 | attr_reader :page | 21 | attr_reader :page |
test/unit/allow_comment_test.rb
@@ -4,34 +4,43 @@ class AllowCommentTest < ActiveSupport::TestCase | @@ -4,34 +4,43 @@ class AllowCommentTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | @macro = CommentParagraphPlugin::AllowComment.new | 6 | @macro = CommentParagraphPlugin::AllowComment.new |
7 | + @environment = Environment.default | ||
8 | + @environment.enable_plugin(CommentParagraphPlugin) | ||
9 | + | ||
10 | + @profile = fast_create(Community) | ||
11 | + | ||
12 | + @article = fast_create(TextArticle, :profile_id => profile.id, :body => 'inner') | ||
13 | + @article.comment_paragraph_plugin_activate = true | ||
14 | + @article.save! | ||
15 | + | ||
16 | + @comment = fast_create(Comment, :paragraph_uuid => 1, :source_id => article.id) | ||
17 | + @controller = mock | ||
7 | end | 18 | end |
8 | 19 | ||
9 | - attr_reader :macro | 20 | + attr_reader :macro, :profile, :article, :controller, :comment, :environment |
10 | 21 | ||
11 | should 'have a configuration' do | 22 | should 'have a configuration' do |
12 | assert CommentParagraphPlugin::AllowComment.configuration | 23 | assert CommentParagraphPlugin::AllowComment.configuration |
13 | end | 24 | end |
14 | 25 | ||
15 | should 'parse contents to include comment paragraph view' do | 26 | should 'parse contents to include comment paragraph view' do |
16 | - profile = fast_create(Community) | ||
17 | - article = fast_create(Article, :profile_id => profile.id) | ||
18 | - comment = fast_create(Comment, :paragraph_uuid => 1, :source_id => article.id) | ||
19 | - inner_html = 'inner' | ||
20 | - content = macro.parse({:paragraph_uuid => comment.paragraph_uuid}, inner_html, article) | ||
21 | - expects(:controller).returns(ContentViewerController.new) | ||
22 | - | ||
23 | - expects(:render).with({:partial => 'comment_paragraph_plugin_profile/comment_paragraph', :locals => {:paragraph_uuid => comment.paragraph_uuid, :article_id => article.id, :inner_html => inner_html, :count => 1, :profile_identifier => profile.identifier} }) | 27 | + content = macro.parse({:paragraph_uuid => comment.paragraph_uuid}, article.body, article) |
28 | + controller.expects(:kind_of?).with(ContentViewerController).returns(true) | ||
29 | + | ||
30 | + expects(:render).with({:partial => 'comment_paragraph_plugin_profile/comment_paragraph', :locals => {:paragraph_uuid => comment.paragraph_uuid, :article_id => article.id, :inner_html => article.body, :count => 1, :profile_identifier => profile.identifier} }) | ||
24 | instance_eval(&content) | 31 | instance_eval(&content) |
25 | end | 32 | end |
26 | 33 | ||
27 | should 'not parse contents outside content viewer controller' do | 34 | should 'not parse contents outside content viewer controller' do |
28 | - profile = fast_create(Community) | ||
29 | - article = fast_create(Article, :profile_id => profile.id) | ||
30 | - comment = fast_create(Comment, :paragraph_uuid => 1, :source_id => article.id) | ||
31 | - inner_html = 'inner' | ||
32 | - content = macro.parse({:paragraph_uuid => comment.paragraph_uuid}, inner_html, article) | ||
33 | - expects(:controller).returns(HomeController.new) | 35 | + content = macro.parse({:paragraph_uuid => comment.paragraph_uuid}, article.body, article) |
36 | + controller.expects(:kind_of?).with(ContentViewerController).returns(false) | ||
37 | + assert_equal 'inner', instance_eval(&content) | ||
38 | + end | ||
34 | 39 | ||
40 | + should 'not parse contents if comment_paragraph is not activated' do | ||
41 | + article.expects(:comment_paragraph_plugin_activated?).returns(false) | ||
42 | + content = macro.parse({:paragraph_uuid => comment.paragraph_uuid}, article.body, article) | ||
43 | + controller.expects(:kind_of?).with(ContentViewerController).returns(true) | ||
35 | assert_equal 'inner', instance_eval(&content) | 44 | assert_equal 'inner', instance_eval(&content) |
36 | end | 45 | end |
37 | 46 |
test/unit/article_test.rb
@@ -4,13 +4,13 @@ require 'benchmark' | @@ -4,13 +4,13 @@ require 'benchmark' | ||
4 | class ArticleTest < ActiveSupport::TestCase | 4 | class ArticleTest < ActiveSupport::TestCase |
5 | 5 | ||
6 | def setup | 6 | def setup |
7 | - profile = fast_create(Community) | ||
8 | - @article = fast_create(Article, :profile_id => profile.id) | 7 | + @profile = fast_create(Community) |
8 | + @article = fast_create(TextArticle, :profile_id => profile.id) | ||
9 | @environment = Environment.default | 9 | @environment = Environment.default |
10 | @environment.enable_plugin(CommentParagraphPlugin) | 10 | @environment.enable_plugin(CommentParagraphPlugin) |
11 | end | 11 | end |
12 | 12 | ||
13 | - attr_reader :article, :environment | 13 | + attr_reader :article, :environment, :profile |
14 | 14 | ||
15 | should 'return paragraph comments from article' do | 15 | should 'return paragraph comments from article' do |
16 | comment1 = fast_create(Comment, :paragraph_uuid => 1, :source_id => article.id) | 16 | comment1 = fast_create(Comment, :paragraph_uuid => 1, :source_id => article.id) |
@@ -34,9 +34,67 @@ class ArticleTest < ActiveSupport::TestCase | @@ -34,9 +34,67 @@ class ArticleTest < ActiveSupport::TestCase | ||
34 | 34 | ||
35 | should 'parse html if the plugin is not enabled' do | 35 | should 'parse html if the plugin is not enabled' do |
36 | article.body = "<p>paragraph 1</p><p>paragraph 2</p>" | 36 | article.body = "<p>paragraph 1</p><p>paragraph 2</p>" |
37 | - article.expects(:comment_paragraph_plugin_enabled?).returns(true) | 37 | + article.comment_paragraph_plugin_activate = true |
38 | article.save! | 38 | article.save! |
39 | - assert_match /data-macro='comment_paragraph_plugin\/allow_comment'/, article.body | 39 | + assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body |
40 | + end | ||
41 | + | ||
42 | + should 'do not remove macro div when disable comment paragraph' do | ||
43 | + article.body = "<p>paragraph 1</p><p>paragraph 2</p>" | ||
44 | + article.comment_paragraph_plugin_activate = true | ||
45 | + article.save! | ||
46 | + assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body | ||
47 | + article.comment_paragraph_plugin_activate = false | ||
48 | + article.save! | ||
49 | + assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body | ||
50 | + end | ||
51 | + | ||
52 | + should 'parse html when activate comment paragraph' do | ||
53 | + article.body = "<p>paragraph 1</p><p>paragraph 2</p>" | ||
54 | + article.comment_paragraph_plugin_activate = false | ||
55 | + article.save! | ||
56 | + assert_equal "<p>paragraph 1</p><p>paragraph 2</p>", article.body | ||
57 | + article.comment_paragraph_plugin_activate = true | ||
58 | + article.save! | ||
59 | + assert_match /data-macro="comment_paragraph_plugin\/allow_comment"/, article.body | ||
60 | + end | ||
61 | + | ||
62 | + should 'be enabled if plugin is enabled and article is a kind of TextArticle' do | ||
63 | + assert article.comment_paragraph_plugin_enabled? | ||
64 | + end | ||
65 | + | ||
66 | + should 'not be enabled if plugin is not enabled' do | ||
67 | + environment.disable_plugin(CommentParagraphPlugin) | ||
68 | + assert !article.comment_paragraph_plugin_enabled? | ||
69 | + end | ||
70 | + | ||
71 | + should 'not be enabled if article if not a kind of TextArticle' do | ||
72 | + article = fast_create(Article, :profile_id => profile.id) | ||
73 | + assert !article.comment_paragraph_plugin_enabled? | ||
74 | + end | ||
75 | + | ||
76 | + should 'not be activated by default' do | ||
77 | + article = fast_create(TextArticle, :profile_id => profile.id) | ||
78 | + assert !article.comment_paragraph_plugin_activated? | ||
79 | + end | ||
80 | + | ||
81 | + should 'be activated by default if it is enabled and activation mode is auto' do | ||
82 | + settings = Noosfero::Plugin::Settings.new(environment, CommentParagraphPlugin) | ||
83 | + settings.activation_mode = 'auto' | ||
84 | + settings.save! | ||
85 | + article = TextArticle.create!(:profile => profile, :name => 'title') | ||
86 | + assert article.comment_paragraph_plugin_activated? | ||
87 | + end | ||
88 | + | ||
89 | + should 'be activated when forced' do | ||
90 | + article.comment_paragraph_plugin_activate = true | ||
91 | + assert article.comment_paragraph_plugin_activated? | ||
92 | + end | ||
93 | + | ||
94 | + should 'not be activated if plugin is not enabled' do | ||
95 | + article.comment_paragraph_plugin_activate = true | ||
96 | + environment.disable_plugin(CommentParagraphPlugin) | ||
97 | + assert !article.comment_paragraph_plugin_enabled? | ||
40 | end | 98 | end |
41 | 99 | ||
42 | end | 100 | end |