blob: 45242b0b7bdb1f9de8ce706c260d645ab09a9315 [file] [log] [blame]
require 'simplecov'
SimpleCov.start 'rails'
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require File.dirname(__FILE__) + "/factories"
#require 'md5' # TODO fails after upgrade Rails 3
#require 'feed_validator/assertions' # TODO fails aftwer upgrade Rails 3
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
#fixtures :all
#def login(who)
# Rails.logger.debug("Login: #{who.inspect}")
# open_session do |sess|
# Rails.logger.debug("Opening session")
# sess.post "login/login", :user => {:email => who.email, :password => who.password }
# assert_not_nil sess.assigns(:logged_in_user)
# end
#end
module TestingDSL
# TODO cleanup
end
def login(who)
Rails.logger.debug("Login: #{who.inspect}")
assert_not_nil who.confirmed_on, "User not confirmed"
open_session do |sess|
Rails.logger.debug("Opening session: email: #{who.email}, password: #{who.password}")
u = User.find_by_email(who.email)
assert_not_nil u, "Email #{who.email} not found"
Rails.logger.debug("Hashed password: #{u.hashed_password}")
sess.extend(TestingDSL)
sess.post "login/login", :user => {:email => who.email, :password => who.password }
assert_not_nil sess.assigns(:logged_in_user) # TODO enable
end
end
# Method #create_some_data creates some test records for a page (Comment, Checkout, Upload, New Page)
def create_some_data(p, u = @andy)
for i in 0..15
c= Comment.new(:text => "Text of comment #{i} by user tony", :user => u, :version => p.current_version, :page => p, :site => p.site)
assert c.save
co = Checkout.new(:user => u, :page => p, :site => p.site, :note => "Checkout #{i} by Andy")
assert co.save
co.checkin(u)
upl = Upload.new(:filename => 'filename.html', :upload_type => 'Image',
:content_type => 'Content type', :description => 'Description of upload',
:user_id => u.id, :rel_path => 'x/y/z.html')
assert upl.save
new_page2, new_co2 = WikiPage.new_using_template(:presentation_name => 'New Page Using Another Page as a Template', :source_version => p.current_version, :user => u, :site => p.site)
assert_no_errors(new_page2)
assert_no_errors(new_co2)
new_co2.checkin(u)
end
end
def assert_field(name)
assert_tag :tag => "input", :attributes => {:id => name}
end
def assert_no_field(name)
assert_no_tag :tag => "input", :attributes => {:id => name}
end
def assert_wiki_menu(wiki, page, html, action)
result_expected = []
result_expected << ["", '/' + wiki.rel_path + '/' + page.rel_path, "View"]
result_expected << ["", "/#{wiki.site_folder}/#{page.id}/discussion", "Discussion"]
result_expected << ["", "/#{wiki.site_folder}/#{page.id}/edit", "Edit"]
result_expected << ["", "/#{wiki.site_folder}/#{page.id}/new", "New"]
result_expected << ["", "/#{wiki.site_folder}/#{page.id}/info", "Info"]
result_expected << ["", "/", "Home"]
result_expected.each do |r|
r[0] = " class=\"current\"" if r[2] == action
end
result = html.scan(/<a href="(.*?)".*?<span>(.*?)<\/span>/)
assert result_expected, result
if action == 'edit'
# TODO implement functional test for confirm message
end
end
def assert_errors(object = nil)
if object
object.errors.full_messages.each do |message|
assert_tag :content => message
end
else
assert_tag error_message_field
end
end
def assert_no_errors(object = nil) # TODO when there are errors this will fail with no method defined on assert_no_tag
if object
object.errors.full_messages.each do |message|
#assert_no_tag :content => message
#assert_no_tag :
assert_no_tag message
end
else
assert_no_tag error_message_field
end
end
def assert_pattern(pat, html, result)
html =~ pat
assert_equal result, $&
end
def error_message_field
{:tag => 'div', :attributes => { :class => 'errorExplanation', :id => 'errorExplanation' }}
end
def assert_save(object)
if !object.save
assert_equal '', object.errors.full_messages.join(", ")
end
end
def assert_enhanced_file(path)
html = IO.readlines(path).join
# r = [html.include?("<!-- epfwiki head start -->"), html.include?("onload"), html.include?("<!-- epfwiki head end -->")]
# onload is not necessary anymore, this is now included in wiki.js
r = [html.include?("<!-- epfwiki head start -->"), true, html.include?("<!-- epfwiki head end -->")]
Rails.logger.debug "assert_enhanced_file: #{r.join(',')} for #{path}"
assert_equal [true, true, true], r
end
def assert_version_file(path)
html = IO.readlines(path).join
Rails.logger.debug('html: ' + html)
assert_equal [path, false,true, true], [path, html.include?('<!-- epfwiki head start -->'), html.include?('<body>'), html.include?("<div id=\"treebrowser_tag_placeholder\">")]
end
def assert_tologin
#assert_equal ::MSG_LOGIN, flash['notice']
assert_equal @request.fullpath, session["return_to"]
assert_redirected_to :controller => 'login'
end
def assert_unot_admin_message
assert_equal LoginController::FLASH_UNOT_ADMIN, flash['error']
assert_redirected_to :controller => "other", :action => "error"
end
def assert_unot_cadmin_message
assert_equal LoginController::FLASH_UNOT_CADMIN, flash['error']
assert_redirected_to :controller => "other", :action => "error"
end
def assert_illegal_get
assert_redirected_to :controller => 'other', :action => 'error'
assert Utils::FLASH_USE_POST_NOT_GET, flash['error']
end
def copyright_files(path)
paths = Array.new
(Dir.entries(path) - [".", ".."]).each do |entry|
new_path = File.expand_path(entry, path)
if FileTest.directory?(new_path)
paths = paths + copyright_files(new_path)
else
if entry =~ /\.rb\z/i
paths << new_path
end
end
end
return paths
end
# Test helper integration tests
def assert_page_success(page, user = nil)
w = page.site
get page.url # e.g. /development_wikis/mywiki/new/guidances/toolmentors/toolmentor_template_E9930C53.html
assert_response :success, "assert_page_success View #{page.url}"
id = (w.rel_path + '/' + page.rel_path).gsub('/', '_').gsub('.','_') # id allows us to cache the requests (pages)
#http://localhost:3000/pages/view/_development_wikis_mywiki_new_guidances_toolmentors_toolmentor_template_E9930C53_html.js?url=http://localhost:3000/development_wikis/mywiki/new/guidances/toolmentors/toolmentor_template_E9930C53.html
url = "pages/view/_#{id}.js?url=#{page.url}"
get url
assert_response :success, "Not success: view #{page.url} AJAX"
# TODO Workaround implemented for Rails destroying session
if user
Rails.logger.info("LOGIN")
post 'login/login', :user => {:email => user.email, :password => 'secret'}
else
Rails.logger.info("NO LOGIN")
end
get "#{w.folder}/#{page.id}/discussion"
assert_response :success, "Not success: discussion #{page.url}!"
#Rails.logger.info("assert_page_success Edit #{page.url}")
get "#{w.folder}/#{page.id}/edit"
assert_redirected_to :controller => 'pages', :action => 'checkout', :id => page.id, :site_folder => w.folder
get "#{w.folder}/#{page.id}/new"
assert_response :success, "Not success: new #{page.url}"
get "#{w.folder}/#{page.id}/history"
assert_response :success, "Not success: history #{page.url}"
end
def session_user
User.find(session['user']) if session and session['user']
end
end