Skip to content

Commit 94dce11

Browse files
authored
Add TestHelpers#vc_test_request (#1678)
In #1661, I renamed several private TestHelper methods to indicate that they should not be used by consumers. However, we depended on the request method in the GitHub.com test suite. I've chosen to reintroduce this method with a new name, as we originally made it private due to it conflicting with folks setting a request method name in tests.
1 parent a2b85a7 commit 94dce11

File tree

4 files changed

+39
-24
lines changed

4 files changed

+39
-24
lines changed

docs/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ nav_order: 5
1010

1111
## main
1212

13+
* Add `TestHelpers#vc_test_request`.
14+
15+
*Joel Hawksley*
16+
1317
## v3.0.0.rc3
1418

1519
Run into an issue with this release candidate? [Let us know](https://github.com/ViewComponent/view_component/issues/1629).

lib/view_component/test_helpers.rb

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,23 @@ def with_controller_class(klass)
157157
#
158158
# @param path [String] The path to set for the current request.
159159
def with_request_url(path)
160-
old_request_path_info = __vc_test_helpers_request.path_info
161-
old_request_path_parameters = __vc_test_helpers_request.path_parameters
162-
old_request_query_parameters = __vc_test_helpers_request.query_parameters
163-
old_request_query_string = __vc_test_helpers_request.query_string
160+
old_request_path_info = vc_test_request.path_info
161+
old_request_path_parameters = vc_test_request.path_parameters
162+
old_request_query_parameters = vc_test_request.query_parameters
163+
old_request_query_string = vc_test_request.query_string
164164
old_controller = defined?(@vc_test_controller) && @vc_test_controller
165165

166166
path, query = path.split("?", 2)
167-
__vc_test_helpers_request.path_info = path
168-
__vc_test_helpers_request.path_parameters = Rails.application.routes.recognize_path_with_request(__vc_test_helpers_request, path, {})
169-
__vc_test_helpers_request.set_header("action_dispatch.request.query_parameters", Rack::Utils.parse_nested_query(query))
170-
__vc_test_helpers_request.set_header(Rack::QUERY_STRING, query)
167+
vc_test_request.path_info = path
168+
vc_test_request.path_parameters = Rails.application.routes.recognize_path_with_request(vc_test_request, path, {})
169+
vc_test_request.set_header("action_dispatch.request.query_parameters", Rack::Utils.parse_nested_query(query))
170+
vc_test_request.set_header(Rack::QUERY_STRING, query)
171171
yield
172172
ensure
173-
__vc_test_helpers_request.path_info = old_request_path_info
174-
__vc_test_helpers_request.path_parameters = old_request_path_parameters
175-
__vc_test_helpers_request.set_header("action_dispatch.request.query_parameters", old_request_query_parameters)
176-
__vc_test_helpers_request.set_header(Rack::QUERY_STRING, old_request_query_string)
173+
vc_test_request.path_info = old_request_path_info
174+
vc_test_request.path_parameters = old_request_path_parameters
175+
vc_test_request.set_header("action_dispatch.request.query_parameters", old_request_query_parameters)
176+
vc_test_request.set_header(Rack::QUERY_STRING, old_request_query_string)
177177
@vc_test_controller = old_controller
178178
end
179179

@@ -192,20 +192,31 @@ def vc_test_controller
192192
@vc_test_controller ||= __vc_test_helpers_build_controller(Base.test_controller.constantize)
193193
end
194194

195-
# Note: We prefix private methods here to prevent collisions in consumer's tests.
196-
private
197-
198-
def __vc_test_helpers_request
199-
@__vc_test_helpers_request ||=
195+
# Access the request used by `render_inline`:
196+
#
197+
# ```ruby
198+
# test "component does not render in Firefox" do
199+
# request.env["HTTP_USER_AGENT"] = "Mozilla/5.0"
200+
# render_inline(NoFirefoxComponent.new)
201+
# refute_component_rendered
202+
# end
203+
# ```
204+
#
205+
# @return [ActionDispatch::TestRequest]
206+
def vc_test_request
207+
@vc_test_request ||=
200208
begin
201209
out = ActionDispatch::TestRequest.create
202210
out.session = ActionController::TestSession.new
203211
out
204212
end
205213
end
206214

215+
# Note: We prefix private methods here to prevent collisions in consumer's tests.
216+
private
217+
207218
def __vc_test_helpers_build_controller(klass)
208-
klass.new.tap { |c| c.request = __vc_test_helpers_request }.extend(Rails.application.routes.url_helpers)
219+
klass.new.tap { |c| c.request = vc_test_request }.extend(Rails.application.routes.url_helpers)
209220
end
210221

211222
def __vc_test_helpers_preview_class

test/sandbox/test/rendering_test.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,7 @@ def test_with_request_url
841841
end
842842

843843
with_request_url "/products" do
844-
assert_equal "/products", __vc_test_helpers_request.path
844+
assert_equal "/products", vc_test_request.path
845845
end
846846
end
847847

@@ -862,13 +862,13 @@ def test_with_request_url_with_query_parameters
862862
end
863863

864864
with_request_url "/products?mykey=myvalue&otherkey=othervalue" do
865-
assert_equal "/products", __vc_test_helpers_request.path
866-
assert_equal "mykey=myvalue&otherkey=othervalue", __vc_test_helpers_request.query_string
867-
assert_equal "/products?mykey=myvalue&otherkey=othervalue", __vc_test_helpers_request.fullpath
865+
assert_equal "/products", vc_test_request.path
866+
assert_equal "mykey=myvalue&otherkey=othervalue", vc_test_request.query_string
867+
assert_equal "/products?mykey=myvalue&otherkey=othervalue", vc_test_request.fullpath
868868
end
869869

870870
with_request_url "/products?mykey[mynestedkey]=myvalue" do
871-
assert_equal({"mynestedkey" => "myvalue"}, __vc_test_helpers_request.parameters["mykey"])
871+
assert_equal({"mynestedkey" => "myvalue"}, vc_test_request.parameters["mykey"])
872872
end
873873
end
874874

test/sandbox/test/test_helper_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def test_with_request_url_under_constraint
2323
warden = Minitest::Mock.new
2424
warden.expect(:authenticate!, true)
2525

26-
__vc_test_helpers_request.env["warden"] = warden
26+
vc_test_request.env["warden"] = warden
2727

2828
with_request_url "/constraints_with_env" do
2929
render_inline(ControllerInlineComponent.new(message: "request.env is valid"))

0 commit comments

Comments
 (0)