2017-08-14 13:08:09 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
require "isolation/abstract_unit"
|
2010-01-04 20:34:42 -05:00
|
|
|
|
|
|
|
module ApplicationTests
|
2012-01-05 20:30:17 -05:00
|
|
|
class MiddlewareTest < ActiveSupport::TestCase
|
2010-01-04 20:34:42 -05:00
|
|
|
include ActiveSupport::Testing::Isolation
|
|
|
|
|
|
|
|
def setup
|
|
|
|
build_app
|
|
|
|
FileUtils.rm_rf "#{app_path}/config/environments"
|
|
|
|
end
|
|
|
|
|
2011-06-06 08:54:05 -04:00
|
|
|
def teardown
|
|
|
|
teardown_app
|
|
|
|
end
|
|
|
|
|
2010-04-26 03:04:04 -04:00
|
|
|
def app
|
|
|
|
@app ||= Rails.application
|
|
|
|
end
|
|
|
|
|
2010-01-04 20:34:42 -05:00
|
|
|
test "default middleware stack" do
|
2013-07-15 04:47:59 -04:00
|
|
|
add_to_config "config.active_record.migration_error = :page_load"
|
|
|
|
|
2010-01-04 20:34:42 -05:00
|
|
|
boot!
|
|
|
|
|
2020-11-25 16:15:53 -05:00
|
|
|
assert_equal [
|
|
|
|
"Webpacker::DevServerProxy",
|
|
|
|
"ActionDispatch::HostAuthorization",
|
|
|
|
"Rack::Sendfile",
|
|
|
|
"ActionDispatch::Static",
|
|
|
|
"ActionDispatch::Executor",
|
|
|
|
"ActiveSupport::Cache::Strategy::LocalCache",
|
2021-04-12 14:31:12 -04:00
|
|
|
"ActionDispatch::MiddlewareStack::FakeRuntime",
|
2020-11-25 16:15:53 -05:00
|
|
|
"Rack::MethodOverride",
|
|
|
|
"ActionDispatch::RequestId",
|
|
|
|
"ActionDispatch::RemoteIp",
|
|
|
|
"Rails::Rack::Logger",
|
|
|
|
"ActionDispatch::ShowExceptions",
|
|
|
|
"ActionDispatch::DebugExceptions",
|
|
|
|
"ActionDispatch::Reloader",
|
|
|
|
"ActionDispatch::Callbacks",
|
|
|
|
"ActiveRecord::Migration::CheckPending",
|
|
|
|
"ActionDispatch::Cookies",
|
|
|
|
"ActionDispatch::Session::CookieStore",
|
|
|
|
"ActionDispatch::Flash",
|
|
|
|
"ActionDispatch::ContentSecurityPolicy::Middleware",
|
|
|
|
"ActionDispatch::PermissionsPolicy::Middleware",
|
|
|
|
"Rack::Head",
|
|
|
|
"Rack::ConditionalGet",
|
|
|
|
"Rack::ETag",
|
|
|
|
"Rack::TempfileReaper"
|
|
|
|
], middleware
|
|
|
|
end
|
|
|
|
|
|
|
|
test "default middleware stack when requests are local" do
|
|
|
|
add_to_config "config.consider_all_requests_local = true"
|
|
|
|
add_to_config "config.active_record.migration_error = :page_load"
|
|
|
|
|
|
|
|
boot!
|
|
|
|
|
2010-09-15 15:58:49 -04:00
|
|
|
assert_equal [
|
Make Webpacker the default JavaScript compiler for Rails 6 (#33079)
* Use Webpacker by default on new apps
* Stop including coffee-rails by default
* Drop using a js_compressor by default
* Drop extra test for coffeescript inclusion by default
* Stick with skip_javascript to signify skipping webpack
* Don't install a JS runtime by default any more
* app/javascript will be the new default directory for JS
* Make it clear that this is just for configuring the default Webpack framework setup now
* Start using the Webpack tag in the default layout
* Irrelevant test
* jQuery is long gone
* Stop having asset pipeline compile default application.js
* Add rails-ujs by default to the Webpack setup
* Add Active Storage JavaScript to application.js pack by default
* Consistent quoting
* Add Turbolinks to default pack
* Add Action Cable to default pack
Need some work on how to set the global consumer that channels will
work with. @javan?
* Require all channels by default and use a separate consumer stub
* Channel generator now targets Webpack style
* Update task docs to match new generator style
* Use uniform import style
* Drop the JS assets generator
It was barely helpful as it was. It’s no longer helpful in a Webpacked
world. Sayonara!
* Add app/javascript to the stats directories
* Simpler import style
Which match the other imports.
* Address test failures from dropping JS compilation (and compression)
* webpacker-default: Modify `AssetsGeneratorTest`
Before:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 46201
F
Failure:
AssetsGeneratorTest#test_assets [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:12]:
Expected file "app/assets/javascripts/posts.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:10
.
Finished in 0.031343s, 63.8101 runs/s, 95.7152 assertions/s.
2 runs, 3 assertions, 1 failures, 0 errors, 0 skips
```
After:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 43571
..
Finished in 0.030370s, 65.8545 runs/s, 65.8545 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
```
* webpacker-default: Modify `ChannelGeneratorTest`
Before:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 8986
.F
Failure:
ChannelGeneratorTest#test_channel_with_multiple_actions_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:43]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:34
.F
Failure:
ChannelGeneratorTest#test_channel_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:29]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:22
E
Error:
ChannelGeneratorTest#test_cable_js_is_created_if_not_present_already:
Errno::ENOENT: No such file or directory @ apply2files - /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/fixtures/tmp/app/assets/javascripts/cable.js
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:60
F
Failure:
ChannelGeneratorTest#test_channel_suffix_is_not_duplicated [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:87]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:80
F
Failure:
ChannelGeneratorTest#test_channel_on_revoke [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:77]:
Expected file "app/assets/javascripts/cable.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:68
Finished in 0.064384s, 108.7227 runs/s, 481.4861 assertions/s.
7 runs, 31 assertions, 4 failures, 1 errors, 0 skips
```
After:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 44857
.......
Finished in 0.060243s, 116.1961 runs/s, 697.1764 assertions/s.
7 runs, 42 assertions, 0 failures, 0 errors, 0 skips
```
* Fix shared generator tests.
* webpacker-default: Modify `ControllerGeneratorTest`
The JS assets generator was dropped. ref. https://github.com/rails/rails/commit/46215b179483d3e4d264555f5a4952f43eb8142a
* Revert "Simpler import style". It's currently failing with an error of "TypeError: undefined is not an object (evaluating '__WEBPACK_IMPORTED_MODULE_2_activestorage___default.a.start')". Waiting for @javan to have a look.
This reverts commit 5d3ebb71059f635d3756cbda4ab9752027e09256.
* require webpacker in test app
* Add webpacker without making the build hang/timeout. (#33640)
* use yarn workspaces to allow for installing unreleased packages and only generate js/bootsnap when required
* no longer need to have webpacker in env templates as webpacker moved this config to yml file
* Fix rubocop violation
* Got the test passing for the running scaffold
* update expected lines of code
* update middleware tests to account for webpacker
* disable js in plugins be default to get the tests passing (#34009)
* clear codeclimate report issues
* Anything newer than currently released is good
* Use Webpacker development version during development of Rails
* Edge should get development webpacker as well
* Add changelog entry for Webpacker change
2018-10-01 01:31:21 -04:00
|
|
|
"Webpacker::DevServerProxy",
|
2018-06-14 04:09:00 -04:00
|
|
|
"ActionDispatch::HostAuthorization",
|
2012-03-03 14:05:45 -05:00
|
|
|
"Rack::Sendfile",
|
2010-09-15 15:58:49 -04:00
|
|
|
"ActionDispatch::Static",
|
2016-02-21 20:25:52 -05:00
|
|
|
"ActionDispatch::Executor",
|
2015-10-02 17:45:31 -04:00
|
|
|
"ActiveSupport::Cache::Strategy::LocalCache",
|
2021-04-12 14:31:12 -04:00
|
|
|
"ActionDispatch::MiddlewareStack::FakeRuntime",
|
2015-10-03 17:21:31 -04:00
|
|
|
"Rack::MethodOverride",
|
2011-10-20 03:29:27 -04:00
|
|
|
"ActionDispatch::RequestId",
|
2016-12-30 16:50:35 -05:00
|
|
|
"ActionDispatch::RemoteIp",
|
|
|
|
"Rails::Rack::Logger",
|
2010-09-15 15:58:49 -04:00
|
|
|
"ActionDispatch::ShowExceptions",
|
2011-12-01 14:46:18 -05:00
|
|
|
"ActionDispatch::DebugExceptions",
|
2018-12-28 07:21:30 -05:00
|
|
|
"ActionDispatch::ActionableExceptions",
|
2010-11-23 21:04:05 -05:00
|
|
|
"ActionDispatch::Reloader",
|
2010-09-15 15:58:49 -04:00
|
|
|
"ActionDispatch::Callbacks",
|
2013-07-15 04:47:59 -04:00
|
|
|
"ActiveRecord::Migration::CheckPending",
|
2010-09-15 15:58:49 -04:00
|
|
|
"ActionDispatch::Cookies",
|
|
|
|
"ActionDispatch::Session::CookieStore",
|
|
|
|
"ActionDispatch::Flash",
|
2017-11-15 16:07:28 -05:00
|
|
|
"ActionDispatch::ContentSecurityPolicy::Middleware",
|
2020-11-14 07:13:54 -05:00
|
|
|
"ActionDispatch::PermissionsPolicy::Middleware",
|
2012-07-23 12:50:48 -04:00
|
|
|
"Rack::Head",
|
2010-09-22 15:40:14 -04:00
|
|
|
"Rack::ConditionalGet",
|
2018-01-30 18:21:07 -05:00
|
|
|
"Rack::ETag",
|
|
|
|
"Rack::TempfileReaper"
|
2010-09-15 15:58:49 -04:00
|
|
|
], middleware
|
|
|
|
end
|
|
|
|
|
2015-04-16 13:55:32 -04:00
|
|
|
test "api middleware stack" do
|
|
|
|
add_to_config "config.api_only = true"
|
|
|
|
|
|
|
|
boot!
|
|
|
|
|
|
|
|
assert_equal [
|
Make Webpacker the default JavaScript compiler for Rails 6 (#33079)
* Use Webpacker by default on new apps
* Stop including coffee-rails by default
* Drop using a js_compressor by default
* Drop extra test for coffeescript inclusion by default
* Stick with skip_javascript to signify skipping webpack
* Don't install a JS runtime by default any more
* app/javascript will be the new default directory for JS
* Make it clear that this is just for configuring the default Webpack framework setup now
* Start using the Webpack tag in the default layout
* Irrelevant test
* jQuery is long gone
* Stop having asset pipeline compile default application.js
* Add rails-ujs by default to the Webpack setup
* Add Active Storage JavaScript to application.js pack by default
* Consistent quoting
* Add Turbolinks to default pack
* Add Action Cable to default pack
Need some work on how to set the global consumer that channels will
work with. @javan?
* Require all channels by default and use a separate consumer stub
* Channel generator now targets Webpack style
* Update task docs to match new generator style
* Use uniform import style
* Drop the JS assets generator
It was barely helpful as it was. It’s no longer helpful in a Webpacked
world. Sayonara!
* Add app/javascript to the stats directories
* Simpler import style
Which match the other imports.
* Address test failures from dropping JS compilation (and compression)
* webpacker-default: Modify `AssetsGeneratorTest`
Before:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 46201
F
Failure:
AssetsGeneratorTest#test_assets [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:12]:
Expected file "app/assets/javascripts/posts.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:10
.
Finished in 0.031343s, 63.8101 runs/s, 95.7152 assertions/s.
2 runs, 3 assertions, 1 failures, 0 errors, 0 skips
```
After:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 43571
..
Finished in 0.030370s, 65.8545 runs/s, 65.8545 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
```
* webpacker-default: Modify `ChannelGeneratorTest`
Before:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 8986
.F
Failure:
ChannelGeneratorTest#test_channel_with_multiple_actions_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:43]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:34
.F
Failure:
ChannelGeneratorTest#test_channel_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:29]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:22
E
Error:
ChannelGeneratorTest#test_cable_js_is_created_if_not_present_already:
Errno::ENOENT: No such file or directory @ apply2files - /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/fixtures/tmp/app/assets/javascripts/cable.js
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:60
F
Failure:
ChannelGeneratorTest#test_channel_suffix_is_not_duplicated [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:87]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:80
F
Failure:
ChannelGeneratorTest#test_channel_on_revoke [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:77]:
Expected file "app/assets/javascripts/cable.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:68
Finished in 0.064384s, 108.7227 runs/s, 481.4861 assertions/s.
7 runs, 31 assertions, 4 failures, 1 errors, 0 skips
```
After:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 44857
.......
Finished in 0.060243s, 116.1961 runs/s, 697.1764 assertions/s.
7 runs, 42 assertions, 0 failures, 0 errors, 0 skips
```
* Fix shared generator tests.
* webpacker-default: Modify `ControllerGeneratorTest`
The JS assets generator was dropped. ref. https://github.com/rails/rails/commit/46215b179483d3e4d264555f5a4952f43eb8142a
* Revert "Simpler import style". It's currently failing with an error of "TypeError: undefined is not an object (evaluating '__WEBPACK_IMPORTED_MODULE_2_activestorage___default.a.start')". Waiting for @javan to have a look.
This reverts commit 5d3ebb71059f635d3756cbda4ab9752027e09256.
* require webpacker in test app
* Add webpacker without making the build hang/timeout. (#33640)
* use yarn workspaces to allow for installing unreleased packages and only generate js/bootsnap when required
* no longer need to have webpacker in env templates as webpacker moved this config to yml file
* Fix rubocop violation
* Got the test passing for the running scaffold
* update expected lines of code
* update middleware tests to account for webpacker
* disable js in plugins be default to get the tests passing (#34009)
* clear codeclimate report issues
* Anything newer than currently released is good
* Use Webpacker development version during development of Rails
* Edge should get development webpacker as well
* Add changelog entry for Webpacker change
2018-10-01 01:31:21 -04:00
|
|
|
"Webpacker::DevServerProxy",
|
2018-06-14 04:09:00 -04:00
|
|
|
"ActionDispatch::HostAuthorization",
|
2015-04-16 13:55:32 -04:00
|
|
|
"Rack::Sendfile",
|
|
|
|
"ActionDispatch::Static",
|
2016-02-21 20:25:52 -05:00
|
|
|
"ActionDispatch::Executor",
|
2015-04-16 13:55:32 -04:00
|
|
|
"ActiveSupport::Cache::Strategy::LocalCache",
|
2021-04-12 14:31:12 -04:00
|
|
|
"ActionDispatch::MiddlewareStack::FakeRuntime",
|
2015-04-16 13:55:32 -04:00
|
|
|
"ActionDispatch::RequestId",
|
2016-12-30 16:48:18 -05:00
|
|
|
"ActionDispatch::RemoteIp",
|
2016-12-30 16:50:35 -05:00
|
|
|
"Rails::Rack::Logger",
|
2015-04-16 13:55:32 -04:00
|
|
|
"ActionDispatch::ShowExceptions",
|
|
|
|
"ActionDispatch::DebugExceptions",
|
|
|
|
"ActionDispatch::Reloader",
|
|
|
|
"ActionDispatch::Callbacks",
|
|
|
|
"Rack::Head",
|
|
|
|
"Rack::ConditionalGet",
|
2018-02-17 15:52:41 -05:00
|
|
|
"Rack::ETag"
|
2015-04-16 13:55:32 -04:00
|
|
|
], middleware
|
|
|
|
end
|
|
|
|
|
2016-12-30 16:50:35 -05:00
|
|
|
test "middleware dependencies" do
|
|
|
|
boot!
|
|
|
|
|
|
|
|
# The following array-of-arrays describes dependencies between
|
|
|
|
# middlewares: the first item in each list depends on the
|
|
|
|
# remaining items (and therefore must occur later in the
|
|
|
|
# middleware stack).
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
# Logger needs a fully "corrected" request environment
|
|
|
|
%w(Rails::Rack::Logger Rack::MethodOverride ActionDispatch::RequestId ActionDispatch::RemoteIp),
|
|
|
|
|
|
|
|
# Serving public/ doesn't invoke user code, so it should skip
|
|
|
|
# locks etc
|
|
|
|
%w(ActionDispatch::Executor ActionDispatch::Static),
|
|
|
|
|
|
|
|
# Errors during reload must be reported
|
|
|
|
%w(ActionDispatch::Reloader ActionDispatch::ShowExceptions ActionDispatch::DebugExceptions),
|
|
|
|
|
|
|
|
# Outright dependencies
|
|
|
|
%w(ActionDispatch::Static Rack::Sendfile),
|
|
|
|
%w(ActionDispatch::Flash ActionDispatch::Session::CookieStore),
|
|
|
|
%w(ActionDispatch::Session::CookieStore ActionDispatch::Cookies),
|
|
|
|
]
|
|
|
|
|
|
|
|
require "tsort"
|
|
|
|
sorted = TSort.tsort((middleware | dependencies.flatten).method(:each),
|
|
|
|
lambda { |n, &b| dependencies.each { |m, *ds| ds.each(&b) if m == n } })
|
|
|
|
assert_equal sorted, middleware
|
|
|
|
end
|
|
|
|
|
2012-10-03 17:43:39 -04:00
|
|
|
test "Rack::Cache is not included by default" do
|
2010-09-15 15:58:49 -04:00
|
|
|
boot!
|
|
|
|
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_not_includes middleware, "Rack::Cache", "Rack::Cache is not included in the default stack unless you set config.action_dispatch.rack_cache"
|
2012-10-03 17:43:39 -04:00
|
|
|
end
|
|
|
|
|
2012-10-18 13:31:52 -04:00
|
|
|
test "Rack::Cache is present when action_dispatch.rack_cache is set" do
|
2012-10-03 17:43:39 -04:00
|
|
|
add_to_config "config.action_dispatch.rack_cache = true"
|
|
|
|
|
|
|
|
boot!
|
|
|
|
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "Rack::Cache"
|
2010-01-04 20:34:42 -05:00
|
|
|
end
|
|
|
|
|
2013-06-08 15:10:15 -04:00
|
|
|
test "ActiveRecord::Migration::CheckPending is present when active_record.migration_error is set to :page_load" do
|
|
|
|
add_to_config "config.active_record.migration_error = :page_load"
|
|
|
|
|
|
|
|
boot!
|
|
|
|
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "ActiveRecord::Migration::CheckPending"
|
2013-06-08 15:10:15 -04:00
|
|
|
end
|
|
|
|
|
2012-03-16 22:22:25 -04:00
|
|
|
test "ActionDispatch::SSL is present when force_ssl is set" do
|
2011-03-27 12:55:46 -04:00
|
|
|
add_to_config "config.force_ssl = true"
|
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "ActionDispatch::SSL"
|
2011-03-27 12:55:46 -04:00
|
|
|
end
|
|
|
|
|
2012-03-16 22:22:25 -04:00
|
|
|
test "ActionDispatch::SSL is configured with options when given" do
|
2011-09-26 22:22:52 -04:00
|
|
|
add_to_config "config.force_ssl = true"
|
2016-06-19 21:35:59 -04:00
|
|
|
add_to_config "config.ssl_options = { redirect: { host: 'example.com' } }"
|
2011-09-26 22:22:52 -04:00
|
|
|
boot!
|
2011-12-20 14:17:17 -05:00
|
|
|
|
2020-06-17 21:56:08 -04:00
|
|
|
assert_equal [{ redirect: { host: "example.com" }, ssl_default_redirect_status: 308 }], Rails.application.middleware[2].args
|
2011-09-26 22:22:52 -04:00
|
|
|
end
|
|
|
|
|
2010-07-25 16:08:34 -04:00
|
|
|
test "removing Active Record omits its middleware" do
|
2010-01-04 20:34:42 -05:00
|
|
|
use_frameworks []
|
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_not_includes middleware, "ActiveRecord::Migration::CheckPending"
|
2010-01-04 20:34:42 -05:00
|
|
|
end
|
|
|
|
|
2016-02-21 20:25:52 -05:00
|
|
|
test "includes executor" do
|
2014-09-29 12:02:42 -04:00
|
|
|
boot!
|
2016-02-21 20:25:52 -05:00
|
|
|
assert_includes middleware, "ActionDispatch::Executor"
|
2014-09-18 16:35:19 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
test "does not include lock if cache_classes is set and so is eager_load" do
|
|
|
|
add_to_config "config.cache_classes = true"
|
|
|
|
add_to_config "config.eager_load = true"
|
|
|
|
boot!
|
2014-09-29 12:02:42 -04:00
|
|
|
assert_not_includes middleware, "Rack::Lock"
|
2010-01-04 20:34:42 -05:00
|
|
|
end
|
|
|
|
|
2014-09-29 12:16:07 -04:00
|
|
|
test "does not include lock if allow_concurrency is set to :unsafe" do
|
|
|
|
add_to_config "config.allow_concurrency = :unsafe"
|
2013-03-03 15:20:44 -05:00
|
|
|
boot!
|
2014-09-29 12:02:42 -04:00
|
|
|
assert_not_includes middleware, "Rack::Lock"
|
|
|
|
end
|
|
|
|
|
|
|
|
test "includes lock if allow_concurrency is disabled" do
|
|
|
|
add_to_config "config.allow_concurrency = false"
|
|
|
|
boot!
|
|
|
|
assert_includes middleware, "Rack::Lock"
|
2013-03-03 15:20:44 -05:00
|
|
|
end
|
|
|
|
|
2015-11-04 16:31:16 -05:00
|
|
|
test "removes static asset server if public_file_server.enabled is disabled" do
|
|
|
|
add_to_config "config.public_file_server.enabled = false"
|
2010-01-04 20:34:42 -05:00
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_not_includes middleware, "ActionDispatch::Static"
|
2010-01-04 20:34:42 -05:00
|
|
|
end
|
|
|
|
|
2010-06-07 17:17:23 -04:00
|
|
|
test "can delete a middleware from the stack" do
|
|
|
|
add_to_config "config.middleware.delete ActionDispatch::Static"
|
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_not_includes middleware, "ActionDispatch::Static"
|
2010-06-07 17:17:23 -04:00
|
|
|
end
|
|
|
|
|
2015-02-18 13:35:51 -05:00
|
|
|
test "can delete a middleware from the stack even if insert_before is added after delete" do
|
2021-04-12 14:31:12 -04:00
|
|
|
add_to_config "config.middleware.delete Rack::Head"
|
|
|
|
add_to_config "config.middleware.insert_before(Rack::Head, Rack::Config)"
|
2015-02-18 13:35:51 -05:00
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "Rack::Config"
|
2021-04-12 14:31:12 -04:00
|
|
|
assert_not middleware.include?("Rack::Head")
|
2015-02-18 13:35:51 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
test "can delete a middleware from the stack even if insert_after is added after delete" do
|
2021-04-12 14:31:12 -04:00
|
|
|
add_to_config "config.middleware.delete Rack::Head"
|
|
|
|
add_to_config "config.middleware.insert_after(Rack::Head, Rack::Config)"
|
2015-02-18 13:35:51 -05:00
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "Rack::Config"
|
2021-04-12 14:31:12 -04:00
|
|
|
assert_not middleware.include?("Rack::Head")
|
2015-02-18 13:35:51 -05:00
|
|
|
end
|
|
|
|
|
2011-12-01 14:46:18 -05:00
|
|
|
test "includes exceptions middlewares even if action_dispatch.show_exceptions is disabled" do
|
2010-04-02 14:54:10 -04:00
|
|
|
add_to_config "config.action_dispatch.show_exceptions = false"
|
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_includes middleware, "ActionDispatch::ShowExceptions"
|
|
|
|
assert_includes middleware, "ActionDispatch::DebugExceptions"
|
2010-04-02 14:54:10 -04:00
|
|
|
end
|
|
|
|
|
2010-11-23 21:04:05 -05:00
|
|
|
test "removes ActionDispatch::Reloader if cache_classes is true" do
|
|
|
|
add_to_config "config.cache_classes = true"
|
|
|
|
boot!
|
2016-09-16 12:44:05 -04:00
|
|
|
assert_not_includes middleware, "ActionDispatch::Reloader"
|
2010-11-23 21:04:05 -05:00
|
|
|
end
|
|
|
|
|
2010-01-04 20:34:42 -05:00
|
|
|
test "use middleware" do
|
|
|
|
use_frameworks []
|
|
|
|
add_to_config "config.middleware.use Rack::Config"
|
|
|
|
boot!
|
|
|
|
assert_equal "Rack::Config", middleware.last
|
|
|
|
end
|
|
|
|
|
2010-01-04 20:38:56 -05:00
|
|
|
test "insert middleware after" do
|
2013-07-15 01:33:09 -04:00
|
|
|
add_to_config "config.middleware.insert_after Rack::Sendfile, Rack::Config"
|
2010-01-04 20:38:56 -05:00
|
|
|
boot!
|
2018-06-14 04:09:00 -04:00
|
|
|
assert_equal "Rack::Config", middleware.fourth
|
2010-01-04 20:38:56 -05:00
|
|
|
end
|
|
|
|
|
2016-08-06 13:16:09 -04:00
|
|
|
test "unshift middleware" do
|
|
|
|
add_to_config "config.middleware.unshift Rack::Config"
|
2013-10-09 06:16:22 -04:00
|
|
|
boot!
|
Make Webpacker the default JavaScript compiler for Rails 6 (#33079)
* Use Webpacker by default on new apps
* Stop including coffee-rails by default
* Drop using a js_compressor by default
* Drop extra test for coffeescript inclusion by default
* Stick with skip_javascript to signify skipping webpack
* Don't install a JS runtime by default any more
* app/javascript will be the new default directory for JS
* Make it clear that this is just for configuring the default Webpack framework setup now
* Start using the Webpack tag in the default layout
* Irrelevant test
* jQuery is long gone
* Stop having asset pipeline compile default application.js
* Add rails-ujs by default to the Webpack setup
* Add Active Storage JavaScript to application.js pack by default
* Consistent quoting
* Add Turbolinks to default pack
* Add Action Cable to default pack
Need some work on how to set the global consumer that channels will
work with. @javan?
* Require all channels by default and use a separate consumer stub
* Channel generator now targets Webpack style
* Update task docs to match new generator style
* Use uniform import style
* Drop the JS assets generator
It was barely helpful as it was. It’s no longer helpful in a Webpacked
world. Sayonara!
* Add app/javascript to the stats directories
* Simpler import style
Which match the other imports.
* Address test failures from dropping JS compilation (and compression)
* webpacker-default: Modify `AssetsGeneratorTest`
Before:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 46201
F
Failure:
AssetsGeneratorTest#test_assets [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:12]:
Expected file "app/assets/javascripts/posts.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/assets_generator_test.rb:10
.
Finished in 0.031343s, 63.8101 runs/s, 95.7152 assertions/s.
2 runs, 3 assertions, 1 failures, 0 errors, 0 skips
```
After:
```
$ bin/test test/generators/assets_generator_test.rb
Run options: --seed 43571
..
Finished in 0.030370s, 65.8545 runs/s, 65.8545 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
```
* webpacker-default: Modify `ChannelGeneratorTest`
Before:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 8986
.F
Failure:
ChannelGeneratorTest#test_channel_with_multiple_actions_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:43]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:34
.F
Failure:
ChannelGeneratorTest#test_channel_is_created [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:29]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:22
E
Error:
ChannelGeneratorTest#test_cable_js_is_created_if_not_present_already:
Errno::ENOENT: No such file or directory @ apply2files - /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/fixtures/tmp/app/assets/javascripts/cable.js
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:60
F
Failure:
ChannelGeneratorTest#test_channel_suffix_is_not_duplicated [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:87]:
Expected file "app/assets/javascripts/channels/chat.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:80
F
Failure:
ChannelGeneratorTest#test_channel_on_revoke [/Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:77]:
Expected file "app/assets/javascripts/cable.js" to exist, but does not
bin/test /Users/ttanimichi/ghq/github.com/ttanimichi/rails/railties/test/generators/channel_generator_test.rb:68
Finished in 0.064384s, 108.7227 runs/s, 481.4861 assertions/s.
7 runs, 31 assertions, 4 failures, 1 errors, 0 skips
```
After:
```
$ bin/test test/generators/channel_generator_test.rb
Run options: --seed 44857
.......
Finished in 0.060243s, 116.1961 runs/s, 697.1764 assertions/s.
7 runs, 42 assertions, 0 failures, 0 errors, 0 skips
```
* Fix shared generator tests.
* webpacker-default: Modify `ControllerGeneratorTest`
The JS assets generator was dropped. ref. https://github.com/rails/rails/commit/46215b179483d3e4d264555f5a4952f43eb8142a
* Revert "Simpler import style". It's currently failing with an error of "TypeError: undefined is not an object (evaluating '__WEBPACK_IMPORTED_MODULE_2_activestorage___default.a.start')". Waiting for @javan to have a look.
This reverts commit 5d3ebb71059f635d3756cbda4ab9752027e09256.
* require webpacker in test app
* Add webpacker without making the build hang/timeout. (#33640)
* use yarn workspaces to allow for installing unreleased packages and only generate js/bootsnap when required
* no longer need to have webpacker in env templates as webpacker moved this config to yml file
* Fix rubocop violation
* Got the test passing for the running scaffold
* update expected lines of code
* update middleware tests to account for webpacker
* disable js in plugins be default to get the tests passing (#34009)
* clear codeclimate report issues
* Anything newer than currently released is good
* Use Webpacker development version during development of Rails
* Edge should get development webpacker as well
* Add changelog entry for Webpacker change
2018-10-01 01:31:21 -04:00
|
|
|
assert_equal "Rack::Config", middleware.second
|
2013-10-09 06:16:22 -04:00
|
|
|
end
|
|
|
|
|
2012-01-17 11:53:09 -05:00
|
|
|
test "Rails.cache does not respond to middleware" do
|
2020-02-05 00:07:56 -05:00
|
|
|
add_to_config "config.cache_store = :memory_store, { timeout: 10 }"
|
2010-06-24 12:42:09 -04:00
|
|
|
boot!
|
2021-04-12 14:31:12 -04:00
|
|
|
assert_equal "ActionDispatch::MiddlewareStack::FakeRuntime", middleware[5]
|
2020-02-05 00:07:56 -05:00
|
|
|
assert_instance_of ActiveSupport::Cache::MemoryStore, Rails.cache
|
2010-06-24 12:42:09 -04:00
|
|
|
end
|
|
|
|
|
2012-01-17 11:53:09 -05:00
|
|
|
test "Rails.cache does respond to middleware" do
|
2010-06-24 12:42:09 -04:00
|
|
|
boot!
|
2018-06-14 04:09:00 -04:00
|
|
|
assert_equal "ActiveSupport::Cache::Strategy::LocalCache", middleware[5]
|
2021-04-12 14:31:12 -04:00
|
|
|
assert_equal "ActionDispatch::MiddlewareStack::FakeRuntime", middleware[6]
|
2010-06-24 12:42:09 -04:00
|
|
|
end
|
|
|
|
|
2010-01-04 20:38:56 -05:00
|
|
|
test "insert middleware before" do
|
2013-07-15 01:33:09 -04:00
|
|
|
add_to_config "config.middleware.insert_before Rack::Sendfile, Rack::Config"
|
2010-01-04 20:38:56 -05:00
|
|
|
boot!
|
2018-06-14 04:09:00 -04:00
|
|
|
assert_equal "Rack::Config", middleware.third
|
2010-01-04 20:38:56 -05:00
|
|
|
end
|
|
|
|
|
2012-04-20 15:17:03 -04:00
|
|
|
test "can't change middleware after it's built" do
|
|
|
|
boot!
|
2018-12-21 20:43:05 -05:00
|
|
|
assert_raise FrozenError do
|
2012-04-20 15:17:03 -04:00
|
|
|
app.config.middleware.use Rack::Config
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-09-22 15:40:14 -04:00
|
|
|
# ConditionalGet + Etag
|
|
|
|
test "conditional get + etag middlewares handle http caching based on body" do
|
|
|
|
make_basic_app
|
|
|
|
|
|
|
|
class ::OmgController < ActionController::Base
|
|
|
|
def index
|
|
|
|
if params[:nothing]
|
2016-05-21 08:49:38 -04:00
|
|
|
render plain: ""
|
2010-09-22 15:40:14 -04:00
|
|
|
else
|
2016-05-21 08:49:38 -04:00
|
|
|
render plain: "OMG"
|
2010-09-22 15:40:14 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-06 17:30:42 -04:00
|
|
|
etag = "W/" + "c00862d1c6c1cf7c1b49388306e7b3c1".inspect
|
2010-09-22 15:40:14 -04:00
|
|
|
|
|
|
|
get "/"
|
|
|
|
assert_equal 200, last_response.status
|
|
|
|
assert_equal "OMG", last_response.body
|
2016-05-21 08:49:38 -04:00
|
|
|
assert_equal "text/plain; charset=utf-8", last_response.headers["Content-Type"]
|
2010-09-22 15:40:14 -04:00
|
|
|
assert_equal "max-age=0, private, must-revalidate", last_response.headers["Cache-Control"]
|
|
|
|
assert_equal etag, last_response.headers["Etag"]
|
|
|
|
|
2017-08-12 07:31:46 -04:00
|
|
|
get "/", {}, { "HTTP_IF_NONE_MATCH" => etag }
|
2010-09-22 15:40:14 -04:00
|
|
|
assert_equal 304, last_response.status
|
|
|
|
assert_equal "", last_response.body
|
2016-12-24 12:29:52 -05:00
|
|
|
assert_nil last_response.headers["Content-Type"]
|
2010-09-22 15:40:14 -04:00
|
|
|
assert_equal "max-age=0, private, must-revalidate", last_response.headers["Cache-Control"]
|
|
|
|
assert_equal etag, last_response.headers["Etag"]
|
|
|
|
|
|
|
|
get "/?nothing=true"
|
|
|
|
assert_equal 200, last_response.status
|
|
|
|
assert_equal "", last_response.body
|
2016-05-21 08:49:38 -04:00
|
|
|
assert_equal "text/plain; charset=utf-8", last_response.headers["Content-Type"]
|
2010-09-22 15:40:14 -04:00
|
|
|
assert_equal "no-cache", last_response.headers["Cache-Control"]
|
2016-12-24 12:29:52 -05:00
|
|
|
assert_nil last_response.headers["Etag"]
|
2010-09-22 15:40:14 -04:00
|
|
|
end
|
|
|
|
|
2011-12-20 14:17:17 -05:00
|
|
|
test "ORIGINAL_FULLPATH is passed to env" do
|
|
|
|
boot!
|
|
|
|
env = ::Rack::MockRequest.env_for("/foo/?something")
|
|
|
|
Rails.application.call(env)
|
|
|
|
|
|
|
|
assert_equal "/foo/?something", env["ORIGINAL_FULLPATH"]
|
|
|
|
end
|
|
|
|
|
2010-01-04 20:34:42 -05:00
|
|
|
private
|
|
|
|
def boot!
|
|
|
|
require "#{app_path}/config/environment"
|
|
|
|
end
|
|
|
|
|
|
|
|
def middleware
|
2013-06-09 22:47:07 -04:00
|
|
|
Rails.application.middleware.map(&:klass).map(&:name)
|
2010-01-04 20:34:42 -05:00
|
|
|
end
|
|
|
|
end
|
2011-06-06 08:54:05 -04:00
|
|
|
end
|