module ActiveModel::Lint::Tests

def assert_boolean(result, name)

def assert_boolean(result, name)
  assert result == true || result == false, "#{name} should be a boolean"
end

def model

def model
  assert @model.respond_to?(:to_model), "The object should respond to to_model"
  @model.to_model
end

def test_errors_aref

locale. If no error is present, the method should return an empty array.
If localization is used, the strings should be localized for the current
an array of strings that are the errors for the attribute in question.
for a given attribute. If errors are present, the method should return
errors[attribute] is used to retrieve the errors of a model

Fails otherwise.
[](attribute) on the result of this method returns an array.
Passes if the object's model responds to errors and if calling
def test_errors_aref
  assert model.respond_to?(:errors), "The model should respond to errors"
  assert model.errors[:hello].is_a?(Array), "errors#[] should return an Array"
end

def test_model_naming

Check ActiveModel::Naming for more information.

:singular and :plural.
returns a string with some convenience methods: :human,
an instance method and as a class method, and if calling this method
Passes if the object's model responds to model_name both as
def test_model_naming
  assert model.class.respond_to?(:model_name), "The model class should respond to model_name"
  model_name = model.class.model_name
  assert model_name.respond_to?(:to_str)
  assert model_name.human.respond_to?(:to_str)
  assert model_name.singular.respond_to?(:to_str)
  assert model_name.plural.respond_to?(:to_str)
  assert model.respond_to?(:model_name), "The model instance should respond to model_name"
  assert_equal model.model_name, model.class.model_name
end

def test_persisted?

object will route to the update action.
will route to the create action. If it is persisted, a form for the
If the object is not persisted, a form for that object, for instance,
persisted? is used when calculating the URL for an object.

calling this method returns either +true+ or +false+. Fails otherwise.
Passes if the object's model responds to persisted? and if
def test_persisted?
  assert model.respond_to?(:persisted?), "The model should respond to persisted?"
  assert_boolean model.persisted?, "persisted?"
end

def test_to_key

of the model, and is used to a generate unique DOM id for the object.
to_key returns an Enumerable of all (primary) key attributes

Fails otherwise.
this method returns +nil+ when the object is not persisted.
Passes if the object's model responds to to_key and if calling
def test_to_key
  assert model.respond_to?(:to_key), "The model should respond to to_key"
  def model.persisted?() false end
  assert model.to_key.nil?, "to_key should return nil when `persisted?` returns false"
end

def test_to_param

any of the possible implementation strategies on the implementer.
tests for this behavior in lint because it doesn't make sense to force
default in case the record uses a composite primary key. There are no
Implementers can decide to either raise an exception or provide a
to_param is used to represent the object's key in URLs.

Fails otherwise.
calling this method returns +nil+ when the object is not persisted.
Passes if the object's model responds to to_param and if
def test_to_param
  assert model.respond_to?(:to_param), "The model should respond to to_param"
  def model.to_key() [1] end
  def model.persisted?() false end
  assert model.to_param.nil?, "to_param should return nil when `persisted?` returns false"
end

def test_to_partial_path

a BlogPost model might return "blog_posts/blog_post".
to_partial_path is used for looking up partials. For example,

calling this method returns a string. Fails otherwise.
Passes if the object's model responds to to_partial_path and if
def test_to_partial_path
  assert model.respond_to?(:to_partial_path), "The model should respond to to_partial_path"
  assert_kind_of String, model.to_partial_path
end