spec/mongomodel/concerns/activemodel_spec.rb in mongomodel-0.4.3 vs spec/mongomodel/concerns/activemodel_spec.rb in mongomodel-0.4.4

- old
+ new

@@ -1,106 +1,25 @@ require 'spec_helper' -# Specs ported from ActiveModel::Lint::Tests -# -# These tests do not attempt to determine the semantic correctness of the -# returned values. For instance, you could implement valid? to always -# return true, and the tests would pass. It is up to you to ensure that -# the values are semantically meaningful. -# -# Objects you pass in are expected to return a compliant object from a -# call to to_model. It is perfectly fine for to_model to return self. module MongoModel - specs_for(Document, EmbeddedDocument) do - define_class(:TestModel, described_class) + shared_examples_for "ActiveModel" do + require 'test/unit/assertions' + include Test::Unit::Assertions - subject { TestModel.new.to_model } + include ActiveModel::Lint::Tests - # == Responds to <tt>to_key</tt> - # - # Returns an Enumerable of all (primary) key attributes - # or nil if model.persisted? is false - it { should respond_to(:to_key) } - - specify "to_key should return nil if subject.persisted? is false" do - subject.stub!(:persisted?).and_return(false) - subject.to_key.should be_nil - end - - # == Responds to <tt>to_param</tt> - # - # Returns a string representing the object's key suitable for use in URLs - # or nil if model.persisted? is false. - # - # Implementers can decide to either raise an exception or provide a default - # in case the record uses a composite primary key. There are no tests for this - # behavior in lint because it doesn't make sense to force any of the possible - # implementation strategies on the implementer. However, if the resource is - # not persisted?, then to_param should always return nil. - it { should respond_to(:to_param) } - - specify "to_param should return nil if subject.persisted? is false" do - subject.stub!(:to_key).and_return([1]) - subject.stub!(:persisted?).and_return(false) - subject.to_param.should be_nil - end - - # == Responds to <tt>valid?</tt> - # - # Returns a boolean that specifies whether the object is in a valid or invalid - # state. - it { should respond_to_boolean(:valid?) } - - # == Responds to <tt>persisted?</tt> - # - # Returns a boolean that specifies whether the object has been persisted yet. - # This is used when calculating the URL for an object. If the object is - # not persisted, a form for that object, for instance, will be POSTed to the - # collection. If it is persisted, a form for the object will put PUTed to the - # URL for the object. - it { should respond_to_boolean(:persisted?) } - - # == Naming - # - # Model.model_name must returns a string with some convenience methods as - # :human and :partial_path. Check ActiveModel::Naming for more information. - # - specify "the model class should respond to model_name" do - subject.class.should respond_to(:model_name) - end - - it "should return strings for model_name" do - model_name = subject.class.model_name - model_name.should be_a_kind_of(String) - model_name.human.should be_a_kind_of(String) - model_name.partial_path.should be_a_kind_of(String) - model_name.singular.should be_a_kind_of(String) - model_name.plural.should be_a_kind_of(String) - end - - # == Errors Testing - # - # Returns an object that has :[] and :full_messages defined on it. See below - # for more details. - describe "errors" do - it { should respond_to(:errors) } - - # Returns an Array of Strings that are the errors for the attribute in - # question. If localization is used, the Strings should be localized - # for the current locale. If no error is present, this method should - # return an empty Array. - describe "#[]" do - it "should return an Array" do - subject.errors[:hello].should be_an(Array) - end + ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m| + example m.gsub('_',' ') do + send m end - - # Returns an Array of all error messages for the object. Each message - # should contain information about the field, if applicable. - describe "#full_messages" do - it "should return an Array" do - subject.errors.full_messages.should be_an(Array) - end - end end + + let(:model) { subject } + end + + specs_for(Document, EmbeddedDocument) do + define_class(:TestModel, described_class) + subject { TestModel.new } + + it_should_behave_like "ActiveModel" end end