Continue extracting URL generation logic from model classes

This commit is contained in:
Alexey Verkhovsky 2005-09-10 11:07:40 +00:00
parent 7e500dfe57
commit 70fa15e3f3
12 changed files with 191 additions and 127 deletions

View file

@ -11,6 +11,7 @@ require 'action_controller/test_process'
require 'action_web_service/test_invoke'
require 'breakpoint'
require 'wiki_content'
require 'url_generator'
# Uncomment these and hang on, because the tests will be FAST
#Test::Unit::TestCase.pre_loaded_fixtures = false
@ -43,6 +44,7 @@ class Test::Unit::TestCase
end
def test_renderer(revision = nil)
PageRenderer.setup_url_generator(StubUrlGenerator.new)
PageRenderer.new(revision)
end
@ -93,6 +95,64 @@ module ChunkMatch
end
end
class StubUrlGenerator < AbstractUrlGenerator
def initialize
super(:doesnt_need_controller)
end
def file_link(mode, name, text, web_name, known_file)
link = CGI.escape(name)
case mode
when :export
if known_file then %{<a class="existingWikiWord" href="#{link}.html">#{text}</a>}
else %{<span class="newWikiWord">#{text}</span>} end
when :publish
if known_file then %{<a class="existingWikiWord" href="../published/#{link}">#{text}</a>}
else %{<span class=\"newWikiWord\">#{text}</span>} end
else
if known_file
%{<a class=\"existingWikiWord\" href=\"../file/#{link}\">#{text}</a>}
else
%{<span class=\"newWikiWord\">#{text}<a href=\"../file/#{link}\">?</a></span>}
end
end
end
def page_link(mode, name, text, web_address, known_page)
link = CGI.escape(name)
case mode.to_sym
when :export
if known_page then %{<a class="existingWikiWord" href="#{link}.html">#{text}</a>}
else %{<span class="newWikiWord">#{text}</span>} end
when :publish
if known_page then %{<a class="existingWikiWord" href="../published/#{link}">#{text}</a>}
else %{<span class="newWikiWord">#{text}</span>} end
else
if known_page
%{<a class="existingWikiWord" href="../show/#{link}">#{text}</a>}
else
%{<span class="newWikiWord">#{text}<a href="../show/#{link}">?</a></span>}
end
end
end
def pic_link(mode, name, text, web_name, known_pic)
link = CGI.escape(name)
case mode.to_sym
when :export
if known_pic then %{<img alt="#{text}" src="#{link}" />}
else %{<img alt="#{text}" src="no image" />} end
when :publish
if known_pic then %{<img alt="#{text}" src="#{link}" />}
else %{<span class="newWikiWord">#{text}</span>} end
else
if known_pic then %{<img alt="#{text}" src="../pic/#{link}" />}
else %{<span class="newWikiWord">#{text}<a href="../pic/#{link}">?</a></span>} end
end
end
end
if defined? $validate_xml_in_assert_success and $validate_xml_in_assert_success == true
module Test
module Unit

View file

@ -25,50 +25,6 @@ class PageRendererTest < Test::Unit::TestCase
rendered_content(@web.page("SecondPage")))
end
def test_make_link
add_sample_pages
existing_page_wiki_url =
'<a class="existingWikiWord" href="../show/EverBeenInLove">Ever Been In Love</a>'
existing_page_published_url =
'<a class="existingWikiWord" href="../published/EverBeenInLove">Ever Been In Love</a>'
existing_page_static_url =
'<a class="existingWikiWord" href="EverBeenInLove.html">Ever Been In Love</a>'
new_page_wiki_url =
'<span class="newWikiWord">Unknown Word<a href="../show/UnknownWord">?</a></span>'
new_page_published_url = new_page_static_url = '<span class="newWikiWord">Unknown Word</span>'
# no options
assert_equal existing_page_wiki_url, @web.make_link('EverBeenInLove')
# :mode => :export
assert_equal existing_page_static_url, @web.make_link('EverBeenInLove', nil, :mode => :export)
# :mode => :publish
assert_equal existing_page_published_url,
@web.make_link('EverBeenInLove', nil, :mode => :publish)
# new page, no options
assert_equal new_page_wiki_url, @web.make_link('UnknownWord')
# new page, :mode => :export
assert_equal new_page_static_url, @web.make_link('UnknownWord', nil, :mode => :export)
# new page, :mode => :publish
assert_equal new_page_published_url, @web.make_link('UnknownWord', nil, :mode => :publish)
# Escaping special characters in the name
assert_equal(
'<span class="newWikiWord">Smith &amp; Wesson<a href="../show/Smith+%26+Wesson">?</a></span>',
@web.make_link('Smith & Wesson'))
# optionally using text as the link text
assert_equal(
existing_page_published_url.sub(/>Ever Been In Love</, ">Haven't you ever been in love?<"),
@web.make_link('EverBeenInLove', "Haven't you ever been in love?", :mode => :publish))
end
def test_wiki_words
assert_equal %w( HisWay MyWay SmartEngine SmartEngineGUI ThatWay ),
test_renderer(@revision).wiki_words.sort

View file

@ -59,7 +59,7 @@ class E2EInstikiTest < Test::Unit::TestCase
def test_00020_add_a_page
# Add reference to a non-existant wiki page
enter_markup('HomePage', '[[Another Wiki Page]]')
assert_equal '?', ie.link(:url, url(:show, 'Another Wiki Page')).text
assert_equal '?', ie.link(:url, url(:new, 'Another Wiki Page')).text
# Edit the first revision of a page
enter_markup('Another Wiki Page', 'First revision of Another Wiki Page, linked from HomePage')