Sha256: 9e5b5ee013a966b824037a7fa62301f434aaa56f5628a6b8f03ed9b9c5cebc83

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 KB

Contents

# Use: it { should accept_nested_attributes_for(:association_name).and_accept({valid_values => true})
#                                                                 .but_reject({ :reject_if_nil => nil })}
RSpec::Matchers.define :accept_nested_attributes_for do |association|
  match do |model|
    @model = model
    @nested_att_present = model.respond_to?("#{association}_attributes=".to_sym)
    if @nested_att_present && @reject
      model.send("#{association}_attributes=".to_sym, [@reject])
      @reject_success = model.send("#{association}").empty?
    end
    if @nested_att_present && @accept
      model.send("#{association}_attributes=".to_sym, [@accept])
      @accept_success = ! (model.send("#{association}").empty?)
    end
    @nested_att_present && (@reject.nil? || @reject_success) && (@accept.nil? || @accept_success)
  end

  failure_message_for_should do
    messages = []
    messages << "expected #{@model.class} to accept nested attributes for #{association}" unless @nested_att_present
    unless @reject_success
      messages << "expected #{@model.class} to reject values #{@reject.inspect} for association #{association}"
    end
    unless @reject_success
      messages << "expected #{@model.class} to accept values #{@accept.inspect} for association #{association}"
    end
    messages.join(', ')
  end

  description do
    desc = "accept nested attributes for #{expected}"
    desc << ", but reject if attributes are #{@reject.inspect}" if @reject
  end

  chain :but_reject do |reject|
    @reject = reject
  end

  chain :and_accept do |accept|
    @accept = accept
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
gaku-0.2.4 frontend/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.3 frontend/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.2 frontend/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.1 frontend/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb
gaku-0.2.0 frontend/spec/support/models/matchers/accept_nested_attributes_for_matcher.rb