Sha256: 35f2f93a6fa805e7bfa0b593b4f2e4cd78b825660c29e92b577899bad9ef150c

Contents?: true

Size: 1.65 KB

Versions: 9

Compression:

Stored size: 1.65 KB

Contents

# frozen_string_literal: true

require "rails_helper"

RSpec.describe "ActiveRecord::Base models", type: :model do
  DEFAULT_SPECS_TO_RUN = [
    :is_an_active_record,
    :is_instanciable,
    :valid_with_correct_attributes,
    :not_valid_with_empty_attributes,
    :saves_with_valid_attributes
  ]

  {
    Cmor::Seo::Item    => {},
    Cmor::Seo::MetaTag => {},
  }.each do |model, options|
    options.reverse_merge!(specs_to_run: DEFAULT_SPECS_TO_RUN, specs_to_skip: [])
    specs_to_run = options.delete(:specs_to_run)
    specs_to_skip = options.delete(:specs_to_skip)
    specs = specs_to_run - specs_to_skip

    describe model do
      it "is an ActiveRecord::Base" do
        expect(ActiveRecord::Base.descendants).to include(model)
      end if specs.include?(:is_an_active_record)

      it "is instanciable" do
        instance = model.new
        expect(instance).to be_a(model)
      end if specs.include?(:is_instanciable)

      it "is valid with correct attribute values" do
        instance = build(model.to_s.tableize.singularize.underscore.tr("/", "_"))

        instance.valid?
        expect(instance.errors.full_messages).to eq([])
      end if specs.include?(:valid_with_correct_attributes)

      it "is not valid with empty attributes" do
        instance = model.new
        expect(instance).not_to be_valid
      end if specs.include?(:not_valid_with_empty_attributes)

      it "saves with valid attributes" do
        instance = build(model.to_s.tableize.singularize.underscore.tr("/", "_"))
        expect(instance.save).to be_truthy
        expect(instance).to be_persisted
      end if specs.include?(:saves_with_valid_attributes)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
cmor_seo-0.0.51.pre spec/models/generic_spec.rb
cmor_seo-0.0.50.pre spec/models/generic_spec.rb
cmor_seo-0.0.49.pre spec/models/generic_spec.rb
cmor_seo-0.0.48.pre spec/models/generic_spec.rb
cmor_seo-0.0.45.pre spec/models/generic_spec.rb
cmor_seo-0.0.44.pre spec/models/generic_spec.rb
cmor_seo-0.0.43.pre spec/models/generic_spec.rb
cmor_seo-0.0.42.pre spec/models/generic_spec.rb
cmor_seo-0.0.41.pre spec/models/generic_spec.rb