Sha256: 477276b749e0e8095b1bfe484bda0ddd995f102bbbf12bf4c39c6931a91343ad
Contents?: true
Size: 1.89 KB
Versions: 2
Compression:
Stored size: 1.89 KB
Contents
# encoding: utf-8 require 'spec_helper' describe Mapping, '.build' do let(:header) { [[:id, Integer], [:user_name, String], [:age, Integer], [:email, String]] } let(:relation) { Axiom::Relation::Base.new(:users, header) } let(:model) { mock_model(:id, :name, :email) } let(:env) { Environment.setup(test: 'memory://test') } let(:schema) { Hash[users: relation] } context 'when attribute mapping is used' do subject { env } let(:mapper) { subject[:users].mapper } before do user_model = model Mapping.build(env, schema) do users do model user_model map :id, :email map :user_name, to: :name end end end it 'registers rom relation' do expect(subject[:users]).to be_instance_of(Relation) end it 'builds rom mapper' do expect(mapper.header.map(&:name)).to eql([:id, :email, :name]) # TODO: introduce new interface in rom-mapper to make this simpler expect(mapper.header.map { |a| a.field.type }).to eql([ Axiom::Types::Integer, Axiom::Types::String, Axiom::Types::String ]) end it 'sets up the model' do object = mapper.new_object(id: 1, name: 'Jane', email: 'jane@rom.org') expect(object).to be_instance_of(model) end end context 'when custom mapper is injected' do subject { env } let(:test_mapper) { TestMapper.new(header, model) } before do custom_mapper = test_mapper Mapping.build(env, schema) { users { mapper(custom_mapper) } } end it 'sets the custom mapper' do expect(subject[:users].mapper).to be(test_mapper) end end context 'when unknown relation name is used' do subject { described_class.build(env, schema) { not_here(1, 'a') {} } } it 'raises error' do expect { subject }.to raise_error( NoMethodError, /undefined method `not_here'/ ) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rom-relation-0.1.2 | spec/unit/rom/mapping/class_methods/build_spec.rb |
rom-relation-0.1.1 | spec/unit/rom/mapping/class_methods/build_spec.rb |