actionpack 3.2.22.5 → 5.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +279 -603
- data/MIT-LICENSE +1 -1
- data/README.rdoc +13 -297
- data/lib/abstract_controller/asset_paths.rb +4 -2
- data/lib/abstract_controller/base.rb +82 -52
- data/lib/abstract_controller/caching/fragments.rb +166 -0
- data/lib/abstract_controller/caching.rb +66 -0
- data/lib/abstract_controller/callbacks.rb +117 -103
- data/lib/abstract_controller/collector.rb +18 -7
- data/lib/abstract_controller/error.rb +6 -0
- data/lib/abstract_controller/helpers.rb +65 -38
- data/lib/abstract_controller/logger.rb +3 -2
- data/lib/abstract_controller/railties/routes_helpers.rb +5 -3
- data/lib/abstract_controller/rendering.rb +77 -129
- data/lib/abstract_controller/translation.rb +21 -3
- data/lib/abstract_controller/url_for.rb +9 -7
- data/lib/abstract_controller.rb +12 -13
- data/lib/action_controller/api/api_rendering.rb +16 -0
- data/lib/action_controller/api.rb +149 -0
- data/lib/action_controller/base.rb +81 -40
- data/lib/action_controller/caching.rb +22 -62
- data/lib/action_controller/form_builder.rb +50 -0
- data/lib/action_controller/log_subscriber.rb +30 -18
- data/lib/action_controller/metal/basic_implicit_render.rb +13 -0
- data/lib/action_controller/metal/conditional_get.rb +190 -47
- data/lib/action_controller/metal/content_security_policy.rb +52 -0
- data/lib/action_controller/metal/cookies.rb +3 -3
- data/lib/action_controller/metal/data_streaming.rb +40 -65
- data/lib/action_controller/metal/etag_with_flash.rb +18 -0
- data/lib/action_controller/metal/etag_with_template_digest.rb +57 -0
- data/lib/action_controller/metal/exceptions.rb +19 -12
- data/lib/action_controller/metal/flash.rb +42 -9
- data/lib/action_controller/metal/force_ssl.rb +79 -19
- data/lib/action_controller/metal/head.rb +35 -10
- data/lib/action_controller/metal/helpers.rb +31 -21
- data/lib/action_controller/metal/http_authentication.rb +182 -134
- data/lib/action_controller/metal/implicit_render.rb +62 -8
- data/lib/action_controller/metal/instrumentation.rb +28 -26
- data/lib/action_controller/metal/live.rb +312 -0
- data/lib/action_controller/metal/mime_responds.rb +159 -163
- data/lib/action_controller/metal/parameter_encoding.rb +51 -0
- data/lib/action_controller/metal/params_wrapper.rb +146 -93
- data/lib/action_controller/metal/redirecting.rb +80 -56
- data/lib/action_controller/metal/renderers.rb +119 -47
- data/lib/action_controller/metal/rendering.rb +89 -32
- data/lib/action_controller/metal/request_forgery_protection.rb +373 -41
- data/lib/action_controller/metal/rescue.rb +9 -16
- data/lib/action_controller/metal/streaming.rb +39 -45
- data/lib/action_controller/metal/strong_parameters.rb +1086 -0
- data/lib/action_controller/metal/testing.rb +8 -29
- data/lib/action_controller/metal/url_for.rb +43 -32
- data/lib/action_controller/metal.rb +112 -106
- data/lib/action_controller/railtie.rb +56 -18
- data/lib/action_controller/railties/helpers.rb +24 -0
- data/lib/action_controller/renderer.rb +117 -0
- data/lib/action_controller/template_assertions.rb +11 -0
- data/lib/action_controller/test_case.rb +402 -347
- data/lib/action_controller.rb +31 -30
- data/lib/action_dispatch/http/cache.rb +133 -34
- data/lib/action_dispatch/http/content_security_policy.rb +272 -0
- data/lib/action_dispatch/http/filter_parameters.rb +40 -24
- data/lib/action_dispatch/http/filter_redirect.rb +37 -0
- data/lib/action_dispatch/http/headers.rb +117 -16
- data/lib/action_dispatch/http/mime_negotiation.rb +98 -33
- data/lib/action_dispatch/http/mime_type.rb +198 -146
- data/lib/action_dispatch/http/mime_types.rb +22 -7
- data/lib/action_dispatch/http/parameter_filter.rb +61 -49
- data/lib/action_dispatch/http/parameters.rb +94 -51
- data/lib/action_dispatch/http/rack_cache.rb +4 -3
- data/lib/action_dispatch/http/request.rb +262 -117
- data/lib/action_dispatch/http/response.rb +400 -86
- data/lib/action_dispatch/http/upload.rb +66 -29
- data/lib/action_dispatch/http/url.rb +232 -60
- data/lib/action_dispatch/journey/formatter.rb +189 -0
- data/lib/action_dispatch/journey/gtg/builder.rb +164 -0
- data/lib/action_dispatch/journey/gtg/simulator.rb +41 -0
- data/lib/action_dispatch/journey/gtg/transition_table.rb +158 -0
- data/lib/action_dispatch/journey/nfa/builder.rb +78 -0
- data/lib/action_dispatch/journey/nfa/dot.rb +36 -0
- data/lib/action_dispatch/journey/nfa/simulator.rb +49 -0
- data/lib/action_dispatch/journey/nfa/transition_table.rb +120 -0
- data/lib/action_dispatch/journey/nodes/node.rb +140 -0
- data/lib/action_dispatch/journey/parser.rb +199 -0
- data/lib/action_dispatch/journey/parser.y +50 -0
- data/lib/action_dispatch/journey/parser_extras.rb +31 -0
- data/lib/action_dispatch/journey/path/pattern.rb +199 -0
- data/lib/action_dispatch/journey/route.rb +203 -0
- data/lib/action_dispatch/journey/router/utils.rb +102 -0
- data/lib/action_dispatch/journey/router.rb +156 -0
- data/lib/action_dispatch/journey/routes.rb +82 -0
- data/lib/action_dispatch/journey/scanner.rb +64 -0
- data/lib/action_dispatch/journey/visitors.rb +268 -0
- data/lib/action_dispatch/journey/visualizer/fsm.css +30 -0
- data/lib/action_dispatch/journey/visualizer/fsm.js +134 -0
- data/lib/action_dispatch/journey/visualizer/index.html.erb +52 -0
- data/lib/action_dispatch/journey.rb +7 -0
- data/lib/action_dispatch/middleware/callbacks.rb +17 -13
- data/lib/action_dispatch/middleware/cookies.rb +494 -162
- data/lib/action_dispatch/middleware/debug_exceptions.rb +176 -53
- data/lib/action_dispatch/middleware/debug_locks.rb +124 -0
- data/lib/action_dispatch/middleware/exception_wrapper.rb +103 -38
- data/lib/action_dispatch/middleware/executor.rb +21 -0
- data/lib/action_dispatch/middleware/flash.rb +128 -91
- data/lib/action_dispatch/middleware/public_exceptions.rb +43 -16
- data/lib/action_dispatch/middleware/reloader.rb +6 -83
- data/lib/action_dispatch/middleware/remote_ip.rb +151 -49
- data/lib/action_dispatch/middleware/request_id.rb +19 -15
- data/lib/action_dispatch/middleware/session/abstract_store.rb +38 -34
- data/lib/action_dispatch/middleware/session/cache_store.rb +14 -9
- data/lib/action_dispatch/middleware/session/cookie_store.rb +94 -44
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +15 -4
- data/lib/action_dispatch/middleware/show_exceptions.rb +36 -61
- data/lib/action_dispatch/middleware/ssl.rb +150 -0
- data/lib/action_dispatch/middleware/stack.rb +33 -41
- data/lib/action_dispatch/middleware/static.rb +92 -48
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +22 -0
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +23 -0
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +27 -0
- data/lib/action_dispatch/middleware/templates/rescues/_source.text.erb +8 -0
- data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +52 -0
- data/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb +9 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +16 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +9 -0
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +21 -0
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +13 -0
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +134 -5
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +11 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +32 -0
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.text.erb +11 -0
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +20 -0
- data/lib/action_dispatch/middleware/templates/rescues/template_error.text.erb +7 -0
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +6 -0
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +16 -0
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +200 -0
- data/lib/action_dispatch/railtie.rb +29 -8
- data/lib/action_dispatch/request/session.rb +234 -0
- data/lib/action_dispatch/request/utils.rb +78 -0
- data/lib/action_dispatch/routing/endpoint.rb +17 -0
- data/lib/action_dispatch/routing/inspector.rb +225 -0
- data/lib/action_dispatch/routing/mapper.rb +1329 -582
- data/lib/action_dispatch/routing/polymorphic_routes.rb +237 -94
- data/lib/action_dispatch/routing/redirection.rb +120 -50
- data/lib/action_dispatch/routing/route_set.rb +545 -322
- data/lib/action_dispatch/routing/routes_proxy.rb +37 -7
- data/lib/action_dispatch/routing/url_for.rb +103 -34
- data/lib/action_dispatch/routing.rb +66 -99
- data/lib/action_dispatch/system_test_case.rb +147 -0
- data/lib/action_dispatch/system_testing/browser.rb +49 -0
- data/lib/action_dispatch/system_testing/driver.rb +59 -0
- data/lib/action_dispatch/system_testing/server.rb +31 -0
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +96 -0
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +31 -0
- data/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +26 -0
- data/lib/action_dispatch/testing/assertion_response.rb +47 -0
- data/lib/action_dispatch/testing/assertions/response.rb +53 -42
- data/lib/action_dispatch/testing/assertions/routing.rb +79 -74
- data/lib/action_dispatch/testing/assertions.rb +15 -9
- data/lib/action_dispatch/testing/integration.rb +361 -207
- data/lib/action_dispatch/testing/request_encoder.rb +55 -0
- data/lib/action_dispatch/testing/test_process.rb +28 -19
- data/lib/action_dispatch/testing/test_request.rb +30 -33
- data/lib/action_dispatch/testing/test_response.rb +35 -11
- data/lib/action_dispatch.rb +42 -32
- data/lib/action_pack/gem_version.rb +17 -0
- data/lib/action_pack/version.rb +7 -7
- data/lib/action_pack.rb +4 -2
- metadata +116 -175
- data/lib/abstract_controller/layouts.rb +0 -423
- data/lib/abstract_controller/view_paths.rb +0 -96
- data/lib/action_controller/caching/actions.rb +0 -185
- data/lib/action_controller/caching/fragments.rb +0 -127
- data/lib/action_controller/caching/pages.rb +0 -187
- data/lib/action_controller/caching/sweeping.rb +0 -97
- data/lib/action_controller/deprecated/integration_test.rb +0 -2
- data/lib/action_controller/deprecated/performance_test.rb +0 -1
- data/lib/action_controller/deprecated.rb +0 -3
- data/lib/action_controller/metal/compatibility.rb +0 -65
- data/lib/action_controller/metal/hide_actions.rb +0 -41
- data/lib/action_controller/metal/rack_delegation.rb +0 -26
- data/lib/action_controller/metal/responder.rb +0 -286
- data/lib/action_controller/metal/session_management.rb +0 -14
- data/lib/action_controller/middleware.rb +0 -39
- data/lib/action_controller/railties/paths.rb +0 -25
- data/lib/action_controller/record_identifier.rb +0 -85
- data/lib/action_controller/vendor/html-scanner/html/document.rb +0 -68
- data/lib/action_controller/vendor/html-scanner/html/node.rb +0 -532
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +0 -177
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +0 -830
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +0 -107
- data/lib/action_controller/vendor/html-scanner/html/version.rb +0 -11
- data/lib/action_controller/vendor/html-scanner.rb +0 -20
- data/lib/action_dispatch/middleware/best_standards_support.rb +0 -30
- data/lib/action_dispatch/middleware/body_proxy.rb +0 -30
- data/lib/action_dispatch/middleware/head.rb +0 -18
- data/lib/action_dispatch/middleware/params_parser.rb +0 -75
- data/lib/action_dispatch/middleware/rescue.rb +0 -26
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb +0 -31
- data/lib/action_dispatch/middleware/templates/rescues/_trace.erb +0 -26
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +0 -10
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.erb +0 -2
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.erb +0 -15
- data/lib/action_dispatch/middleware/templates/rescues/template_error.erb +0 -17
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb +0 -2
- data/lib/action_dispatch/testing/assertions/dom.rb +0 -37
- data/lib/action_dispatch/testing/assertions/selector.rb +0 -435
- data/lib/action_dispatch/testing/assertions/tag.rb +0 -138
- data/lib/action_dispatch/testing/performance_test.rb +0 -10
- data/lib/action_view/asset_paths.rb +0 -142
- data/lib/action_view/base.rb +0 -220
- data/lib/action_view/buffers.rb +0 -43
- data/lib/action_view/context.rb +0 -36
- data/lib/action_view/flows.rb +0 -79
- data/lib/action_view/helpers/active_model_helper.rb +0 -50
- data/lib/action_view/helpers/asset_paths.rb +0 -7
- data/lib/action_view/helpers/asset_tag_helper.rb +0 -457
- data/lib/action_view/helpers/asset_tag_helpers/asset_include_tag.rb +0 -146
- data/lib/action_view/helpers/asset_tag_helpers/asset_paths.rb +0 -93
- data/lib/action_view/helpers/asset_tag_helpers/javascript_tag_helpers.rb +0 -193
- data/lib/action_view/helpers/asset_tag_helpers/stylesheet_tag_helpers.rb +0 -148
- data/lib/action_view/helpers/atom_feed_helper.rb +0 -200
- data/lib/action_view/helpers/cache_helper.rb +0 -64
- data/lib/action_view/helpers/capture_helper.rb +0 -203
- data/lib/action_view/helpers/controller_helper.rb +0 -25
- data/lib/action_view/helpers/csrf_helper.rb +0 -32
- data/lib/action_view/helpers/date_helper.rb +0 -1062
- data/lib/action_view/helpers/debug_helper.rb +0 -40
- data/lib/action_view/helpers/form_helper.rb +0 -1486
- data/lib/action_view/helpers/form_options_helper.rb +0 -658
- data/lib/action_view/helpers/form_tag_helper.rb +0 -685
- data/lib/action_view/helpers/javascript_helper.rb +0 -110
- data/lib/action_view/helpers/number_helper.rb +0 -622
- data/lib/action_view/helpers/output_safety_helper.rb +0 -38
- data/lib/action_view/helpers/record_tag_helper.rb +0 -111
- data/lib/action_view/helpers/rendering_helper.rb +0 -92
- data/lib/action_view/helpers/sanitize_helper.rb +0 -259
- data/lib/action_view/helpers/tag_helper.rb +0 -167
- data/lib/action_view/helpers/text_helper.rb +0 -426
- data/lib/action_view/helpers/translation_helper.rb +0 -91
- data/lib/action_view/helpers/url_helper.rb +0 -693
- data/lib/action_view/helpers.rb +0 -60
- data/lib/action_view/locale/en.yml +0 -160
- data/lib/action_view/log_subscriber.rb +0 -28
- data/lib/action_view/lookup_context.rb +0 -258
- data/lib/action_view/path_set.rb +0 -101
- data/lib/action_view/railtie.rb +0 -55
- data/lib/action_view/renderer/abstract_renderer.rb +0 -41
- data/lib/action_view/renderer/partial_renderer.rb +0 -415
- data/lib/action_view/renderer/renderer.rb +0 -61
- data/lib/action_view/renderer/streaming_template_renderer.rb +0 -106
- data/lib/action_view/renderer/template_renderer.rb +0 -95
- data/lib/action_view/template/error.rb +0 -128
- data/lib/action_view/template/handlers/builder.rb +0 -26
- data/lib/action_view/template/handlers/erb.rb +0 -125
- data/lib/action_view/template/handlers.rb +0 -50
- data/lib/action_view/template/resolver.rb +0 -298
- data/lib/action_view/template/text.rb +0 -30
- data/lib/action_view/template.rb +0 -337
- data/lib/action_view/test_case.rb +0 -246
- data/lib/action_view/testing/resolvers.rb +0 -49
- data/lib/action_view.rb +0 -84
- data/lib/sprockets/assets.rake +0 -99
- data/lib/sprockets/bootstrap.rb +0 -37
- data/lib/sprockets/compressors.rb +0 -83
- data/lib/sprockets/helpers/isolated_helper.rb +0 -13
- data/lib/sprockets/helpers/rails_helper.rb +0 -182
- data/lib/sprockets/helpers.rb +0 -6
- data/lib/sprockets/railtie.rb +0 -62
- data/lib/sprockets/static_compiler.rb +0 -56
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "uri"
|
|
4
|
+
require "active_support/core_ext/hash/indifferent_access"
|
|
5
|
+
require "active_support/core_ext/string/access"
|
|
6
|
+
require "action_controller/metal/exceptions"
|
|
5
7
|
|
|
6
8
|
module ActionDispatch
|
|
7
9
|
module Assertions
|
|
@@ -14,40 +16,48 @@ module ActionDispatch
|
|
|
14
16
|
# requiring a specific HTTP method. The hash should contain a :path with the incoming request path
|
|
15
17
|
# and a :method containing the required HTTP verb.
|
|
16
18
|
#
|
|
17
|
-
# #
|
|
18
|
-
# assert_recognizes({:
|
|
19
|
+
# # Asserts that POSTing to /items will call the create action on ItemsController
|
|
20
|
+
# assert_recognizes({controller: 'items', action: 'create'}, {path: 'items', method: :post})
|
|
19
21
|
#
|
|
20
22
|
# You can also pass in +extras+ with a hash containing URL parameters that would normally be in the query string. This can be used
|
|
21
|
-
# to assert that values in the query string
|
|
22
|
-
#
|
|
23
|
+
# to assert that values in the query string will end up in the params hash correctly. To test query strings you must use the extras
|
|
24
|
+
# argument because appending the query string on the path directly will not work. For example:
|
|
23
25
|
#
|
|
24
|
-
# #
|
|
25
|
-
# assert_recognizes({:
|
|
26
|
+
# # Asserts that a path of '/items/list/1?view=print' returns the correct options
|
|
27
|
+
# assert_recognizes({controller: 'items', action: 'list', id: '1', view: 'print'}, 'items/list/1', { view: "print" })
|
|
26
28
|
#
|
|
27
29
|
# The +message+ parameter allows you to pass in an error message that is displayed upon failure.
|
|
28
30
|
#
|
|
29
|
-
# ==== Examples
|
|
30
31
|
# # Check the default route (i.e., the index action)
|
|
31
|
-
# assert_recognizes({:
|
|
32
|
+
# assert_recognizes({controller: 'items', action: 'index'}, 'items')
|
|
32
33
|
#
|
|
33
34
|
# # Test a specific action
|
|
34
|
-
# assert_recognizes({:
|
|
35
|
+
# assert_recognizes({controller: 'items', action: 'list'}, 'items/list')
|
|
35
36
|
#
|
|
36
37
|
# # Test an action with a parameter
|
|
37
|
-
# assert_recognizes({:
|
|
38
|
+
# assert_recognizes({controller: 'items', action: 'destroy', id: '1'}, 'items/destroy/1')
|
|
38
39
|
#
|
|
39
40
|
# # Test a custom route
|
|
40
|
-
# assert_recognizes({:
|
|
41
|
-
def assert_recognizes(expected_options, path, extras={},
|
|
42
|
-
|
|
41
|
+
# assert_recognizes({controller: 'items', action: 'show', id: '1'}, 'view/item1')
|
|
42
|
+
def assert_recognizes(expected_options, path, extras = {}, msg = nil)
|
|
43
|
+
if path.is_a?(Hash) && path[:method].to_s == "all"
|
|
44
|
+
[:get, :post, :put, :delete].each do |method|
|
|
45
|
+
assert_recognizes(expected_options, path.merge(method: method), extras, msg)
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
request = recognized_request_for(path, extras, msg)
|
|
43
49
|
|
|
44
|
-
|
|
45
|
-
extras.each_key { |key| expected_options.delete key } unless extras.nil?
|
|
50
|
+
expected_options = expected_options.clone
|
|
46
51
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
expected_options.stringify_keys!
|
|
53
|
+
|
|
54
|
+
msg = message(msg, "") {
|
|
55
|
+
sprintf("The recognized options <%s> did not match <%s>, difference:",
|
|
56
|
+
request.path_parameters, expected_options)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
assert_equal(expected_options, request.path_parameters, msg)
|
|
60
|
+
end
|
|
51
61
|
end
|
|
52
62
|
|
|
53
63
|
# Asserts that the provided options can be used to generate the provided path. This is the inverse of +assert_recognizes+.
|
|
@@ -56,38 +66,36 @@ module ActionDispatch
|
|
|
56
66
|
#
|
|
57
67
|
# The +defaults+ parameter is unused.
|
|
58
68
|
#
|
|
59
|
-
# ==== Examples
|
|
60
69
|
# # Asserts that the default action is generated for a route with no action
|
|
61
|
-
# assert_generates "/items", :
|
|
70
|
+
# assert_generates "/items", controller: "items", action: "index"
|
|
62
71
|
#
|
|
63
72
|
# # Tests that the list action is properly routed
|
|
64
|
-
# assert_generates "/items/list", :
|
|
73
|
+
# assert_generates "/items/list", controller: "items", action: "list"
|
|
65
74
|
#
|
|
66
75
|
# # Tests the generation of a route with a parameter
|
|
67
|
-
# assert_generates "/items/list/1", { :
|
|
76
|
+
# assert_generates "/items/list/1", { controller: "items", action: "list", id: "1" }
|
|
68
77
|
#
|
|
69
78
|
# # Asserts that the generated route gives us our custom route
|
|
70
|
-
# assert_generates "changesets/12", { :
|
|
71
|
-
def assert_generates(expected_path, options, defaults={}, extras = {}, message=nil)
|
|
79
|
+
# assert_generates "changesets/12", { controller: 'scm', action: 'show_diff', revision: "12" }
|
|
80
|
+
def assert_generates(expected_path, options, defaults = {}, extras = {}, message = nil)
|
|
72
81
|
if expected_path =~ %r{://}
|
|
73
|
-
|
|
82
|
+
fail_on(URI::InvalidURIError, message) do
|
|
74
83
|
uri = URI.parse(expected_path)
|
|
75
84
|
expected_path = uri.path.to_s.empty? ? "/" : uri.path
|
|
76
|
-
rescue URI::InvalidURIError => e
|
|
77
|
-
raise ActionController::RoutingError, e.message
|
|
78
85
|
end
|
|
79
86
|
else
|
|
80
|
-
expected_path = "/#{expected_path}" unless expected_path.first ==
|
|
87
|
+
expected_path = "/#{expected_path}" unless expected_path.first == "/"
|
|
81
88
|
end
|
|
82
89
|
# Load routes.rb if it hasn't been loaded.
|
|
83
90
|
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
options = options.clone
|
|
92
|
+
generated_path, query_string_keys = @routes.generate_extras(options, defaults)
|
|
93
|
+
found_extras = options.reject { |k, _| ! query_string_keys.include? k }
|
|
86
94
|
|
|
87
|
-
msg =
|
|
95
|
+
msg = message || sprintf("found extras <%s>, not <%s>", found_extras, extras)
|
|
88
96
|
assert_equal(extras, found_extras, msg)
|
|
89
97
|
|
|
90
|
-
msg =
|
|
98
|
+
msg = message || sprintf("The generated path <%s> did not match <%s>", generated_path,
|
|
91
99
|
expected_path)
|
|
92
100
|
assert_equal(expected_path, generated_path, msg)
|
|
93
101
|
end
|
|
@@ -99,22 +107,21 @@ module ActionDispatch
|
|
|
99
107
|
# The +extras+ hash allows you to specify options that would normally be provided as a query string to the action. The
|
|
100
108
|
# +message+ parameter allows you to specify a custom error message to display upon failure.
|
|
101
109
|
#
|
|
102
|
-
#
|
|
103
|
-
#
|
|
104
|
-
# assert_routing '/home', :controller => 'home', :action => 'index'
|
|
110
|
+
# # Asserts a basic route: a controller with the default action (index)
|
|
111
|
+
# assert_routing '/home', controller: 'home', action: 'index'
|
|
105
112
|
#
|
|
106
113
|
# # Test a route generated with a specific controller, action, and parameter (id)
|
|
107
|
-
# assert_routing '/entries/show/23', :
|
|
114
|
+
# assert_routing '/entries/show/23', controller: 'entries', action: 'show', id: 23
|
|
108
115
|
#
|
|
109
|
-
# #
|
|
110
|
-
# assert_routing '/store', { :
|
|
116
|
+
# # Asserts a basic route (controller + default action), with an error message if it fails
|
|
117
|
+
# assert_routing '/store', { controller: 'store', action: 'index' }, {}, {}, 'Route for store index not generated properly'
|
|
111
118
|
#
|
|
112
119
|
# # Tests a route, providing a defaults hash
|
|
113
|
-
# assert_routing 'controller/action/9', {:
|
|
120
|
+
# assert_routing 'controller/action/9', {id: "9", item: "square"}, {controller: "controller", action: "action"}, {}, {item: "square"}
|
|
114
121
|
#
|
|
115
|
-
# # Tests a route with
|
|
116
|
-
# assert_routing({ :
|
|
117
|
-
def assert_routing(path, options, defaults={}, extras={}, message=nil)
|
|
122
|
+
# # Tests a route with an HTTP method
|
|
123
|
+
# assert_routing({ method: 'put', path: '/product/321' }, { controller: "product", action: "update", id: "321" })
|
|
124
|
+
def assert_routing(path, options, defaults = {}, extras = {}, message = nil)
|
|
118
125
|
assert_recognizes(options, path, extras, message)
|
|
119
126
|
|
|
120
127
|
controller, default_controller = options[:controller], defaults[:controller]
|
|
@@ -122,25 +129,21 @@ module ActionDispatch
|
|
|
122
129
|
options[:controller] = "/#{controller}"
|
|
123
130
|
end
|
|
124
131
|
|
|
125
|
-
generate_options = options.dup.delete_if{ |k,
|
|
132
|
+
generate_options = options.dup.delete_if { |k, _| defaults.key?(k) }
|
|
126
133
|
assert_generates(path.is_a?(Hash) ? path[:path] : path, generate_options, defaults, extras, message)
|
|
127
134
|
end
|
|
128
135
|
|
|
129
136
|
# A helper to make it easier to test different route configurations.
|
|
130
|
-
# This method temporarily replaces @routes
|
|
131
|
-
# with a new RouteSet instance.
|
|
137
|
+
# This method temporarily replaces @routes with a new RouteSet instance.
|
|
132
138
|
#
|
|
133
139
|
# The new instance is yielded to the passed block. Typically the block
|
|
134
|
-
# will create some routes using <tt>
|
|
140
|
+
# will create some routes using <tt>set.draw { match ... }</tt>:
|
|
135
141
|
#
|
|
136
142
|
# with_routing do |set|
|
|
137
|
-
# set.draw do
|
|
138
|
-
#
|
|
139
|
-
# assert_equal(
|
|
140
|
-
# ['/content/10/show', {}],
|
|
141
|
-
# map.generate(:controller => 'content', :id => 10, :action => 'show')
|
|
142
|
-
# end
|
|
143
|
+
# set.draw do
|
|
144
|
+
# resources :users
|
|
143
145
|
# end
|
|
146
|
+
# assert_equal "/users", users_path
|
|
144
147
|
# end
|
|
145
148
|
#
|
|
146
149
|
def with_routing
|
|
@@ -149,15 +152,12 @@ module ActionDispatch
|
|
|
149
152
|
old_controller, @controller = @controller, @controller.clone
|
|
150
153
|
_routes = @routes
|
|
151
154
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
@controller.singleton_class.send(:include, _routes.url_helpers)
|
|
159
|
-
@controller.view_context_class = Class.new(@controller.view_context_class) do
|
|
160
|
-
include _routes.url_helpers
|
|
155
|
+
@controller.singleton_class.include(_routes.url_helpers)
|
|
156
|
+
|
|
157
|
+
if @controller.respond_to? :view_context_class
|
|
158
|
+
@controller.view_context_class = Class.new(@controller.view_context_class) do
|
|
159
|
+
include _routes.url_helpers
|
|
160
|
+
end
|
|
161
161
|
end
|
|
162
162
|
end
|
|
163
163
|
yield @routes
|
|
@@ -170,7 +170,7 @@ module ActionDispatch
|
|
|
170
170
|
|
|
171
171
|
# ROUTES TODO: These assertions should really work in an integration context
|
|
172
172
|
def method_missing(selector, *args, &block)
|
|
173
|
-
if defined?(@controller) && @controller && @routes && @routes.named_routes.
|
|
173
|
+
if defined?(@controller) && @controller && defined?(@routes) && @routes && @routes.named_routes.route_defined?(selector)
|
|
174
174
|
@controller.send(selector, *args, &block)
|
|
175
175
|
else
|
|
176
176
|
super
|
|
@@ -179,7 +179,7 @@ module ActionDispatch
|
|
|
179
179
|
|
|
180
180
|
private
|
|
181
181
|
# Recognizes the route for a given path.
|
|
182
|
-
def recognized_request_for(path, extras = {})
|
|
182
|
+
def recognized_request_for(path, extras = {}, msg)
|
|
183
183
|
if path.is_a?(Hash)
|
|
184
184
|
method = path[:method]
|
|
185
185
|
path = path[:path]
|
|
@@ -187,18 +187,15 @@ module ActionDispatch
|
|
|
187
187
|
method = :get
|
|
188
188
|
end
|
|
189
189
|
|
|
190
|
-
|
|
191
|
-
request = ActionController::TestRequest.new
|
|
190
|
+
request = ActionController::TestRequest.create @controller.class
|
|
192
191
|
|
|
193
192
|
if path =~ %r{://}
|
|
194
|
-
|
|
193
|
+
fail_on(URI::InvalidURIError, msg) do
|
|
195
194
|
uri = URI.parse(path)
|
|
196
195
|
request.env["rack.url_scheme"] = uri.scheme || "http"
|
|
197
196
|
request.host = uri.host if uri.host
|
|
198
197
|
request.port = uri.port if uri.port
|
|
199
198
|
request.path = uri.path.to_s.empty? ? "/" : uri.path
|
|
200
|
-
rescue URI::InvalidURIError => e
|
|
201
|
-
raise ActionController::RoutingError, e.message
|
|
202
199
|
end
|
|
203
200
|
else
|
|
204
201
|
path = "/#{path}" unless path.first == "/"
|
|
@@ -207,11 +204,19 @@ module ActionDispatch
|
|
|
207
204
|
|
|
208
205
|
request.request_method = method if method
|
|
209
206
|
|
|
210
|
-
params =
|
|
207
|
+
params = fail_on(ActionController::RoutingError, msg) do
|
|
208
|
+
@routes.recognize_path(path, method: method, extras: extras)
|
|
209
|
+
end
|
|
211
210
|
request.path_parameters = params.with_indifferent_access
|
|
212
211
|
|
|
213
212
|
request
|
|
214
213
|
end
|
|
214
|
+
|
|
215
|
+
def fail_on(exception_class, message)
|
|
216
|
+
yield
|
|
217
|
+
rescue exception_class => e
|
|
218
|
+
raise Minitest::Assertion, message || e.message
|
|
219
|
+
end
|
|
215
220
|
end
|
|
216
221
|
end
|
|
217
222
|
end
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails-dom-testing"
|
|
4
|
+
|
|
1
5
|
module ActionDispatch
|
|
2
6
|
module Assertions
|
|
3
|
-
autoload :
|
|
4
|
-
autoload :
|
|
5
|
-
autoload :RoutingAssertions, 'action_dispatch/testing/assertions/routing'
|
|
6
|
-
autoload :SelectorAssertions, 'action_dispatch/testing/assertions/selector'
|
|
7
|
-
autoload :TagAssertions, 'action_dispatch/testing/assertions/tag'
|
|
7
|
+
autoload :ResponseAssertions, "action_dispatch/testing/assertions/response"
|
|
8
|
+
autoload :RoutingAssertions, "action_dispatch/testing/assertions/routing"
|
|
8
9
|
|
|
9
10
|
extend ActiveSupport::Concern
|
|
10
11
|
|
|
11
|
-
include DomAssertions
|
|
12
12
|
include ResponseAssertions
|
|
13
13
|
include RoutingAssertions
|
|
14
|
-
include
|
|
15
|
-
|
|
14
|
+
include Rails::Dom::Testing::Assertions
|
|
15
|
+
|
|
16
|
+
def html_document
|
|
17
|
+
@html_document ||= if @response.content_type.to_s.end_with?("xml")
|
|
18
|
+
Nokogiri::XML::Document.parse(@response.body)
|
|
19
|
+
else
|
|
20
|
+
Nokogiri::HTML::Document.parse(@response.body)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
16
23
|
end
|
|
17
24
|
end
|
|
18
|
-
|