# Redmine - project management software
-# Copyright (C) 2006-2010 Jean-Philippe Lang
+# Copyright (C) 2006-2011 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../../test_helper', __FILE__)
class ApplicationHelperTest < ActionView::TestCase
-
+
fixtures :projects, :roles, :enabled_modules, :users,
- :repositories, :changesets,
+ :repositories, :changesets,
:trackers, :issue_statuses, :issues, :versions, :documents,
:wikis, :wiki_pages, :wiki_contents,
:boards, :messages,
context "authorized user" do
should "be tested"
end
-
+
context "unauthorized user" do
should "be tested"
end
-
+
should "allow using the :controller and :action for the target link" do
User.current = User.find_by_login('admin')
{:controller => 'issues', :action => 'edit', :id => Issue.first.id})
assert_match /href/, response
end
-
+
end
-
+
def test_auto_links
to_test = {
'http://foo.bar' => '<a class="external" href="http://foo.bar">http://foo.bar</a>',
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
-
+
def test_auto_mailto
- assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>',
+ assert_equal '<p><a class="email" href="mailto:test@foo.bar">test@foo.bar</a></p>',
textilizable('test@foo.bar')
end
-
+
def test_inline_images
to_test = {
'!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
-
+
def test_inline_images_inside_tags
raw = <<-RAW
h1. !foo.png! Heading
assert textilizable(raw).include?('<img src="foo.png" alt="" />')
assert textilizable(raw).include?('<img src="bar.gif" alt="" />')
end
-
+
def test_attached_images
to_test = {
'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />',
attachments = Attachment.find(:all)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => attachments) }
end
-
+
def test_textile_external_links
to_test = {
'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
end
def test_redmine_links
- issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3},
+ issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3},
:class => 'issue status-1 priority-1 overdue', :title => 'Error 281 when updating a recipe (New)')
-
+
changeset_link = link_to('r1', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 1},
:class => 'changeset', :title => 'My very first commit')
changeset_link2 = link_to('r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
:class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-
+
document_link = link_to('Test document', {:controller => 'documents', :action => 'show', :id => 1},
:class => 'document')
-
+
version_link = link_to('1.0', {:controller => 'versions', :action => 'show', :id => 2},
:class => 'version')
message_url = {:controller => 'messages', :action => 'show', :board_id => 1, :id => 4}
-
+
project_url = {:controller => 'projects', :action => 'show', :id => 'subproject1'}
-
+
source_url = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']}
source_url_with_ext = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file.ext']}
-
+
to_test = {
# tickets
'#3, [#3], (#3) and #3.' => "#{issue_link}, [#{issue_link}], (#{issue_link}) and #{issue_link}.",
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
end
-
+
def test_cross_project_redmine_links
source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
:class => 'source')
-
+
changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
:class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
-
+
to_test = {
# documents
'document:"Test document"' => 'document:"Test document"',
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => Issue.find(3).attachments), "#{text} failed" }
end
-
+
def test_wiki_links
to_test = {
'[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
-
+
def test_html_tags
to_test = {
"<div>content</div>" => "<p><div>content</div></p>",
}
to_test.each { |text, result| assert_equal result, textilizable(text) }
end
-
+
def test_allowed_html_tags
to_test = {
"<pre>preformatted text</pre>" => "<pre>preformatted text</pre>",
}
to_test.each { |text, result| assert_equal result, textilizable(text) }
end
-
+
def test_pre_tags
raw = <<-RAW
Before
</pre>
<p>After</p>
EXPECTED
-
+
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
end
-
+
def test_pre_content_should_not_parse_wiki_and_redmine_links
raw = <<-RAW
[[CookBook documentation]]
#1
</pre>
EXPECTED
-
+
@project = Project.find(1)
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
end
-
+
def test_non_closing_pre_blocks_should_be_closed
raw = <<-RAW
<pre><code>
<pre><code>
</code></pre>
EXPECTED
-
+
@project = Project.find(1)
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
end
-
+
def test_syntax_highlight
raw = <<-RAW
<pre><code class="ruby">
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
end
-
+
def test_wiki_links_in_tables
to_test = {"|[[Page|Link title]]|[[Other Page|Other title]]|\n|Cell 21|[[Last page]]|" =>
'<tr><td><a href="/projects/ecookbook/wiki/Page" class="wiki-page new">Link title</a></td>' +
@project = Project.find(1)
to_test.each { |text, result| assert_equal "<table>#{result}</table>", textilizable(text).gsub(/[\t\n]/, '') }
end
-
+
def test_text_formatting
to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
'(_text within parentheses_)' => '(<em>text within parentheses</em>)',
}
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
-
+
def test_wiki_horizontal_rule
assert_equal '<hr />', textilizable('---')
assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
end
-
+
def test_footnotes
raw = <<-RAW
This is some text[1].
assert_equal expected.gsub(%r{[\r\n\t]}, ''), textilizable(raw).gsub(%r{[\r\n\t]}, '')
end
-
+
def test_headings
raw = 'h1. Some heading'
expected = %|<a name="Some-heading"></a>\n<h1 >Some heading<a href="#Some-heading" class="wiki-anchor">¶</a></h1>|
-
+
assert_equal expected, textilizable(raw)
end
-
+
def test_table_of_content
raw = <<-RAW
{{toc}}
expected = '<ul class="toc">' +
'<li><a href="#Title">Title</a>' +
'<ul>' +
- '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
- '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
+ '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' +
+ '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' +
'<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' +
'<ul>' +
'<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' +
@project = Project.find(1)
assert textilizable(raw).gsub("\n", "").include?(expected), textilizable(raw)
end
-
+
def test_table_of_content_should_contain_included_page_headings
raw = <<-RAW
{{toc}}
expected = '<ul class="toc">' +
'<li><a href="#Included">Included</a></li>' +
- '<li><a href="#Child-page-1">Child page 1</a></li>' +
+ '<li><a href="#Child-page-1">Child page 1</a></li>' +
'</ul>'
@project = Project.find(1)
assert textilizable(raw).gsub("\n", "").include?(expected)
end
-
+
def test_default_formatter
Setting.text_formatting = 'unknown'
text = 'a *link*: http://www.example.net/'
assert_equal '<p>a *link*: <a href="http://www.example.net/">http://www.example.net/</a></p>', textilizable(text)
Setting.text_formatting = 'textile'
end
-
+
def test_due_date_distance_in_words
to_test = { Date.today => 'Due in 0 days',
Date.today + 1 => 'Due in 1 day',
assert_equal expected, due_date_distance_in_words(date)
end
end
-
+
def test_avatar
# turn on avatars
Setting.gravatar_enabled = '1'
assert avatar('jsmith <jsmith@somenet.foo>').include?(Digest::MD5.hexdigest('jsmith@somenet.foo'))
assert_nil avatar('jsmith')
assert_nil avatar(nil)
-
+
# turn off avatars
Setting.gravatar_enabled = '0'
assert_equal '', avatar(User.find_by_mail('jsmith@somenet.foo'))
end
-
+
def test_link_to_user
user = User.find(2)
t = link_to_user(user)
assert_equal "<a href=\"/users/2\">#{ user.name }</a>", t
end
-
+
def test_link_to_user_should_not_link_to_locked_user
user = User.find(5)
assert user.locked?
t = link_to_user(user)
assert_equal user.name, t
end
-
+
def test_link_to_user_should_not_link_to_anonymous
user = User.anonymous
assert user.anonymous?