Module: Intermodal::RSpec::RequestValidations::ClassMethods

Defined in:
lib/intermodal/rspec/requests/request_validations.rb

Instance Method Summary collapse

Instance Method Details

#expect_request_invalid(message, opts = {}, &additional_examples) ⇒ Object

This macro expects the following to be defined: let(:valid_payload) { request_payload that would succeed }

You then pass a override hash and the expected response code, usually a 400 Bad Request or 422 Unprocessible Entity

In overrides, if you pass a callable object such as a lambda or a proc, then it will be called at test time before merging into the request payload.

Example:

overrides: { apple: -> { tree.apples.sample } }



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/intermodal/rspec/requests/request_validations.rb', line 19

def expect_request_invalid(message, opts={}, &additional_examples)
  _status     = opts[:status] || 422
  _overrides  = opts[:overrides] or raise 'Must pass overrides: parameter'

  context "when #{message}" do
    let(:request_payload) { attributes.merge(overrides) }
    let(:overrides)       { Hash[_overrides.map(&eval_hash)] }
    let(:eval_hash)       { ->(x) { [x[0].to_s, maybe_call.(x[1]) ] } }
    let(:maybe_call)      { ->(x) { x.respond_to?(:call) ? x.call : x } }

    expects_status _status
    instance_eval(&additional_examples) if additional_examples
  end
end