module ViewComponent::TestHelpers

def with_request_url(full_path, host: nil, method: nil, format: ViewComponent::Base::VC_INTERNAL_DEFAULT_FORMAT)

Parameters:
  • method (String) -- The request method to set for the current request.
  • host (String) -- The host to set for the current request.
  • full_path (String) -- The path to set for the current request.
def with_request_url(full_path, host: nil, method: nil, format: ViewComponent::Base::VC_INTERNAL_DEFAULT_FORMAT)
  old_request_host = vc_test_request.host
  old_request_method = vc_test_request.request_method
  old_request_path_info = vc_test_request.path_info
  old_request_path_parameters = vc_test_request.path_parameters
  old_request_query_parameters = vc_test_request.query_parameters
  old_request_query_string = vc_test_request.query_string
  old_request_format = vc_test_request.format.symbol
  old_controller = defined?(@vc_test_controller) && @vc_test_controller
  path, query = full_path.split("?", 2)
  vc_test_request.instance_variable_set(:@fullpath, full_path)
  vc_test_request.instance_variable_set(:@original_fullpath, full_path)
  vc_test_request.host = host if host
  vc_test_request.request_method = method if method
  vc_test_request.path_info = path
  vc_test_request.path_parameters = Rails.application.routes.recognize_path_with_request(vc_test_request, path, {})
  vc_test_request.set_header("action_dispatch.request.query_parameters",
    Rack::Utils.parse_nested_query(query).with_indifferent_access)
  vc_test_request.set_header(Rack::QUERY_STRING, query)
  vc_test_request.format = format
  yield
ensure
  vc_test_request.host = old_request_host
  vc_test_request.request_method = old_request_method
  vc_test_request.path_info = old_request_path_info
  vc_test_request.path_parameters = old_request_path_parameters
  vc_test_request.set_header("action_dispatch.request.query_parameters", old_request_query_parameters)
  vc_test_request.set_header(Rack::QUERY_STRING, old_request_query_string)
  vc_test_request.format = old_request_format
  @vc_test_controller = old_controller
end