Module: Cuprum::Rails::RSpec::Contracts::Actions::EditContracts::ShouldBeAnEditActionContract

Extended by:
RSpec::SleepingKingStudios::Contract
Defined in:
lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb

Overview

Contract asserting the action implements the edit action interface.

Instance Method Summary collapse

Instance Method Details

#apply(example_group, existing_entity: , **options) { ... } ⇒ Object

Adds the contract to the example group.

Parameters:

  • example_group (RSpec::Core::ExampleGroup)

    The example group to which the contract is applied.

  • existing_entity (Object) (defaults to: )

    The existing entity to find.

Options Hash (**options):

  • examples_on_failure (#to_proc)

    Extra examples to run for the failing cases.

  • examples_on_success (#to_proc)

    Extra examples to run for the passing case.

  • expected_value_on_success (Hash<String>)

    The expected value for the passing result. Defaults to a Hash with the found entity.

  • params (Hash<String>)

    The parameters used to build the request. Defaults to the id of the entity.

  • primary_key_value (Object)

    The value of the primary key for the missing entity.

Yields:

  • Additional examples to run for the passing case.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb', line 37

contract do |existing_entity:, **options, &block|
  include Cuprum::Rails::RSpec::Contracts::ActionContracts

  # :nocov:
  if options[:examples_on_success] && block
    raise ArgumentError, 'provide either :examples_on_success or a block'
  elsif block
    options[:examples_on_success] = block
  end
  # :nocov:

  include_contract 'should be a resource action'

  include_contract(
    'should require primary key',
    params: options[:params],
    &options[:examples_on_failure]
  )

  include_contract(
    'should require existing entity',
    params:            options[:params],
    primary_key_value: options[:primary_key_value],
    &options[:examples_on_failure]
  )

  include_contract(
    'should find the entity',
    existing_entity: existing_entity,
    expected_value:  options[:expected_value_on_success],
    params:          options[:params],
    &options[:examples_on_success]
  )
end