2010-02-23 20:31:17 -05:00
|
|
|
require File.expand_path('../../../load_paths', __FILE__)
|
2009-11-10 00:28:36 -05:00
|
|
|
|
2009-06-15 14:44:45 -04:00
|
|
|
$:.unshift(File.dirname(__FILE__) + '/lib')
|
2005-04-17 02:16:00 -04:00
|
|
|
$:.unshift(File.dirname(__FILE__) + '/fixtures/helpers')
|
2008-11-20 17:05:20 -05:00
|
|
|
$:.unshift(File.dirname(__FILE__) + '/fixtures/alternate_helpers')
|
2004-11-23 20:04:44 -05:00
|
|
|
|
2009-08-13 22:02:49 -04:00
|
|
|
ENV['TMPDIR'] = File.join(File.dirname(__FILE__), 'tmp')
|
|
|
|
|
2010-08-22 17:43:31 -04:00
|
|
|
require 'active_support/core_ext/kernel/reporting'
|
|
|
|
|
2011-12-24 07:57:54 -05:00
|
|
|
# These are the normal settings that will be set up by Railties
|
|
|
|
# TODO: Have these tests support other combinations of these values
|
|
|
|
silence_warnings do
|
|
|
|
Encoding.default_internal = "UTF-8"
|
|
|
|
Encoding.default_external = "UTF-8"
|
2010-05-17 11:41:54 -04:00
|
|
|
end
|
|
|
|
|
2012-12-28 14:17:37 -05:00
|
|
|
require 'active_support/testing/autorun'
|
2009-09-19 13:10:41 -04:00
|
|
|
require 'abstract_controller'
|
2009-06-15 14:44:45 -04:00
|
|
|
require 'action_controller'
|
2009-09-19 13:10:41 -04:00
|
|
|
require 'action_view'
|
2010-05-02 10:20:17 -04:00
|
|
|
require 'action_view/testing/resolvers'
|
2009-09-19 13:10:41 -04:00
|
|
|
require 'action_dispatch'
|
2009-06-15 14:44:45 -04:00
|
|
|
require 'active_support/dependencies'
|
2009-12-16 12:56:51 -05:00
|
|
|
require 'active_model'
|
2010-05-07 01:01:47 -04:00
|
|
|
require 'active_record'
|
|
|
|
require 'action_controller/caching'
|
2009-12-16 12:56:51 -05:00
|
|
|
|
2009-09-19 13:10:41 -04:00
|
|
|
require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late
|
|
|
|
|
2010-06-27 17:53:06 -04:00
|
|
|
module Rails
|
2010-10-22 10:34:45 -04:00
|
|
|
class << self
|
|
|
|
def env
|
|
|
|
@_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "test")
|
|
|
|
end
|
|
|
|
end
|
2010-06-27 17:53:06 -04:00
|
|
|
end
|
|
|
|
|
2009-06-15 14:44:45 -04:00
|
|
|
ActiveSupport::Dependencies.hook!
|
2009-05-20 19:52:56 -04:00
|
|
|
|
2013-01-24 05:10:58 -05:00
|
|
|
Thread.abort_on_exception = true
|
|
|
|
|
2006-09-03 23:38:13 -04:00
|
|
|
# Show backtraces for deprecated behavior for quicker cleanup.
|
|
|
|
ActiveSupport::Deprecation.debug = true
|
|
|
|
|
2009-01-25 23:50:02 -05:00
|
|
|
# Register danish language for testing
|
|
|
|
I18n.backend.store_translations 'da', {}
|
2009-02-07 00:23:50 -05:00
|
|
|
I18n.backend.store_translations 'pt-BR', {}
|
2009-05-14 20:25:10 -04:00
|
|
|
ORIGINAL_LOCALES = I18n.available_locales.map {|locale| locale.to_s }.sort
|
2009-01-25 23:50:02 -05:00
|
|
|
|
2009-06-15 14:50:11 -04:00
|
|
|
FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
|
2009-10-03 23:02:51 -04:00
|
|
|
FIXTURES = Pathname.new(FIXTURE_LOAD_PATH)
|
2009-06-15 14:44:45 -04:00
|
|
|
|
2010-03-19 21:04:00 -04:00
|
|
|
module RackTestUtils
|
|
|
|
def body_to_string(body)
|
|
|
|
if body.respond_to?(:each)
|
|
|
|
str = ""
|
|
|
|
body.each {|s| str << s }
|
|
|
|
str
|
|
|
|
else
|
|
|
|
body
|
|
|
|
end
|
|
|
|
end
|
|
|
|
extend self
|
|
|
|
end
|
|
|
|
|
2010-04-03 05:30:06 -04:00
|
|
|
module RenderERBUtils
|
2011-11-30 09:38:09 -05:00
|
|
|
def view
|
|
|
|
@view ||= begin
|
|
|
|
path = ActionView::FileSystemResolver.new(FIXTURE_LOAD_PATH)
|
|
|
|
view_paths = ActionView::PathSet.new([path])
|
|
|
|
ActionView::Base.new(view_paths)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-04-03 05:30:06 -04:00
|
|
|
def render_erb(string)
|
2011-11-30 10:05:23 -05:00
|
|
|
@virtual_path = nil
|
|
|
|
|
2010-04-03 05:30:06 -04:00
|
|
|
template = ActionView::Template.new(
|
|
|
|
string.strip,
|
|
|
|
"test template",
|
|
|
|
ActionView::Template::Handlers::ERB,
|
|
|
|
{})
|
|
|
|
|
|
|
|
template.render(self, {}).strip
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-02-24 19:01:03 -05:00
|
|
|
SharedTestRoutes = ActionDispatch::Routing::RouteSet.new
|
|
|
|
|
2012-08-09 17:30:26 -04:00
|
|
|
module ActionDispatch
|
|
|
|
module SharedRoutes
|
|
|
|
def before_setup
|
|
|
|
@routes = SharedTestRoutes
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-08-09 17:46:57 -04:00
|
|
|
# Hold off drawing routes until all the possible controller classes
|
|
|
|
# have been loaded.
|
|
|
|
module DrawOnce
|
|
|
|
class << self
|
|
|
|
attr_accessor :drew
|
|
|
|
end
|
|
|
|
self.drew = false
|
|
|
|
|
|
|
|
def before_setup
|
|
|
|
super
|
|
|
|
return if DrawOnce.drew
|
|
|
|
|
2010-08-05 09:44:23 -04:00
|
|
|
SharedTestRoutes.draw do
|
2012-04-24 23:32:09 -04:00
|
|
|
get ':controller(/:action)'
|
2010-02-24 19:01:03 -05:00
|
|
|
end
|
|
|
|
|
2010-09-24 20:15:52 -04:00
|
|
|
ActionDispatch::IntegrationTest.app.routes.draw do
|
2012-04-24 23:32:09 -04:00
|
|
|
get ':controller(/:action)'
|
2010-02-24 19:01:03 -05:00
|
|
|
end
|
2012-08-09 17:46:57 -04:00
|
|
|
|
|
|
|
DrawOnce.drew = true
|
2009-10-04 00:55:35 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-08-09 17:46:57 -04:00
|
|
|
module ActiveSupport
|
|
|
|
class TestCase
|
|
|
|
include ActionDispatch::DrawOnce
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-02-24 19:01:03 -05:00
|
|
|
class RoutedRackApp
|
2010-03-30 15:05:42 -04:00
|
|
|
attr_reader :routes
|
2010-02-24 19:01:03 -05:00
|
|
|
|
2010-03-30 15:05:42 -04:00
|
|
|
def initialize(routes, &blk)
|
|
|
|
@routes = routes
|
|
|
|
@stack = ActionDispatch::MiddlewareStack.new(&blk).build(@routes)
|
2010-02-24 19:01:03 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def call(env)
|
|
|
|
@stack.call(env)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-03-03 20:36:08 -05:00
|
|
|
class BasicController
|
2011-08-30 19:47:01 -04:00
|
|
|
attr_accessor :request
|
2010-03-03 20:36:08 -05:00
|
|
|
|
|
|
|
def config
|
2010-03-03 22:45:08 -05:00
|
|
|
@config ||= ActiveSupport::InheritableOptions.new(ActionController::Base.config).tap do |config|
|
2010-03-03 20:36:08 -05:00
|
|
|
# VIEW TODO: View tests should not require a controller
|
|
|
|
public_dir = File.expand_path("../fixtures/public", __FILE__)
|
|
|
|
config.assets_dir = public_dir
|
|
|
|
config.javascripts_dir = "#{public_dir}/javascripts"
|
|
|
|
config.stylesheets_dir = "#{public_dir}/stylesheets"
|
2011-06-08 02:27:48 -04:00
|
|
|
config.assets = ActiveSupport::InheritableOptions.new({ :prefix => "assets" })
|
2010-03-03 20:36:08 -05:00
|
|
|
config
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-04-24 18:17:30 -04:00
|
|
|
class ActionDispatch::IntegrationTest < ActiveSupport::TestCase
|
2012-08-09 17:30:26 -04:00
|
|
|
include ActionDispatch::SharedRoutes
|
2010-04-24 18:17:30 -04:00
|
|
|
|
2009-10-03 21:45:49 -04:00
|
|
|
def self.build_app(routes = nil)
|
2010-02-24 19:01:03 -05:00
|
|
|
RoutedRackApp.new(routes || ActionDispatch::Routing::RouteSet.new) do |middleware|
|
2011-12-16 03:29:37 -05:00
|
|
|
middleware.use "ActionDispatch::ShowExceptions", ActionDispatch::PublicExceptions.new("#{FIXTURE_LOAD_PATH}/public")
|
2011-12-01 14:46:18 -05:00
|
|
|
middleware.use "ActionDispatch::DebugExceptions"
|
2009-10-03 21:45:49 -04:00
|
|
|
middleware.use "ActionDispatch::Callbacks"
|
|
|
|
middleware.use "ActionDispatch::ParamsParser"
|
2010-01-16 18:21:46 -05:00
|
|
|
middleware.use "ActionDispatch::Cookies"
|
2010-01-15 15:44:27 -05:00
|
|
|
middleware.use "ActionDispatch::Flash"
|
2012-07-23 12:50:48 -04:00
|
|
|
middleware.use "Rack::Head"
|
2010-05-17 19:43:06 -04:00
|
|
|
yield(middleware) if block_given?
|
2010-02-24 19:01:03 -05:00
|
|
|
end
|
2009-10-03 21:45:49 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
self.app = build_app
|
|
|
|
|
2010-07-02 13:13:00 -04:00
|
|
|
# Stub Rails dispatcher so it does not get controller references and
|
|
|
|
# simply return the controller#action as Rack::Body.
|
|
|
|
class StubDispatcher < ::ActionDispatch::Routing::RouteSet::Dispatcher
|
|
|
|
protected
|
|
|
|
def controller_reference(controller_param)
|
|
|
|
controller_param
|
|
|
|
end
|
|
|
|
|
|
|
|
def dispatch(controller, action, env)
|
|
|
|
[200, {'Content-Type' => 'text/html'}, ["#{controller}##{action}"]]
|
2009-10-27 20:48:35 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.stub_controllers
|
|
|
|
old_dispatcher = ActionDispatch::Routing::RouteSet::Dispatcher
|
|
|
|
ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher }
|
|
|
|
ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, StubDispatcher }
|
|
|
|
yield ActionDispatch::Routing::RouteSet.new
|
|
|
|
ensure
|
|
|
|
ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher }
|
|
|
|
ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, old_dispatcher }
|
|
|
|
end
|
|
|
|
|
2009-10-03 21:45:49 -04:00
|
|
|
def with_routing(&block)
|
2010-02-21 11:21:25 -05:00
|
|
|
temporary_routes = ActionDispatch::Routing::RouteSet.new
|
2010-02-24 19:01:03 -05:00
|
|
|
old_app, self.class.app = self.class.app, self.class.build_app(temporary_routes)
|
|
|
|
old_routes = SharedTestRoutes
|
|
|
|
silence_warnings { Object.const_set(:SharedTestRoutes, temporary_routes) }
|
2009-10-03 21:45:49 -04:00
|
|
|
|
|
|
|
yield temporary_routes
|
|
|
|
ensure
|
2010-02-24 19:01:03 -05:00
|
|
|
self.class.app = old_app
|
|
|
|
silence_warnings { Object.const_set(:SharedTestRoutes, old_routes) }
|
2009-10-03 21:45:49 -04:00
|
|
|
end
|
2010-06-27 14:35:31 -04:00
|
|
|
|
|
|
|
def with_autoload_path(path)
|
2010-08-14 01:13:00 -04:00
|
|
|
path = File.join(File.dirname(__FILE__), "fixtures", path)
|
2010-06-27 14:35:31 -04:00
|
|
|
if ActiveSupport::Dependencies.autoload_paths.include?(path)
|
|
|
|
yield
|
|
|
|
else
|
|
|
|
begin
|
|
|
|
ActiveSupport::Dependencies.autoload_paths << path
|
|
|
|
yield
|
|
|
|
ensure
|
|
|
|
ActiveSupport::Dependencies.autoload_paths.reject! {|p| p == path}
|
|
|
|
ActiveSupport::Dependencies.clear
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2009-06-15 14:44:45 -04:00
|
|
|
end
|
|
|
|
|
2009-09-19 13:10:41 -04:00
|
|
|
# Temporary base class
|
2010-09-24 20:15:52 -04:00
|
|
|
class Rack::TestCase < ActionDispatch::IntegrationTest
|
2009-09-19 13:10:41 -04:00
|
|
|
def self.testing(klass = nil)
|
|
|
|
if klass
|
|
|
|
@testing = "/#{klass.name.underscore}".sub!(/_controller$/, '')
|
|
|
|
else
|
|
|
|
@testing
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def get(thing, *args)
|
|
|
|
if thing.is_a?(Symbol)
|
|
|
|
super("#{self.class.testing}/#{thing}", *args)
|
|
|
|
else
|
|
|
|
super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_body(body)
|
2012-01-05 15:18:54 -05:00
|
|
|
assert_equal body, Array(response.body).join
|
2009-09-19 13:10:41 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def assert_status(code)
|
|
|
|
assert_equal code, response.status
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_response(body, status = 200, headers = {})
|
2012-01-05 15:18:54 -05:00
|
|
|
assert_body body
|
2009-09-19 13:10:41 -04:00
|
|
|
assert_status status
|
|
|
|
headers.each do |header, value|
|
|
|
|
assert_header header, value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_content_type(type)
|
|
|
|
assert_equal type, response.headers["Content-Type"]
|
|
|
|
end
|
|
|
|
|
|
|
|
def assert_header(name, value)
|
|
|
|
assert_equal value, response.headers[name]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-06-15 14:44:45 -04:00
|
|
|
module ActionController
|
|
|
|
class Base
|
|
|
|
include ActionController::Testing
|
2010-09-24 20:24:55 -04:00
|
|
|
# This stub emulates the Railtie including the URL helpers from a Rails application
|
|
|
|
include SharedTestRoutes.url_helpers
|
2012-06-01 11:42:33 -04:00
|
|
|
include SharedTestRoutes.mounted_helpers
|
2009-10-04 00:18:32 -04:00
|
|
|
|
2010-09-24 20:24:55 -04:00
|
|
|
self.view_paths = FIXTURE_LOAD_PATH
|
|
|
|
|
|
|
|
def self.test_routes(&block)
|
|
|
|
routes = ActionDispatch::Routing::RouteSet.new
|
|
|
|
routes.draw(&block)
|
|
|
|
include routes.url_helpers
|
|
|
|
end
|
|
|
|
end
|
2009-10-04 00:18:32 -04:00
|
|
|
|
2009-06-15 14:44:45 -04:00
|
|
|
class TestCase
|
2009-12-12 19:09:44 -05:00
|
|
|
include ActionDispatch::TestProcess
|
2012-08-09 17:30:26 -04:00
|
|
|
include ActionDispatch::SharedRoutes
|
2009-06-15 14:44:45 -04:00
|
|
|
end
|
|
|
|
end
|
2010-02-24 19:01:03 -05:00
|
|
|
|
2010-09-24 20:24:55 -04:00
|
|
|
class ::ApplicationController < ActionController::Base
|
|
|
|
end
|
|
|
|
|
|
|
|
module ActionView
|
|
|
|
class TestCase
|
|
|
|
# Must repeat the setup because AV::TestCase is a duplication
|
|
|
|
# of AC::TestCase
|
2012-08-09 17:30:26 -04:00
|
|
|
include ActionDispatch::SharedRoutes
|
2010-02-24 19:01:03 -05:00
|
|
|
end
|
2010-04-24 18:17:30 -04:00
|
|
|
end
|
2010-10-01 21:01:34 -04:00
|
|
|
|
|
|
|
class Workshop
|
|
|
|
extend ActiveModel::Naming
|
|
|
|
include ActiveModel::Conversion
|
|
|
|
attr_accessor :id
|
|
|
|
|
|
|
|
def initialize(id)
|
|
|
|
@id = id
|
|
|
|
end
|
|
|
|
|
|
|
|
def persisted?
|
|
|
|
id.present?
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_s
|
|
|
|
id.to_s
|
|
|
|
end
|
|
|
|
end
|
2010-10-01 21:05:59 -04:00
|
|
|
|
|
|
|
module ActionDispatch
|
2011-12-01 14:46:18 -05:00
|
|
|
class DebugExceptions
|
|
|
|
private
|
|
|
|
remove_method :stderr_logger
|
|
|
|
# Silence logger
|
|
|
|
def stderr_logger
|
|
|
|
nil
|
|
|
|
end
|
2010-10-01 21:05:59 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-01-23 13:18:36 -05:00
|
|
|
module ActionDispatch
|
|
|
|
module RoutingVerbs
|
2013-03-31 10:04:40 -04:00
|
|
|
def get(uri_or_host, path = nil)
|
2012-01-23 13:18:36 -05:00
|
|
|
host = uri_or_host.host unless path
|
|
|
|
path ||= uri_or_host.path
|
|
|
|
|
|
|
|
params = {'PATH_INFO' => path,
|
|
|
|
'REQUEST_METHOD' => 'GET',
|
|
|
|
'HTTP_HOST' => host}
|
|
|
|
|
|
|
|
routes.call(params)[2].join
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-11-30 10:34:16 -05:00
|
|
|
module RoutingTestHelpers
|
|
|
|
def url_for(set, options, recall = nil)
|
2012-08-04 07:55:00 -04:00
|
|
|
set.send(:url_for, options.merge(:only_path => true, :_recall => recall))
|
2011-11-30 10:34:16 -05:00
|
|
|
end
|
|
|
|
end
|
2012-08-13 18:02:00 -04:00
|
|
|
|
|
|
|
class ResourcesController < ActionController::Base
|
|
|
|
def index() render :nothing => true end
|
|
|
|
alias_method :show, :index
|
|
|
|
end
|
|
|
|
|
|
|
|
class ThreadsController < ResourcesController; end
|
|
|
|
class MessagesController < ResourcesController; end
|
|
|
|
class CommentsController < ResourcesController; end
|
2012-08-22 10:27:42 -04:00
|
|
|
class ReviewsController < ResourcesController; end
|
2012-08-13 18:02:00 -04:00
|
|
|
class AuthorsController < ResourcesController; end
|
|
|
|
class LogosController < ResourcesController; end
|
|
|
|
|
|
|
|
class AccountsController < ResourcesController; end
|
|
|
|
class AdminController < ResourcesController; end
|
|
|
|
class ProductsController < ResourcesController; end
|
|
|
|
class ImagesController < ResourcesController; end
|
|
|
|
class PreferencesController < ResourcesController; end
|
|
|
|
|
|
|
|
module Backoffice
|
|
|
|
class ProductsController < ResourcesController; end
|
|
|
|
class TagsController < ResourcesController; end
|
|
|
|
class ManufacturersController < ResourcesController; end
|
|
|
|
class ImagesController < ResourcesController; end
|
|
|
|
|
|
|
|
module Admin
|
|
|
|
class ProductsController < ResourcesController; end
|
|
|
|
class ImagesController < ResourcesController; end
|
|
|
|
end
|
|
|
|
end
|