Sha256: 5b1be474c3fea7d5bd16edfc3cf9d544982ab810c09e869b871066dfd79cc798

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module RSpec::Rails::Matchers
  class BeValid < RSpec::Matchers::BuiltIn::Be
    def initialize(*args)
      @args = args
    end

    # @api private
    def matches?(actual)
      @actual = actual
      actual.valid?(*@args)
    end

    # @api private
    def failure_message
      message = "expected #{actual.inspect} to be valid"

      if actual.respond_to?(:errors)
        errors = if actual.errors.respond_to?(:full_messages)
          actual.errors.full_messages
        else
          actual.errors
        end

        message << ", but got errors: #{errors.map(&:to_s).join(', ')}"
      end

      message
    end

    # @api private
    def failure_message_when_negated
      "expected #{actual.inspect} not to be valid"
    end
  end

  # Passes if the given model instance's `valid?` method is true, meaning all
  # of the `ActiveModel::Validations` passed and no errors exist. If a message
  # is not given, a default message is shown listing each error.
  #
  # @example
  #
  #     thing = Thing.new
  #     expect(thing).to be_valid
  def be_valid(*args)
    BeValid.new(*args)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rspec-rails-3.0.0.rc1 lib/rspec/rails/matchers/be_valid.rb
rspec-rails-3.0.0.beta2 lib/rspec/rails/matchers/be_valid.rb