From 7e500dfe5748844770300f387ebbf28120fff105 Mon Sep 17 00:00:00 2001 From: Alexey Verkhovsky Date: Sat, 10 Sep 2005 06:12:57 +0000 Subject: [PATCH] Controllers create renderer objects and pass them on to page.revise and page.rollback methods --- app/controllers/wiki_controller.rb | 4 +- app/models/page.rb | 14 +- app/models/web.rb | 4 +- app/models/wiki.rb | 8 +- lib/page_renderer.rb | 4 +- rakefile.rb | 205 +++++++++++++++++++++++ test/functional/admin_controller_test.rb | 2 +- test/functional/file_controller_test.rb | 7 +- test/functional/wiki_controller_test.rb | 22 +-- test/test_helper.rb | 7 +- test/unit/page_renderer_test.rb | 62 +++---- test/unit/page_test.rb | 29 ++-- test/unit/web_test.rb | 14 +- 13 files changed, 303 insertions(+), 79 deletions(-) diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 1bade80f..63b3a988 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -182,11 +182,11 @@ class WikiController < ApplicationController begin if @page wiki.revise_page(@web_name, @page_name, @params['content'], Time.now, - Author.new(@params['author'], remote_ip)) + Author.new(@params['author'], remote_ip), PageRenderer.new) @page.unlock else wiki.write_page(@web_name, @page_name, @params['content'], Time.now, - Author.new(@params['author'], remote_ip)) + Author.new(@params['author'], remote_ip), PageRenderer.new) end redirect_to_page @page_name rescue => e diff --git a/app/models/page.rb b/app/models/page.rb index bc094c75..1179e9f8 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -3,7 +3,7 @@ class Page < ActiveRecord::Base has_many :revisions, :order => 'id' has_one :current_revision, :class_name => 'Revision', :order => 'id DESC' - def revise(content, time, author) + def revise(content, time, author, renderer) revisions_size = new_record? ? 0 : revisions.size if (revisions_size > 0) and content == current_revision.content raise Instiki::ValidationError.new( @@ -13,8 +13,9 @@ class Page < ActiveRecord::Base author = Author.new(author.to_s) unless author.is_a?(Author) # Try to render content to make sure that markup engine can take it, - r = Revision.new(:page => self, :content => content, :author => author, :revised_at => time) - PageRenderer.new(r).force_rendering + renderer.revision = Revision.new( + :page => self, :content => content, :author => author, :revised_at => time) + renderer.force_rendering # A user may change a page, look at it and make some more changes - several times. # Not to record every such iteration as a new revision, if the previous revision was done @@ -29,14 +30,15 @@ class Page < ActiveRecord::Base self end - def rollback(revision_number, time, author_ip = nil) + def rollback(revision_number, time, author_ip, renderer) roll_back_revision = self.revisions[revision_number] if roll_back_revision.nil? raise Instiki::ValidationError.new("Revision #{revision_number} not found") end - revise(roll_back_revision.content, time, Author.new(roll_back_revision.author, author_ip)) + author = Author.new(roll_back_revision.author.name, author_ip) + revise(roll_back_revision.content, time, author, renderer) end - + def revisions? revisions.size > 1 end diff --git a/app/models/web.rb b/app/models/web.rb index 2af2709a..f3fb5534 100644 --- a/app/models/web.rb +++ b/app/models/web.rb @@ -15,9 +15,9 @@ class Web < ActiveRecord::Base self.brackets_only != brackets_only end - def add_page(name, content, time, author) + def add_page(name, content, time, author, renderer) page = page(name) || Page.new(:web => self, :name => name) - page.revise(content, time, author) + page.revise(content, time, author, renderer) end def authors diff --git a/app/models/wiki.rb b/app/models/wiki.rb index 20906c4a..773fd011 100644 --- a/app/models/wiki.rb +++ b/app/models/wiki.rb @@ -58,9 +58,9 @@ class Wiki web.remove_pages(web.select.orphaned_pages) end - def revise_page(web_address, page_name, content, revised_at, author) + def revise_page(web_address, page_name, content, revised_at, author, renderer) page = read_page(web_address, page_name) - page.revise(content, revised_at, author) + page.revise(content, revised_at, author, renderer) end def rollback_page(web_address, page_name, revision_number, time, author_id = nil) @@ -89,7 +89,7 @@ class Wiki self.class.storage_path end - def write_page(web_address, page_name, content, written_on, author) - Web.find_by_address(web_address).add_page(page_name, content, written_on, author) + def write_page(web_address, page_name, content, written_on, author, renderer) + Web.find_by_address(web_address).add_page(page_name, content, written_on, author, renderer) end end \ No newline at end of file diff --git a/lib/page_renderer.rb b/lib/page_renderer.rb index 63794300..e516b2cf 100644 --- a/lib/page_renderer.rb +++ b/lib/page_renderer.rb @@ -4,7 +4,9 @@ require 'diff' class PageRenderer - def initialize(revision) + attr_accessor :revision + + def initialize(revision = nil) @revision = revision end diff --git a/rakefile.rb b/rakefile.rb index e69de29b..fb2dfd40 100755 --- a/rakefile.rb +++ b/rakefile.rb @@ -0,0 +1,205 @@ +require 'rake' +require 'rake/testtask' +require 'rake/rdoctask' + +$VERBOSE = nil +TEST_CHANGES_SINCE = Time.now - 600 + +desc "Run all the tests on a fresh test database" +task :default => [ :test_units, :test_functional ] + + +desc 'Require application environment.' +task :environment do + unless defined? RAILS_ROOT + require File.dirname(__FILE__) + '/config/environment' + end +end + +desc "Generate API documentation, show coding stats" +task :doc => [ :appdoc, :stats ] + + +# Look up tests for recently modified sources. +def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago) + FileList[source_pattern].map do |path| + if File.mtime(path) > touched_since + test = "#{test_path}/#{File.basename(path, '.rb')}_test.rb" + test if File.exists?(test) + end + end.compact +end + +desc 'Test recent changes.' +Rake::TestTask.new(:recent => [ :clone_structure_to_test ]) do |t| + since = TEST_CHANGES_SINCE + touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } + + recent_tests('app/models/*.rb', 'test/unit', since) + + recent_tests('app/controllers/*.rb', 'test/functional', since) + + t.libs << 'test' + t.verbose = true + t.test_files = touched.uniq +end +task :test_recent => [ :clone_structure_to_test ] + +desc "Run the unit tests in test/unit" +Rake::TestTask.new("test_units") { |t| + t.libs << "test" + t.pattern = 'test/unit/**/*_test.rb' + t.verbose = true +} +task :test_units => [ :clone_structure_to_test ] + +desc "Run the functional tests in test/functional" +Rake::TestTask.new("test_functional") { |t| + t.libs << "test" + t.pattern = 'test/functional/**/*_test.rb' + t.verbose = true +} +task :test_functional => [ :clone_structure_to_test ] + +desc "Generate documentation for the application" +Rake::RDocTask.new("appdoc") { |rdoc| + rdoc.rdoc_dir = 'doc/app' + rdoc.title = "Rails Application Documentation" + rdoc.options << '--line-numbers --inline-source' + rdoc.rdoc_files.include('doc/README_FOR_APP') + rdoc.rdoc_files.include('app/**/*.rb') +} + +desc "Generate documentation for the Rails framework" +Rake::RDocTask.new("apidoc") { |rdoc| + rdoc.rdoc_dir = 'doc/api' + rdoc.template = "#{ENV['template']}.rb" if ENV['template'] + rdoc.title = "Rails Framework Documentation" + rdoc.options << '--line-numbers --inline-source' + rdoc.rdoc_files.include('README') + rdoc.rdoc_files.include('CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/railties/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/railties/MIT-LICENSE') + rdoc.rdoc_files.include('vendor/rails/activerecord/README') + rdoc.rdoc_files.include('vendor/rails/activerecord/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/activerecord/lib/active_record/**/*.rb') + rdoc.rdoc_files.exclude('vendor/rails/activerecord/lib/active_record/vendor/*') + rdoc.rdoc_files.include('vendor/rails/actionpack/README') + rdoc.rdoc_files.include('vendor/rails/actionpack/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_controller/**/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_view/**/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionmailer/README') + rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/README') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/api/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/client/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/container/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/dispatcher/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/protocol/*.rb') + rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/support/*.rb') + rdoc.rdoc_files.include('vendor/rails/activesupport/README') + rdoc.rdoc_files.include('vendor/rails/activesupport/CHANGELOG') + rdoc.rdoc_files.include('vendor/rails/activesupport/lib/active_support/**/*.rb') +} + +desc "Report code statistics (KLOCs, etc) from the application" +task :stats => [ :environment ] do + require 'code_statistics' + CodeStatistics.new( + ["Helpers", "app/helpers"], + ["Controllers", "app/controllers"], + ["APIs", "app/apis"], + ["Components", "components"], + ["Functionals", "test/functional"], + ["Models", "app/models"], + ["Units", "test/unit"] + ).to_s +end + +desc "Recreate the test databases from the development structure" +task :clone_structure_to_test => [ :db_structure_dump, :purge_test_database ] do + abcs = ActiveRecord::Base.configurations + case abcs["test"]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(:test) + ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0') + IO.readlines("db/#{RAILS_ENV}_structure.sql").join.split("\n\n").each do |table| + ActiveRecord::Base.connection.execute(table) + end + when "postgresql" + ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"] + ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"] + ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"] + `psql -U "#{abcs["test"]["username"]}" -f db/#{RAILS_ENV}_structure.sql #{abcs["test"]["database"]}` + when "sqlite", "sqlite3" + `#{abcs[RAILS_ENV]["adapter"]} #{abcs["test"]["dbfile"]} < db/#{RAILS_ENV}_structure.sql` + when "sqlserver" + `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql` + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" + end +end + +desc "Dump the database structure to a SQL file" +task :db_structure_dump => :environment do + abcs = ActiveRecord::Base.configurations + case abcs[RAILS_ENV]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(abcs[RAILS_ENV]) + File.open("db/#{RAILS_ENV}_structure.sql", "w+") { |f| f << ActiveRecord::Base.connection.structure_dump } + when "postgresql" + ENV['PGHOST'] = abcs[RAILS_ENV]["host"] if abcs[RAILS_ENV]["host"] + ENV['PGPORT'] = abcs[RAILS_ENV]["port"].to_s if abcs[RAILS_ENV]["port"] + ENV['PGPASSWORD'] = abcs[RAILS_ENV]["password"].to_s if abcs[RAILS_ENV]["password"] + `pg_dump -U "#{abcs[RAILS_ENV]["username"]}" -s -x -O -f db/#{RAILS_ENV}_structure.sql #{abcs[RAILS_ENV]["database"]}` + when "sqlite", "sqlite3" + `#{abcs[RAILS_ENV]["adapter"]} #{abcs[RAILS_ENV]["dbfile"]} .schema > db/#{RAILS_ENV}_structure.sql` + when "sqlserver" + `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /f db\\#{RAILS_ENV}_structure.sql /q /A /r` + `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /F db\ /q /A /r` + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" + end +end + +desc "Empty the test database" +task :purge_test_database => :environment do + abcs = ActiveRecord::Base.configurations + case abcs["test"]["adapter"] + when "mysql" + ActiveRecord::Base.establish_connection(:test) + ActiveRecord::Base.connection.recreate_database(abcs["test"]["database"]) + when "postgresql" + ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"] + ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"] + ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"] + `dropdb -U "#{abcs["test"]["username"]}" #{abcs["test"]["database"]}` + `createdb -T template0 -U "#{abcs["test"]["username"]}" #{abcs["test"]["database"]}` + when "sqlite","sqlite3" + File.delete(abcs["test"]["dbfile"]) if File.exist?(abcs["test"]["dbfile"]) + when "sqlserver" + dropfkscript = "#{abcs["test"]["host"]}.#{abcs["test"]["database"]}.DP1".gsub(/\\/,'-') + `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{dropfkscript}` + `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql` + else + raise "Unknown database adapter '#{abcs["test"]["adapter"]}'" + end +end + +desc "Clears all *.log files in log/" +task :clear_logs => :environment do + FileList["log/*.log"].each do |log_file| + f = File.open(log_file, "w") + f.close + end +end + +desc "Migrate the database according to the migrate scripts in db/migrate (only supported on PG/MySQL). A specific version can be targetted with VERSION=x" +task :migrate => :environment do + ActiveRecord::Migrator.migrate(File.dirname(__FILE__) + '/db/migrate/', ENV["VERSION"] ? ENV["VERSION"].to_i : nil) +end + +task :ft => :test_functional +task :ut => :test_unit \ No newline at end of file diff --git a/test/functional/admin_controller_test.rb b/test/functional/admin_controller_test.rb index 3270b08e..886041fd 100644 --- a/test/functional/admin_controller_test.rb +++ b/test/functional/admin_controller_test.rb @@ -195,7 +195,7 @@ class AdminControllerTest < Test::Unit::TestCase orphan_page_linking_to_oak = @wiki.write_page('wiki1', 'Pine', "Refers to [[Oak]].\n" + "category: trees", - Time.now, Author.new('TreeHugger', '127.0.0.2')) + Time.now, Author.new('TreeHugger', '127.0.0.2'), test_renderer) r = process('remove_orphaned_pages', 'web' => 'wiki1', 'system_password_orphaned' => 'pswd') diff --git a/test/functional/file_controller_test.rb b/test/functional/file_controller_test.rb index 01586b09..102ff8d5 100755 --- a/test/functional/file_controller_test.rb +++ b/test/functional/file_controller_test.rb @@ -93,10 +93,11 @@ class FileControllerTest < Test::Unit::TestCase def test_pic_upload_end_to_end # edit and re-render home page so that it has an "unknown file" link to 'rails-e2e.gif' - @wiki.revise_page('wiki1', 'HomePage', '[[instiki-e2e.txt:file]]', Time.now, 'AnonymousBrave') + @wiki.revise_page('wiki1', 'HomePage', '[[instiki-e2e.txt:file]]', Time.now, 'AnonymousBrave', + test_renderer) assert_equal "

instiki-e2e.txt" + "?

", - PageRenderer.new(@home.revisions.last).display_content + test_renderer(@home.revisions.last).display_content # rails-e2e.gif is unknown to the system, so pic action goes to the file [upload] form r = process 'file', 'web' => 'wiki1', 'id' => 'instiki-e2e.txt' @@ -114,7 +115,7 @@ class FileControllerTest < Test::Unit::TestCase @home = Page.find(@home.id) assert_equal "

" + "instiki-e2e.txt

", - PageRenderer.new(@home.revisions.last).display_content + test_renderer(@home.revisions.last).display_content end def test_uploads_blocking diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb index 095a74c1..ea33e717 100755 --- a/test/functional/wiki_controller_test.rb +++ b/test/functional/wiki_controller_test.rb @@ -46,7 +46,7 @@ class WikiControllerTest < Test::Unit::TestCase def test_authors @wiki.write_page('wiki1', 'BreakSortingOrder', "This page breaks the accidentally correct sorting order of authors", - Time.now, Author.new('BreakingTheOrder', '127.0.0.2')) + Time.now, Author.new('BreakingTheOrder', '127.0.0.2'), test_renderer) r = process('authors', 'web' => 'wiki1') @@ -92,9 +92,9 @@ class WikiControllerTest < Test::Unit::TestCase end def test_edit_page_with_special_symbols - @wiki.write_page('wiki1', 'With : Special /> symbols', - 'This page has special symbols in the name', - Time.now, Author.new('Special', '127.0.0.3')) + @wiki.write_page('wiki1', 'With : Special /> symbols', + 'This page has special symbols in the name', Time.now, Author.new('Special', '127.0.0.3'), + test_renderer) r = process 'edit', 'web' => 'wiki1', 'id' => 'With : Special /> symbols' assert_success @@ -104,7 +104,8 @@ class WikiControllerTest < Test::Unit::TestCase end def test_export_html - @home.rollback(0, Time.now, 'Rick') # much simpler regex statement to match + # rollback homepage to a version that is easier to match + @home.rollback(0, Time.now, 'Rick', test_renderer) r = process 'export_html', 'web' => 'wiki1' assert_success(bypass_body_parsing = true) @@ -304,7 +305,7 @@ class WikiControllerTest < Test::Unit::TestCase page2 = @wiki.write_page('wiki1', 'Page2', "Page2 contents.\n" + "category: categorized", - Time.now, Author.new('AnotherAuthor', '127.0.0.2')) + Time.now, Author.new('AnotherAuthor', '127.0.0.2'), test_renderer) r = process('recently_revised', 'web' => 'wiki1') assert_success @@ -384,7 +385,7 @@ class WikiControllerTest < Test::Unit::TestCase def test_rss_with_headlines @title_with_spaces = @wiki.write_page('wiki1', 'Title With Spaces', - 'About spaces', 1.hour.ago, Author.new('TreeHugger', '127.0.0.2')) + 'About spaces', 1.hour.ago, Author.new('TreeHugger', '127.0.0.2'), test_renderer) @request.host = 'localhost' @request.port = 8080 @@ -486,7 +487,7 @@ class WikiControllerTest < Test::Unit::TestCase def test_rss_title_with_ampersand # was ticket:143 @wiki.write_page('wiki1', 'Title&With&Ampersands', - 'About spaces', 1.hour.ago, Author.new('NitPicker', '127.0.0.3')) + 'About spaces', 1.hour.ago, Author.new('NitPicker', '127.0.0.3'), test_renderer) r = process 'rss_with_headlines', 'web' => 'wiki1' @@ -496,7 +497,8 @@ class WikiControllerTest < Test::Unit::TestCase def test_rss_timestamp new_page = @wiki.write_page('wiki1', 'PageCreatedAtTheBeginningOfCtime', - 'Created on 1 Jan 1970 at 0:00:00 Z', Time.at(0), Author.new('NitPicker', '127.0.0.3')) + 'Created on 1 Jan 1970 at 0:00:00 Z', Time.at(0), Author.new('NitPicker', '127.0.0.3'), + test_renderer) r = process 'rss_with_headlines', 'web' => 'wiki1' assert_template_xpath_match '/rss/channel/item/pubDate[9]', "Thu, 01 Jan 1970 00:00:00 Z" @@ -588,7 +590,7 @@ class WikiControllerTest < Test::Unit::TestCase def test_show_page_with_multiple_revisions @wiki.write_page('wiki1', 'HomePage', 'Second revision of the HomePage end', Time.now, - Author.new('AnotherAuthor', '127.0.0.2')) + Author.new('AnotherAuthor', '127.0.0.2'), test_renderer) r = process('show', 'id' => 'HomePage', 'web' => 'wiki1') diff --git a/test/test_helper.rb b/test/test_helper.rb index fcfd4204..f310732a 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -35,12 +35,17 @@ class Test::Unit::TestCase ActiveRecord::Base.silence do (1..30).each do |i| @wiki.write_page('wiki1', "page#{i}", "Test page #{i}\ncategory: test", - Time.local(1976, 10, i, 12, 00, 00), Author.new('Dema', '127.0.0.2')) + Time.local(1976, 10, i, 12, 00, 00), Author.new('Dema', '127.0.0.2'), + test_renderer) end end @web = Web.find(@web.id) end + def test_renderer(revision = nil) + PageRenderer.new(revision) + end + def use_blank_wiki Revision.destroy_all Page.destroy_all diff --git a/test/unit/page_renderer_test.rb b/test/unit/page_renderer_test.rb index 1c71449f..b94212fb 100644 --- a/test/unit/page_renderer_test.rb +++ b/test/unit/page_renderer_test.rb @@ -12,14 +12,14 @@ class PageRendererTest < Test::Unit::TestCase def test_wiki_word_linking @web.add_page('SecondPage', 'Yo, yo. Have you EverBeenHated', - Time.now, 'DavidHeinemeierHansson') + Time.now, 'DavidHeinemeierHansson', test_renderer) assert_equal('

Yo, yo. Have you Ever Been Hated' + '?

', rendered_content(@web.page("SecondPage"))) @web.add_page('EverBeenHated', 'Yo, yo. Have you EverBeenHated', Time.now, - 'DavidHeinemeierHansson') + 'DavidHeinemeierHansson', test_renderer) assert_equal('

Yo, yo. Have you Ever Been Hated

', rendered_content(@web.page("SecondPage"))) @@ -71,18 +71,18 @@ class PageRendererTest < Test::Unit::TestCase def test_wiki_words assert_equal %w( HisWay MyWay SmartEngine SmartEngineGUI ThatWay ), - PageRenderer.new(@revision).wiki_words.sort + test_renderer(@revision).wiki_words.sort - @wiki.write_page('wiki1', 'NoWikiWord', 'hey you!', Time.now, 'Me') - assert_equal [], PageRenderer.new(@wiki.read_page('wiki1', 'NoWikiWord').revisions.last).wiki_words + @wiki.write_page('wiki1', 'NoWikiWord', 'hey you!', Time.now, 'Me', test_renderer) + assert_equal [], test_renderer(@wiki.read_page('wiki1', 'NoWikiWord').revisions.last).wiki_words end def test_existing_pages - assert_equal %w( MyWay SmartEngine ThatWay ), PageRenderer.new(@revision).existing_pages.sort + assert_equal %w( MyWay SmartEngine ThatWay ), test_renderer(@revision).existing_pages.sort end def test_unexisting_pages - assert_equal %w( HisWay SmartEngineGUI ), PageRenderer.new(@revision).unexisting_pages.sort + assert_equal %w( HisWay SmartEngineGUI ), test_renderer(@revision).unexisting_pages.sort end def test_content_with_wiki_links @@ -94,7 +94,7 @@ class PageRendererTest < Test::Unit::TestCase 'Smart Engine in that ' + 'Smart Engine GUI' + '?

', - PageRenderer.new(@revision).display_content + test_renderer(@revision).display_content end def test_markdown @@ -173,7 +173,7 @@ class PageRendererTest < Test::Unit::TestCase assert_equal "hello that Smart Engine GUI" + "?\n\n", - PageRenderer.new(@revision).display_content + test_renderer(@revision).display_content end def test_content_with_auto_links @@ -271,36 +271,36 @@ class PageRendererTest < Test::Unit::TestCase def test_content_for_export assert_equal '

His Way would be ' + - 'My Way in kinda ' + - 'That Way in ' + - 'His Way though ' + - 'My Way OverThere—see ' + - 'Smart Engine in that ' + - 'Smart Engine GUI

', - PageRenderer.new(@revision).display_content_for_export + 'My Way in kinda ' + + 'That Way in ' + + 'His Way though ' + + 'My Way OverThere—see ' + + 'Smart Engine in that ' + + 'Smart Engine GUI

', + test_renderer(@revision).display_content_for_export end def test_double_replacing @revision.content = "VersionHistory\r\n\r\ncry VersionHistory" assert_equal '

Version History' + - "?

\n\n\n\t

cry " + - 'Version History?' + - '

', - PageRenderer.new(@revision).display_content + "?

\n\n\n\t

cry " + + 'Version History?' + + '

', + test_renderer(@revision).display_content @revision.content = "f\r\nVersionHistory\r\n\r\ncry VersionHistory" assert_equal "

f
Version History" + - "?

\n\n\n\t

cry " + - "Version History?" + - "

", - PageRenderer.new(@revision).display_content + "?

\n\n\n\t

cry " + + "Version History?" + + "

", + test_renderer(@revision).display_content end def test_difficult_wiki_words @revision.content = "[[It's just awesome GUI!]]" assert_equal "

It's just awesome GUI!" + - "?

", - PageRenderer.new(@revision).display_content + "?

", + test_renderer(@revision).display_content end def test_revisions_diff @@ -311,7 +311,7 @@ class PageRendererTest < Test::Unit::TestCase assert_equal "

What a blue red " + "and lovely morningmorning " + - "today

", PageRenderer.new(@page.revisions.last).display_diff + "today

", test_renderer(@page.revisions.last).display_diff end def test_link_to_file @@ -373,18 +373,18 @@ class PageRendererTest < Test::Unit::TestCase def add_sample_pages @in_love = @web.add_page('EverBeenInLove', 'Who am I me', - Time.local(2004, 4, 4, 16, 50), 'DavidHeinemeierHansson') + Time.local(2004, 4, 4, 16, 50), 'DavidHeinemeierHansson', test_renderer) @hated = @web.add_page('EverBeenHated', 'I am me EverBeenHated', - Time.local(2004, 4, 4, 16, 51), 'DavidHeinemeierHansson') + Time.local(2004, 4, 4, 16, 51), 'DavidHeinemeierHansson', test_renderer) end def assert_markup_parsed_as(expected_output, input) revision = Revision.new(:page => @page, :content => input, :author => Author.new('AnAuthor')) - assert_equal expected_output, PageRenderer.new(revision).display_content, 'Rendering output not as expected' + assert_equal expected_output, test_renderer(revision).display_content, 'Rendering output not as expected' end def rendered_content(page) - PageRenderer.new(page.revisions.last).display_content + test_renderer(page.revisions.last).display_content end end \ No newline at end of file diff --git a/test/unit/page_test.rb b/test/unit/page_test.rb index b3568271..8b63f67a 100644 --- a/test/unit/page_test.rb +++ b/test/unit/page_test.rb @@ -31,36 +31,43 @@ class PageTest < Test::Unit::TestCase end def test_revise - @page.revise('HisWay would be MyWay in kinda lame', Time.local(2004, 4, 4, 16, 55), 'MarianneSyhler') + @page.revise('HisWay would be MyWay in kinda lame', Time.local(2004, 4, 4, 16, 55), + 'MarianneSyhler', test_renderer) @page.reload assert_equal 2, @page.revisions.length, 'Should have two revisions' - assert_equal 'MarianneSyhler', @page.current_revision.author.to_s, 'Mary should be the author now' - assert_equal 'DavidHeinemeierHansson', @page.revisions.first.author.to_s, 'David was the first author' + assert_equal 'MarianneSyhler', @page.current_revision.author.to_s, + 'Mary should be the author now' + assert_equal 'DavidHeinemeierHansson', @page.revisions.first.author.to_s, + 'David was the first author' end def test_revise_continous_revision - @page.revise('HisWay would be MyWay in kinda lame', Time.local(2004, 4, 4, 16, 55), 'MarianneSyhler') + @page.revise('HisWay would be MyWay in kinda lame', Time.local(2004, 4, 4, 16, 55), + 'MarianneSyhler', test_renderer) @page.reload assert_equal 2, @page.revisions.length assert_equal 'HisWay would be MyWay in kinda lame', @page.content # consecutive revision by the same author within 30 minutes doesn't create a new revision - @page.revise('HisWay would be MyWay in kinda update', Time.local(2004, 4, 4, 16, 57), 'MarianneSyhler') + @page.revise('HisWay would be MyWay in kinda update', Time.local(2004, 4, 4, 16, 57), + 'MarianneSyhler', test_renderer) @page.reload assert_equal 2, @page.revisions.length assert_equal 'HisWay would be MyWay in kinda update', @page.content assert_equal Time.local(2004, 4, 4, 16, 57), @page.revised_at # but consecutive revision by another author results in a new revision - @page.revise('HisWay would be MyWay in the house', Time.local(2004, 4, 4, 16, 58), 'DavidHeinemeierHansson') + @page.revise('HisWay would be MyWay in the house', Time.local(2004, 4, 4, 16, 58), + 'DavidHeinemeierHansson', test_renderer) @page.reload assert_equal 3, @page.revisions.length assert_equal 'HisWay would be MyWay in the house', @page.content # consecutive update after 30 minutes since the last one also creates a new revision, # even when it is by the same author - @page.revise('HisWay would be MyWay in my way', Time.local(2004, 4, 4, 17, 30), 'DavidHeinemeierHansson') + @page.revise('HisWay would be MyWay in my way', Time.local(2004, 4, 4, 17, 30), + 'DavidHeinemeierHansson', test_renderer) @page.reload assert_equal 4, @page.revisions.length end @@ -70,7 +77,7 @@ class PageTest < Test::Unit::TestCase revisions_number_before = @page.revisions.size assert_raises(Instiki::ValidationError) { - @page.revise(@page.current_revision.content, Time.now, 'AlexeyVerkhovsky') + @page.revise(@page.current_revision.content, Time.now, 'AlexeyVerkhovsky', test_renderer) } assert_equal last_revision_before, @page.current_revision(true) @@ -78,11 +85,11 @@ class PageTest < Test::Unit::TestCase end def test_rollback - @page.revise("spot two", Time.now, "David") - @page.revise("spot three", Time.now + 2000, "David") + @page.revise("spot two", Time.now, "David", test_renderer) + @page.revise("spot three", Time.now + 2000, "David", test_renderer) assert_equal 3, @page.revisions(true).length, "Should have three revisions" @page.current_revision(true) - @page.rollback(0, Time.now) + @page.rollback(0, Time.now, '127.0.0.1', test_renderer) assert_equal "HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\\\OverThere -- see SmartEngine in that SmartEngineGUI", @page.current_revision(true).content end end diff --git a/test/unit/web_test.rb b/test/unit/web_test.rb index bfa6edd7..ea08523a 100644 --- a/test/unit/web_test.rb +++ b/test/unit/web_test.rb @@ -61,9 +61,9 @@ class WebTest < Test::Unit::TestCase def test_new_page_linked_from_mother_page # this was a bug in revision 204 home = @web.add_page('HomePage', 'This page refers to AnotherPage', - Time.local(2004, 4, 4, 16, 50), 'Alexey Verkhovsky') + Time.local(2004, 4, 4, 16, 50), 'Alexey Verkhovsky', test_renderer) @web.add_page('AnotherPage', 'This is \AnotherPage', - Time.local(2004, 4, 4, 16, 51), 'Alexey Verkhovsky') + Time.local(2004, 4, 4, 16, 51), 'Alexey Verkhovsky', test_renderer) @web.pages(true) assert_equal [home], @web.select.pages_that_link_to('AnotherPage') @@ -73,13 +73,13 @@ class WebTest < Test::Unit::TestCase add_sample_pages home = @web.add_page('HomePage', 'This is a home page, it should not be an orphan', - Time.local(2004, 4, 4, 16, 50), 'AlexeyVerkhovsky') + Time.local(2004, 4, 4, 16, 50), 'AlexeyVerkhovsky', test_renderer) author = @web.add_page('AlexeyVerkhovsky', 'This is an author page, it should not be an orphan', - Time.local(2004, 4, 4, 16, 50), 'AlexeyVerkhovsky') + Time.local(2004, 4, 4, 16, 50), 'AlexeyVerkhovsky', test_renderer) self_linked = @web.add_page('SelfLinked', 'I am me SelfLinked and link to EverBeenInLove', - Time.local(2004, 4, 4, 16, 50), 'AnonymousCoward') + Time.local(2004, 4, 4, 16, 50), 'AnonymousCoward', test_renderer) # page that links to itself, and nobody else links to it must be an orphan assert_equal ['EverBeenHated', 'SelfLinked'], @@ -90,8 +90,8 @@ class WebTest < Test::Unit::TestCase def add_sample_pages @in_love = @web.add_page('EverBeenInLove', 'Who am I me', - Time.local(2004, 4, 4, 16, 50), 'DavidHeinemeierHansson') + Time.local(2004, 4, 4, 16, 50), 'DavidHeinemeierHansson', test_renderer) @hated = @web.add_page('EverBeenHated', 'I am me EverBeenHated', - Time.local(2004, 4, 4, 16, 51), 'DavidHeinemeierHansson') + Time.local(2004, 4, 4, 16, 51), 'DavidHeinemeierHansson', test_renderer) end end