require_relative "../test_helper"
class CommentHelperTest < ActiveSupport::TestCase
include CommentHelper
include ActionView::Helpers::TagHelper
include NoosferoTestHelper
def setup
@user = create_user('usertest').person
@profile = @user
self.stubs(:logged_in?).returns(true)
self.stubs(:report_abuse).returns('link')
self.stubs(:expirable_comment_link).returns('link')
@plugins = mock
@plugins.stubs(:dispatch).returns([])
end
attr_reader :user, :profile
should 'show menu if it has links for actions' do
article = Article.new(:profile => profile)
comment = build(Comment, :article => article)
menu = comment_actions(comment)
assert_match /class=\"comment-actions\"/, menu
end
should 'do not show menu if it has no actions' do
comment = Comment.new
self.stubs(:links_for_comment_actions).returns([])
menu = comment_actions(comment)
assert_no_match /class=\"comment-actions\"/, menu
end
should 'do not show menu if it has nil actions only' do
comment = Comment.new
self.stubs(:link_for_report_abuse).returns(nil)
self.stubs(:link_for_spam).returns(nil)
self.stubs(:link_for_edit).returns(nil)
self.stubs(:link_for_remove).returns(nil)
menu = comment_actions(comment)
assert_no_match /class=\"comment-actions\"/, menu
end
should 'include actions of plugins in menu' do
article = Article.new(:profile => profile)
comment = build(Comment, :article => article)
plugin_action = {:link => 'plugin_action'}
@plugins.stubs(:dispatch).returns([plugin_action])
links = links_for_comment_actions(comment)
assert_includes links, plugin_action
end
should 'include lambda actions of plugins in menu' do
article = Article.new(:profile => profile)
comment = build(Comment, :article => article)
plugin_action = proc{[{:link => 'plugin_action'}, {:link => 'plugin_action2'}]}
@plugins.stubs(:dispatch).returns([plugin_action])
links = links_for_comment_actions(comment)
assert_includes links, {:link => 'plugin_action'}
assert_includes links, {:link => 'plugin_action2'}
end
should 'return link for report abuse action when comment has a author' do
comment = Comment.new
comment.author = user
link = link_for_report_abuse(comment)
assert link
end
should 'do not return link for report abuse action when comment has no author' do
comment = Comment.new
link = link_for_report_abuse(comment)
assert !link
end
should 'return link for mark comment as spam' do
comment = Comment.new
comment.stubs(:can_be_marked_as_spam_by?).with(user).returns(true)
link = link_for_spam(comment)
assert_match /Mark as SPAM/, link[:link]
end
should 'not return link for mark comment as spam if user does not have the permissions' do
comment = Comment.new
comment.stubs(:can_be_marked_as_spam_by?).with(user).returns(false)
link = link_for_spam(comment)
assert_nil link
end
should 'return link for mark comment as not spam' do
comment = Comment.new
comment.spam = true
comment.stubs(:can_be_marked_as_spam_by?).with(user).returns(true)
link = link_for_spam(comment)
assert_match /Mark as NOT SPAM/, link[:link]
end
should 'not return link for mark comment as not spam if user does not have the permissions' do
comment = Comment.new
comment.spam = true
comment.stubs(:can_be_marked_as_spam_by?).with(user).returns(false)
link = link_for_spam(comment)
assert_nil link
end
should 'do not return link for edit comment' do
comment = Comment.new
comment.stubs(:can_be_updated_by?).with(user).returns(false)
link = link_for_edit(comment)
assert_nil link
end
should 'return link for edit comment' do
comment = Comment.new
comment.stubs(:can_be_updated_by?).with(user).returns(true)
link = link_for_edit(comment)
assert link
end
should 'do not return link for remove comment' do
comment = Comment.new
comment.stubs(:can_be_destroyed_by?).with(user).returns(false)
link = link_for_remove(comment)
assert_nil link
end
should 'return link for remove comment' do
comment = Comment.new
comment.stubs(:can_be_destroyed_by?).with(user).returns(true)
link = link_for_remove(comment)
assert link
end
should 'include actions of plugins in action bar' do
comment = Comment.new
plugin_action = {:link => 'plugin_action', :action_bar => true}
@plugins.stubs(:dispatch).returns([plugin_action])
html = comment_actions(comment)
assert_match /plugin_action/, Nokogiri::HTML.fragment(html).css('.comments-action-bar').to_html
end
def link_to_function(content, url, options = {})
link_to(content, url, options)
end
end