module MiniTest::ActiveRecordAssertions

Public Instance Methods

assert_association(clazz, association, associate, options={}) click to toggle source
# File lib/minitest_activerecord_assertions.rb, line 5
def assert_association(clazz, association, associate, options={})
  reflected_assoc = clazz.reflect_on_association(associate)
  flunk "#{clazz} has no association with #{associate}" if reflected_assoc.nil?
  assert_equal association, reflected_assoc.macro
  options.each do |key, value|
    assert_equal value, reflected_assoc.options[key]
  end
end
assert_validates_inclusion_of(clazz, attribute, options = {}) click to toggle source
# File lib/minitest_activerecord_assertions.rb, line 47
def assert_validates_inclusion_of(clazz, attribute, options = {})
  validators = clazz._validators[attribute]
  refute validators.empty?, "#{clazz} does not have validations for #{attribute}"
  inclusion_validator = ::ActiveModel::Validations::InclusionValidator
  validator_classes = validators.map { |v| v.class }
  
  if options.size > 0
    index = validators.index {|c| c if c.class == ActiveModel::Validations::InclusionValidator }
    validator = validators[index]
    assert validator_classes.include?(inclusion_validator) && validator.options == options,
      "#{clazz} does not validate_inclusion_of #{attribute} with options #{options}"

  else
    assert validator_classes.include?(inclusion_validator), 
    "#{clazz} does not validate_inclusion_of #{attribute}"
  end
end
assert_validates_numericality_of(clazz, attribute, options = {}) click to toggle source
# File lib/minitest_activerecord_assertions.rb, line 41
def assert_validates_numericality_of(clazz, attribute, options = {})
  assert_includes clazz._validators[attribute].map{ |v| v.class }, 
    ::ActiveModel::Validations::NumericalityValidator,
      "#{clazz} does not validate_numericality_of #{attribute}" 
end
assert_validates_presence_of(clazz, attribute) click to toggle source
# File lib/minitest_activerecord_assertions.rb, line 14
def assert_validates_presence_of(clazz, attribute)
  validators = clazz._validators[attribute]
  refute validators.empty?, "#{clazz} does not have validations for #{attribute}"
  presence_validator = ::ActiveModel::Validations::PresenceValidator
  validator_classes = validators.map { |v| v.class }
  assert validator_classes.include?(presence_validator), 
    "#{clazz} does not validate_presence_of #{attribute}"
end
assert_validates_uniqueness_of(clazz, *attributes) click to toggle source
# File lib/minitest_activerecord_assertions.rb, line 23
def assert_validates_uniqueness_of(clazz, *attributes) 
  has_validator = false
  attributes.each do |attribute|
    validators = clazz._validators[attribute]
    if validators.empty? 
      flunk "No validations for #{attribute}"    
    else
      validators.each do |validator|
        if validator.class == ::ActiveRecord::Validations::UniquenessValidator
          has_validator = (attributes.sort! == validator.attributes.sort!)
          break
        end
      end
    end
  end
  assert has_validator, "#{clazz} does not validate_uniqueness_of #{attributes}"
end