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.join(File.dirname(__FILE__), '..', 'config', 'environment')) require 'test_help' 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 class ActiveSupport::TestCase self.pre_loaded_fixtures = false self.use_transactional_fixtures = true self.use_instantiated_fixtures = false self.fixture_path = Rails.root.join('test', 'fixtures', '') end # activate PageObserver PageObserver.instance class Test::Unit::TestCase def create_fixtures(*table_names) Fixtures.create_fixtures(Rails.root.join('test', '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'), x_test_renderer) end end @web = Web.find(@web.id) end def x_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 attr_reader :web include ChunkManager def initialize(str) super init_chunk_manager @web = Object.new class << @web def address 'wiki1' end end end def url_generator StubUrlGenerator.new 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| content.chunks.each do |c| assert c.kind_of?(chunk_type) assert_respond_to(c, a_method) assert_equal(expected_value, c.send(a_method.to_sym), "Wrong #{a_method} value") end 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 url_for(hash = {}) if(hash[:action] == 'list') "/#{hash[:web]}/list" else '../files/pngs' end 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) title = web_address == 'wiki1' ? '' : " title='#{web_address}'" case mode when :export if known_page then %{#{text}} else %{#{text}} end when :publish if known_page then %{#{text}} else %{#{text}} end else if known_page if web_address == 'instiki' %{#{text}} else %{#{text}} end 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 def media_link(mode, name, text, web_address, known_media, media_type) link = CGI.escape(name) text = CGI.escapeHTML(CGI.unescapeHTML(text || :description)) case mode.to_sym when :export if known_media %{<#{media_type} src="#{CGI.escape(name)}" controls="controls">#{text}} else text end when :publish if known_media %{<#{media_type} src="../file/#{link}" controls="controls">#{text}} else %{#{text}} end else if known_media %{<#{media_type} src="../file/#{link}" controls="controls">#{text}} else %{#{text}?} 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