ENV['RAILS_ENV'] = 'test' # Expand the path to environment so that Ruby does not load it multiple times # File.expand_path can be removed if Ruby 1.9 is in use. require File.expand_path(File.dirname(__FILE__) + '/../config/environment') require 'application' require 'test/unit' require 'active_record/fixtures' require 'action_controller/test_process' require 'wiki_content' require 'url_generator' require 'digest/sha1' # simulates cookie session store class FakeSessionDbMan def self.generate_digest(data) Digest::SHA1.hexdigest("secure") end end Test::Unit::TestCase.pre_loaded_fixtures = false Test::Unit::TestCase.use_transactional_fixtures = true Test::Unit::TestCase.use_instantiated_fixtures = false Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/" # activate PageObserver PageObserver.instance class Test::Unit::TestCase def create_fixtures(*table_names) Fixtures.create_fixtures(File.dirname(__FILE__) + "/fixtures", table_names) end # Add more helper methods to be used by all tests here... def set_web_property(property, value) @web.update_attribute(property, value) @page = Page.find(@page.id) @wiki.webs[@web.name] = @web end def setup_wiki_with_30_pages 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'), test_renderer) end end @web = Web.find(@web.id) end def test_renderer(revision = nil) PageRenderer.setup_url_generator(StubUrlGenerator.new) PageRenderer.new(revision) end def use_blank_wiki Revision.destroy_all Page.destroy_all Web.destroy_all end end # This module is to be included in unit tests that involve matching chunks. # It provides a easy way to test whether a chunk matches a particular string # and any the values of any fields that should be set after a match. class ContentStub < String include ChunkManager def initialize(str) super init_chunk_manager end def page_link(*); end end module ChunkMatch # Asserts a number of tests for the given type and text. def match(chunk_type, test_text, expected_chunk_state) if chunk_type.respond_to? :pattern assert_match(chunk_type.pattern, test_text) end content = ContentStub.new(test_text) chunk_type.apply_to(content) # Test if requested parts are correct. expected_chunk_state.each_pair do |a_method, expected_value| assert content.chunks.last.kind_of?(chunk_type) assert_respond_to(content.chunks.last, a_method) assert_equal(expected_value, content.chunks.last.send(a_method.to_sym), "Wrong #{a_method} value") end end # Asserts that test_text doesn't match the chunk_type def no_match(chunk_type, test_text) if chunk_type.respond_to? :pattern assert_no_match(chunk_type.pattern, test_text) end end end class StubUrlGenerator < AbstractUrlGenerator def initialize super(:doesnt_need_controller) end def file_link(mode, name, text, web_name, known_file, description) link = CGI.escape(name) case mode when :export if known_file then %{#{text}} else %{#{text}} end when :publish if known_file then %{#{text}} else %{#{text}} end else if known_file %{#{text}} else %{#{text}?} 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 %{#{text}} else %{#{text}} end when :publish if known_page then %{#{text}} else %{#{text}} end else if known_page %{#{text}} else if web_address == 'instiki' %{#{text}?} else %{#{text}?} end end end end def pic_link(mode, name, text, web_name, known_pic) link = CGI.escape(name) text = CGI.escapeHTML(CGI.unescapeHTML(text || :description)) case mode.to_sym when :export if known_pic then %{#{text}} else %{#{text}} end when :publish if known_pic then %{#{text}} else %{#{text}} end else if known_pic then %{#{text}} else %{#{text}?} end end end end module Test module Unit module Assertions def assert_success(bypass_body_parsing = false) assert_response :success unless bypass_body_parsing assert_nothing_raised(@response.body) { REXML::Document.new(@response.body) } end end end end end