109 lines
3.7 KiB
Ruby
109 lines
3.7 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
|
|
|
class PadrinoPristine < Padrino::Application; end
|
|
class PadrinoTestApp < Padrino::Application; end
|
|
class PadrinoTestApp2 < Padrino::Application; end
|
|
|
|
describe "Application" do
|
|
def setup
|
|
Padrino.clear!
|
|
end
|
|
|
|
def teardown
|
|
remove_views
|
|
end
|
|
|
|
context 'for application functionality' do
|
|
|
|
should 'check default options' do
|
|
assert File.identical?(__FILE__, PadrinoPristine.app_file)
|
|
assert_equal :padrino_pristine, PadrinoPristine.app_name
|
|
assert_equal :test, PadrinoPristine.environment
|
|
assert_equal Padrino.root("views"), PadrinoPristine.views
|
|
assert PadrinoPristine.raise_errors
|
|
assert !PadrinoPristine.logging
|
|
assert !PadrinoPristine.sessions
|
|
assert !PadrinoPristine.dump_errors
|
|
assert !PadrinoPristine.show_exceptions
|
|
assert PadrinoPristine.raise_errors
|
|
assert !Padrino.configure_apps
|
|
end
|
|
|
|
should 'check padrino specific options' do
|
|
assert !PadrinoPristine.instance_variable_get(:@_configured)
|
|
PadrinoPristine.send(:setup_application!)
|
|
assert_equal :padrino_pristine, PadrinoPristine.app_name
|
|
assert_equal 'StandardFormBuilder', PadrinoPristine.default_builder
|
|
assert PadrinoPristine.instance_variable_get(:@_configured)
|
|
assert !PadrinoPristine.reload?
|
|
assert !PadrinoPristine.flash
|
|
end
|
|
|
|
should 'set global project settings' do
|
|
Padrino.configure_apps { enable :sessions; set :foo, "bar" }
|
|
PadrinoTestApp.send(:default_configuration!)
|
|
PadrinoTestApp2.send(:default_configuration!)
|
|
assert PadrinoTestApp.sessions, "should have sessions enabled"
|
|
assert_equal "bar", PadrinoTestApp.settings.foo, "should have foo assigned"
|
|
assert_equal PadrinoTestApp.session_secret, PadrinoTestApp2.session_secret
|
|
end
|
|
|
|
should "have shared sessions accessible in project" do
|
|
Padrino.configure_apps { enable :sessions; set :session_secret, 'secret' }
|
|
Padrino.mount("PadrinoTestApp").to("/write")
|
|
Padrino.mount("PadrinoTestApp2").to("/read")
|
|
PadrinoTestApp.tap { |app| app.send(:default_configuration!)
|
|
app.get("/") { session[:foo] = "shared" } }
|
|
PadrinoTestApp2.tap { |app| app.send(:default_configuration!)
|
|
app.get("/") { session[:foo] } }
|
|
browser = Rack::Test::Session.new(Rack::MockSession.new(Padrino.application))
|
|
browser.get '/write'
|
|
browser.get '/read'
|
|
assert_equal 'shared', browser.last_response.body
|
|
end
|
|
|
|
# compare to: test_routing: allow global provides
|
|
should "set content_type to :html if none can be determined" do
|
|
mock_app do
|
|
provides :xml
|
|
|
|
get("/foo"){ "Foo in #{content_type}" }
|
|
get("/bar"){ "Foo in #{content_type}" }
|
|
end
|
|
|
|
get '/foo', {}, { 'HTTP_ACCEPT' => 'application/xml' }
|
|
assert_equal 'Foo in xml', body
|
|
get '/foo'
|
|
assert_equal 'Foo in xml', body
|
|
|
|
get '/bar', {}, { 'HTTP_ACCEPT' => 'application/xml' }
|
|
assert_equal "Foo in html", body
|
|
end # content_type to :html
|
|
|
|
context "errors" do
|
|
should "haven't mapped errors on development" do
|
|
mock_app { get('/'){ 'HI' } }
|
|
get "/"
|
|
assert @app.errors.empty?
|
|
end
|
|
|
|
should "have mapped errors on production" do
|
|
mock_app { set :environment, :production; get('/'){ 'HI' } }
|
|
get "/"
|
|
assert_equal 1, @app.errors.size
|
|
end
|
|
|
|
should "overide errors" do
|
|
mock_app do
|
|
set :environment, :production
|
|
get('/'){ raise }
|
|
error(::Exception){ 'custom error' }
|
|
end
|
|
get "/"
|
|
assert_equal 1, @app.errors.size
|
|
assert_equal 'custom error', body
|
|
end
|
|
end
|
|
end # application functionality
|
|
end
|