Module: Jets::SpecHelpers::Controllers

Includes:
Router::Helpers
Included in:
Jets::SpecHelpers
Defined in:
lib/jets/spec_helpers/controllers.rb,
lib/jets/spec_helpers/controllers/params.rb,
lib/jets/spec_helpers/controllers/request.rb,
lib/jets/spec_helpers/controllers/response.rb

Defined Under Namespace

Classes: Params, Request, Response

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#requestObject (readonly)

Returns the value of attribute request.



16
17
18
# File 'lib/jets/spec_helpers/controllers.rb', line 16

def request
  @request
end

#responseObject (readonly)

Returns the value of attribute response.



16
17
18
# File 'lib/jets/spec_helpers/controllers.rb', line 16

def response
  @response
end

Instance Method Details

#http_call(method:, path:, **options) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/jets/spec_helpers/controllers.rb', line 17

def http_call(method:, path:, **options)
  headers = options.delete(:headers) || {}
  params_hash = options.delete(:params) || options
  md = path.match(/\?(.*)/)
  path = path.gsub("?#{md[1]}", '') if md
  query = md ? Rack::Utils.parse_nested_query(md[1]).merge(params_hash) : params_hash

  params = Params.new
  if method.to_sym == :get
    params.body_params = {}
    params.query_params = query || {}
  else
    params.body_params = options.delete(:body) || query
  end

  # Note: Do not cache the request object.  Otherwise, it cannot be reused between specs.
  # See: https://community.rubyonjets.com/t/is-jets-spechelpers-controllers-request-being-cached/244/2
  @request = Request.new(method, path, headers, params)

  @request.method = method.to_sym
  @request.path = path
  @request.headers.deep_merge!(headers)

  suppress_logging do
    @response = @request.dispatch!
  end
end

#suppress_loggingObject



45
46
47
48
49
50
51
52
# File 'lib/jets/spec_helpers/controllers.rb', line 45

def suppress_logging
  old_logger = Jets.logger
  unless ENV['JETS_TEST_LOGGING']
    Jets.logger = ActionView::Base.logger = Logger.new("/dev/null")
  end
  yield
  Jets.logger = old_logger
end