Sha256: bb10597863c0e305cd76948b523e51ee54fec5739bad81b59bf4f472f94929ba

Contents?: true

Size: 1.52 KB

Versions: 18

Compression:

Stored size: 1.52 KB

Contents

require 'rom/schema'

RSpec.describe ROM::Schema, '#finalize!' do
  context 'without inferrer' do
    subject(:schema) do
      define_schema(:users, id: :Int, name: :String)
    end

    before { schema.finalize! }

    it 'returns a frozen canonical schema' do
      expect(schema).to be_frozen
    end
  end

  context 'with inferrer' do
    subject(:schema) do
      ROM::Schema.define(:users, attributes: attributes, inferrer: inferrer)
    end

    let(:inferrer) do
      proc { [[define_type(:name, :String)], [:id, :age]]}
    end

    context 'when all required attributes are present' do
      let(:attributes) do
        [define_type(:id, :Int), define_type(:age, :Int)]
      end

      it 'concats defined attributes with inferred attributes' do
        expect(schema.finalize!.map(&:name)).to eql(%i[id age name])
      end
    end

    context 'when inferred attributes are overridden' do
      let(:attributes) do
        [define_type(:id, :Int),
         define_type(:age, :Int),
         define_type(:name, :String).meta(custom: true)]
      end

      it 'respects overridden attributes' do
        expect(schema.finalize!.map(&:name)).to eql(%i[id age name])
        expect(schema[:name].meta[:custom]).to be(true)
      end
    end

    context 'when some attributes are missing' do
      let(:attributes) do
        []
      end

      it 'raises error' do
        expect { schema.finalize! }.
          to raise_error(ROM::Schema::MissingAttributesError, /missing attributes in :users schema: :id, :age/)
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
rom-3.3.3 spec/unit/rom/schema/finalize_spec.rb
rom-3.3.2 spec/unit/rom/schema/finalize_spec.rb
rom-3.3.1 spec/unit/rom/schema/finalize_spec.rb
rom-3.3.0 spec/unit/rom/schema/finalize_spec.rb
rom-3.2.3 spec/unit/rom/schema/finalize_spec.rb
rom-3.2.2 spec/unit/rom/schema/finalize_spec.rb
rom-3.2.1 spec/unit/rom/schema/finalize_spec.rb
rom-3.2.0 spec/unit/rom/schema/finalize_spec.rb
rom-3.1.0 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.3 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.2 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.1 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0.rc2 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0.rc1 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0.beta3 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0.beta2 spec/unit/rom/schema/finalize_spec.rb
rom-3.0.0.beta1 spec/unit/rom/schema/finalize_spec.rb