##// END OF EJS Templates
Replace Date.today with User.current.today (#22320)....
Replace Date.today with User.current.today (#22320). Depending on the offset between a user's configured timezone and the server timezone, Date.today may be more or less often wrong from the user's perspective, leading to things like issues marked as overdue too early or too late, or yesterday / tomorrow being displayed / selected where 'today' is intended. A test case illustrating the problem with Issue#overdue? is included Patch by Jens Kraemer. git-svn-id: http://svn.redmine.org/redmine/trunk@15379 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r14856:cda9c63d9c21
r14997:ed50d42210ea
Show More
test_helper.rb
363 lines | 10.3 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Fixes subversion tests not running on win32....
r5055 # Redmine - project management software
Jean-Philippe Lang
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 Jean-Philippe Lang
Jean-Philippe Lang
v0.2.0...
r5 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r6003 #
Jean-Philippe Lang
v0.2.0...
r5 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r6003 #
Jean-Philippe Lang
v0.2.0...
r5 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Jean-Philippe Lang
Use simplecov for code coverage, rcov does not support ruby>=1.9....
r13309 if ENV["COVERAGE"]
require 'simplecov'
require File.expand_path(File.dirname(__FILE__) + "/coverage/html_formatter")
SimpleCov.formatter = Redmine::Coverage::HtmlFormatter
SimpleCov.start 'rails'
end
Jean-Philippe Lang
Makes the test LDAP host configurable (#21674)....
r14706 $redmine_test_ldap_server = ENV['REDMINE_TEST_LDAP_SERVER'] || '127.0.0.1'
Eric Davis
Force the test RAILS_ENV to help prevent purging data when mistyping. #4572...
r3726 ENV["RAILS_ENV"] = "test"
Jean-Philippe Lang
Initial commit...
r2 require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 require 'rails/test_help'
Toshi MARUYAMA
Ruby 1.9: fix tests error due to require path at test/test_helper.rb...
r7682 require Rails.root.join('test', 'mocks', 'open_id_authentication_mock.rb').to_s
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
Renamed object_daddy_helper and removed exemplars....
r9336 require File.expand_path(File.dirname(__FILE__) + '/object_helpers')
include ObjectHelpers
Eric Davis
Updated some object_daddy exemplars for the Models....
r2823
Jean-Philippe Lang
Need to require net/ldap in tests (#18192)....
r13139 require 'net/ldap'
Jean-Philippe Lang
Upgrade to Rails 4.2.0 (#14534)....
r13510 require 'mocha/setup'
Toshi MARUYAMA
adjust tests to awesome_nested_set new node lft and rgt value behavior change...
r12418
Jean-Philippe Lang
Adds a configuration setting to enable sudo mode, disabled by default (#19851)....
r13954 Redmine::SudoMode.disable!
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 class ActionView::TestCase
helper :application
include ApplicationHelper
end
Eric Davis
Upgraded to Rails 2.3.4 (#3597)...
r2773 class ActiveSupport::TestCase
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 include ActionDispatch::TestProcess
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
Removed default comments....
r11027 self.use_transactional_fixtures = true
Jean-Philippe Lang
Initial commit...
r2 self.use_instantiated_fixtures = false
Jean-Philippe Lang
Renames uploaded_test_file helper....
r2795 def uploaded_test_file(name, mime)
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 fixture_file_upload("files/#{name}", mime, true)
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 end
Eric Davis
Refactor: extract test method...
r3659
# Mock out a file
Eric Davis
Fix the mock_file test helper....
r3896 def self.mock_file
Eric Davis
Refactor: extract test method...
r3659 file = 'a_file.png'
file.stubs(:size).returns(32)
file.stubs(:original_filename).returns('a_file.png')
file.stubs(:content_type).returns('image/png')
file.stubs(:read).returns(false)
file
end
Eric Davis
Fix the mock_file test helper....
r3896
def mock_file
self.class.mock_file
end
Toshi MARUYAMA
fix inconsistent image filename extensions (#9638)...
r7771 def mock_file_with_options(options={})
file = ''
file.stubs(:size).returns(32)
original_filename = options[:original_filename] || nil
file.stubs(:original_filename).returns(original_filename)
content_type = options[:content_type] || nil
file.stubs(:content_type).returns(content_type)
file.stubs(:read).returns(false)
file
end
Jean-Philippe Lang
File viewer for attached text files....
r1506 # Use a temporary directory for attachment related tests
def set_tmp_attachments_directory
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root in test/test_helper.rb....
r5961 Dir.mkdir "#{Rails.root}/tmp/test" unless File.directory?("#{Rails.root}/tmp/test")
unless File.directory?("#{Rails.root}/tmp/test/attachments")
Dir.mkdir "#{Rails.root}/tmp/test/attachments"
end
Attachment.storage_path = "#{Rails.root}/tmp/test/attachments"
Jean-Philippe Lang
File viewer for attached text files....
r1506 end
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root in test/test_helper.rb....
r5961
Jean-Philippe Lang
Make sure that tests restore the attachments path to the tmp dir so that fixture files don't get deleted....
r8128 def set_fixtures_attachments_directory
Attachment.storage_path = "#{Rails.root}/test/fixtures/files"
end
Jean-Philippe Lang
Limit the size of repository files displayed inline too....
r2442 def with_settings(options, &block)
Jean-Philippe Lang
Possibility to define the default enable trackers when creating a project (#13175)....
r11164 saved_settings = options.keys.inject({}) do |h, k|
h[k] = case Setting[k]
when Symbol, false, true, nil
Setting[k]
else
Setting[k].dup
end
h
end
Jean-Philippe Lang
Limit the size of repository files displayed inline too....
r2442 options.each {|k, v| Setting[k] = v}
yield
Jean-Philippe Lang
Restore settings even if a test failure occurs....
r5107 ensure
Jean-Philippe Lang
Sort the issue list by author/assignee according to user display format (#9669)....
r7818 saved_settings.each {|k, v| Setting[k] = v} if saved_settings
Jean-Philippe Lang
Limit the size of repository files displayed inline too....
r2442 end
Eric Davis
Added some shoulda macros for testing....
r3155
Jean-Philippe Lang
Adds links to locked users when current user is admin....
r10462 # Yields the block with user as the current user
def with_current_user(user, &block)
saved_user = User.current
User.current = user
yield
ensure
User.current = saved_user
end
Jean-Philippe Lang
Fixed: Export CSV - Custom field true/false not using translation (#16081)....
r12621 def with_locale(locale, &block)
saved_localed = ::I18n.locale
::I18n.locale = locale
yield
ensure
::I18n.locale = saved_localed
end
Eric Davis
Added some tests for the LDAP authentication....
r3324 def self.ldap_configured?
Jean-Philippe Lang
Makes the test LDAP host configurable (#21674)....
r14706 @test_ldap = Net::LDAP.new(:host => $redmine_test_ldap_server, :port => 389)
Eric Davis
Added some tests for the LDAP authentication....
r3324 return @test_ldap.bind
Jean-Philippe Lang
Fixed: unit tests broken by r3438 (#4860)....
r3328 rescue Exception => e
# LDAP is not listening
return nil
Eric Davis
Added some tests for the LDAP authentication....
r3324 end
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r5983
Jean-Philippe Lang
Displays thumbnails of attached images of the issue view (#1006)....
r9750 def self.convert_installed?
Jean-Philippe Lang
Test if convert binary is available....
r9831 Redmine::Thumbnail.convert_available?
Jean-Philippe Lang
Displays thumbnails of attached images of the issue view (#1006)....
r9750 end
Jean-Philippe Lang
Allow attachment thumbnails from REST API (#18707)....
r13424 def convert_installed?
self.class.convert_installed?
end
Jean-Philippe Lang
Adds test helpers for test repositories....
r3606 # Returns the path to the test +vendor+ repository
def self.repository_path(vendor)
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 path = Rails.root.join("tmp/test/#{vendor.downcase}_repository").to_s
# Unlike ruby, JRuby returns Rails.root with backslashes under Windows
path.tr("\\", "/")
Jean-Philippe Lang
Adds test helpers for test repositories....
r3606 end
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r5983
Toshi MARUYAMA
Fix typo in test/test_helper.rb....
r5062 # Returns the url of the subversion test repository
Jean-Philippe Lang
Fixes subversion tests not running on win32....
r5055 def self.subversion_repository_url
path = repository_path('subversion')
path = '/' + path unless path.starts_with?('/')
"file://#{path}"
end
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r5983
Jean-Philippe Lang
Adds test helpers for test repositories....
r3606 # Returns true if the +vendor+ test repository is configured
def self.repository_configured?(vendor)
File.directory?(repository_path(vendor))
end
Toshi MARUYAMA
replace RAILS_ROOT to Rails.root at test/test_helper.rb....
r5983
Toshi MARUYAMA
Rails3: test: scm: move "repository_path_hash" method in repositories routing test to test_helper.rb for common use...
r8803 def repository_path_hash(arr)
hs = {}
hs[:path] = arr.join("/")
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 hs[:param] = arr.join("/")
Toshi MARUYAMA
Rails3: test: scm: move "repository_path_hash" method in repositories routing test to test_helper.rb for common use...
r8803 hs
end
Jean-Philippe Lang
Missing test helper (#18537)....
r13379 def sqlite?
ActiveRecord::Base.connection.adapter_name =~ /sqlite/i
end
Jean-Philippe Lang
Restore accent insensitive search with mysql (#18537)....
r13385 def mysql?
ActiveRecord::Base.connection.adapter_name =~ /mysql/i
end
Jean-Philippe Lang
Support for accent insensitive search with PostgreSQL (#18801)....
r13607 def postgresql?
ActiveRecord::Base.connection.adapter_name =~ /postgresql/i
end
Jean-Philippe Lang
Fixed assertions for SQLServer that format dates with MM/DD/YYYY in queries....
r13610 def quoted_date(date)
date = Date.parse(date) if date.is_a?(String)
ActiveRecord::Base.connection.quoted_date(date)
end
Jean-Philippe Lang
Replace tab introduced in r14388 in test/test_helper.rb with spaces (#20242)....
r14030 # Asserts that a new record for the given class is created
# and returns it
Jean-Philippe Lang
Fixed that user with "Manage public queries" permission, can create global public query (#19842)....
r14006 def new_record(klass, &block)
Jean-Philippe Lang
Import issues from CSV file (#950)....
r14111 new_records(klass, 1, &block).first
end
# Asserts that count new records for the given class are created
# and returns them as an array order by object id
def new_records(klass, count, &block)
assert_difference "#{klass}.count", count do
Jean-Philippe Lang
Fixed that user with "Manage public queries" permission, can create global public query (#19842)....
r14006 yield
end
Jean-Philippe Lang
Import issues from CSV file (#950)....
r14111 klass.order(:id => :desc).limit(count).to_a.reverse
Jean-Philippe Lang
Fixed that user with "Manage public queries" permission, can create global public query (#19842)....
r14006 end
Jean-Philippe Lang
Adds a setting to allow subtasks to belong to other projects (#5487)....
r10376 def assert_save(object)
saved = object.save
message = "#{object.class} could not be saved"
errors = object.errors.full_messages.map {|m| "- #{m}"}
message << ":\n#{errors.join("\n")}" if errors.any?
assert_equal true, saved, message
end
Jean-Philippe Lang
Replaced remaining #assert_tag with #assert_select....
r13242 def assert_select_error(arg)
assert_select '#errorExplanation', :text => arg
Jean-Philippe Lang
Refactor: merged error rendering methods....
r4172 end
Toshi MARUYAMA
remove trailing white-spaces from test/test_helper.rb....
r6826
Jean-Philippe Lang
Removes RJS from UsersController....
r9876 def assert_include(expected, s, message=nil)
assert s.include?(expected), (message || "\"#{expected}\" not found in \"#{s}\"")
Jean-Philippe Lang
Adds "between" operator for numeric filters (#6180)....
r6097 end
Eric Davis
Added some tests for the LDAP authentication....
r3324
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 def assert_not_include(expected, s, message=nil)
assert !s.include?(expected), (message || "\"#{expected}\" found in \"#{s}\"")
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 end
Jean-Philippe Lang
Adds a macro for inserting collapsed text (#12167)....
r10469 def assert_select_in(text, *args, &block)
Jean-Philippe Lang
Upgrade to Rails 4.2.0 (#14534)....
r13510 d = Nokogiri::HTML(CGI::unescapeHTML(String.new(text))).root
Jean-Philippe Lang
Adds a macro for inserting collapsed text (#12167)....
r10469 assert_select(d, *args, &block)
end
Jean-Philippe Lang
Upgrade to Rails 4.2.0 (#14534)....
r13510 def assert_select_email(*args, &block)
email = ActionMailer::Base.deliveries.last
assert_not_nil email
html_body = email.parts.detect {|part| part.content_type.include?('text/html')}.try(&:body)
assert_not_nil html_body
assert_select_in html_body.encoded, *args, &block
end
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 def assert_mail_body_match(expected, mail, message=nil)
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 if expected.is_a?(String)
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 assert_include expected, mail_body(mail), message
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 else
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 assert_match expected, mail_body(mail), message
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 end
end
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 def assert_mail_body_no_match(expected, mail, message=nil)
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 if expected.is_a?(String)
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 assert_not_include expected, mail_body(mail), message
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 else
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 assert_no_match expected, mail_body(mail), message
Jean-Philippe Lang
Adds helpers for testing email body....
r8966 end
end
Jean-Philippe Lang
Adds an helper to get the body of an email in tests....
r8972 def mail_body(mail)
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 mail.parts.first.body.encoded
Jean-Philippe Lang
Adds an helper to get the body of an email in tests....
r8972 end
Toshi MARUYAMA
adjust tests to awesome_nested_set new node lft and rgt value behavior change...
r12418
Toshi MARUYAMA
replace tab to space at test/test_helper.rb...
r13472 # Returns the lft value for a new root issue
Toshi MARUYAMA
adjust tests to awesome_nested_set new node lft and rgt value behavior change...
r12418 def new_issue_lft
Jean-Philippe Lang
Replaces awesome_nested_set gem with a simple and more robust implementation of nested sets....
r13459 1
Toshi MARUYAMA
adjust tests to awesome_nested_set new node lft and rgt value behavior change...
r12418 end
Jean-Philippe Lang
Adds a subclass of ActionDispatch::IntegrationTest for API tests....
r11023 end
Eric Davis
Added unit tests for IssuesHelper#show_detail...
r3438
Jean-Philippe Lang
Adds a subclass of ActionDispatch::IntegrationTest for API tests....
r11023 module Redmine
Jean-Philippe Lang
Isolates all API routing tests to a specific test case....
r13222 class RoutingTest < ActionDispatch::IntegrationTest
def should_route(arg)
arg = arg.dup
request = arg.keys.detect {|key| key.is_a?(String)}
raise ArgumentError unless request
options = arg.slice!(request)
raise ArgumentError unless request =~ /\A(GET|POST|PUT|PATCH|DELETE)\s+(.+)\z/
method, path = $1.downcase.to_sym, $2
raise ArgumentError unless arg.values.first =~ /\A(.+)#(.+)\z/
controller, action = $1, $2
assert_routing(
{:method => method, :path => path},
options.merge(:controller => controller, :action => action)
)
end
end
Jean-Philippe Lang
Moved helpers for integration tests in a specific class....
r13298 class IntegrationTest < ActionDispatch::IntegrationTest
def log_user(login, password)
User.anonymous
get "/login"
assert_equal nil, session[:user_id]
assert_response :success
assert_template "account/login"
post "/login", :username => login, :password => password
assert_equal login, User.find(session[:user_id]).login
end
def credentials(user, password=nil)
{'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)}
end
end
Jean-Philippe Lang
Adds a subclass of ActionDispatch::IntegrationTest for API tests....
r11023 module ApiTest
Jean-Philippe Lang
Isolates all API routing tests to a specific test case....
r13222 API_FORMATS = %w(json xml).freeze
Jean-Philippe Lang
Adds a subclass of ActionDispatch::IntegrationTest for API tests....
r11023 # Base class for API tests
Jean-Philippe Lang
Moved helpers for integration tests in a specific class....
r13298 class Base < Redmine::IntegrationTest
Jean-Philippe Lang
Pull up #setup and #teardown in API tests....
r13297 def setup
Setting.rest_api_enabled = '1'
end
def teardown
Setting.rest_api_enabled = '0'
end
Jean-Philippe Lang
Adds tests for creating an issue with multiple uploads....
r13409
# Uploads content using the XML API and returns the attachment token
def xml_upload(content, credentials)
upload('xml', content, credentials)
end
# Uploads content using the JSON API and returns the attachment token
def json_upload(content, credentials)
upload('json', content, credentials)
end
def upload(format, content, credentials)
set_tmp_attachments_directory
assert_difference 'Attachment.count' do
post "/uploads.#{format}", content, {"CONTENT_TYPE" => 'application/octet-stream'}.merge(credentials)
assert_response :created
end
data = response_data
assert_kind_of Hash, data['upload']
token = data['upload']['token']
assert_not_nil token
token
end
# Parses the response body based on its content type
def response_data
unless response.content_type.to_s =~ /^application\/(.+)/
raise "Unexpected response type: #{response.content_type}"
end
format = $1
case format
when 'xml'
Hash.from_xml(response.body)
when 'json'
ActiveSupport::JSON.decode(response.body)
else
raise "Unknown response format: #{format}"
end
end
Jean-Philippe Lang
Makes the API accepts the X-Redmine-API-Key header to hold the API key....
r4459 end
Jean-Philippe Lang
Isolates all API routing tests to a specific test case....
r13222
class Routing < Redmine::RoutingTest
def should_route(arg)
arg = arg.dup
request = arg.keys.detect {|key| key.is_a?(String)}
raise ArgumentError unless request
options = arg.slice!(request)
API_FORMATS.each do |format|
format_request = request.sub /$/, ".#{format}"
super options.merge(format_request => arg[request], :format => format)
end
end
end
Eric Davis
Refactor: convert api key tests to shoulda macros for reuse. #6447...
r4244 end
Eric Davis
Move all API tests into the ApiTest module to make management easier...
r4243 end