Module: HaveAPI::Spec::SpecMethods
- Includes:
- Rack::Test::Methods
- Defined in:
- lib/haveapi/spec/spec_methods.rb
Overview
Helper methods for specs.
Instance Method Summary collapse
-
#api_response ⇒ HaveAPI::Spec::ApiResponse
Return parsed API response.
- #app ⇒ Object
-
#call_api(*args) ⇒ Object
Make API request.
-
#login(*credentials) ⇒ Object
Login with HTTP basic auth.
-
#mock_action(r_name, a_name, params, version: nil, user: nil) {|self| ... } ⇒ Object
Mock action call.
Instance Method Details
#api_response ⇒ HaveAPI::Spec::ApiResponse
Return parsed API response.
87 88 89 90 91 92 93 94 95 |
# File 'lib/haveapi/spec/spec_methods.rb', line 87 def api_response if last_response == @last_response @api_response ||= ApiResponse.new(last_response.body) else @last_response = last_response @api_response = ApiResponse.new(last_response.body) end end |
#app ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/haveapi/spec/spec_methods.rb', line 6 def app return @api.app if @api auth = get_opt(:auth_chain) default = get_opt(:default_version) @api = HaveAPI::Server.new(get_opt(:api_module)) @api.auth_chain << auth if auth @api.use_version(get_opt(:versions) || :all) @api.default_version = default if default @api.mount(get_opt(:mount) || '/') @api.app end |
#call_api(*args) ⇒ Object
Make API request. This method is a wrapper for Rack::Test::Methods. Input parameters are encoded into JSON and sent with a correct Content-Type. Two modes:
http_method, path, params = {}
[resource], action, params, &block
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/haveapi/spec/spec_methods.rb', line 31 def call_api(*args, &) if args[0].is_a?(::Array) || args[1].is_a?(::Symbol) r_name, a_name, params = args app action, path = find_action( (params && params[:version]) || @api.default_version, r_name, a_name ) method(action.http_method).call( path, params && params.to_json, { 'content-type' => 'application/json' } ) else http_method, path, params = args method(http_method).call( path, params && params.to_json, { 'content-type' => 'application/json' } ) end end |
#login(*credentials) ⇒ Object
Login with HTTP basic auth.
21 22 23 |
# File 'lib/haveapi/spec/spec_methods.rb', line 21 def login(*credentials) (*credentials) end |
#mock_action(r_name, a_name, params, version: nil, user: nil) {|self| ... } ⇒ Object
Mock action call. Note that this method does not involve rack request/response in any way. It simply creates an instance of specified action and executes it. Provided block is executed in the context of the action instance after ‘exec()` has been called.
If ‘exec()` signals error, the block is not called at all, but RuntimeError is raised instead.
Authentication does not take place. Argument user may be used to provide user object. That will signify that the user is authenticated and it will be passed to Action.authorize.
77 78 79 80 81 82 83 |
# File 'lib/haveapi/spec/spec_methods.rb', line 77 def mock_action(r_name, a_name, params, version: nil, user: nil, &) app v = version || @api.default_version action, path = find_action(v, r_name, a_name) m = MockAction.new(self, @api, action, path, v) m.call(params, user:, &) end |