Sha256: 7c7d3a21cefe1553d82db0094350a81aef243639e64e2bd464ca6670827a16bb

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

require 'rom'
require 'rom/memory'
require 'rom/plugins/relation/view'

RSpec.describe ROM::Plugins::Relation::View do
  subject(:relation) { relation_class.new([]) }

  let(:relation_class) do
    Class.new(ROM::Memory::Relation) do
      use :view

      view(:base, [:id, :name]) do
        self
      end

      view(:ids, [:id]) do
        self
      end

      view(:names, [:name]) do |id|
        self
      end
    end
  end

  describe '#attributes' do
    it 'returns base view attributes by default' do
      expect(relation.attributes).to eql([:id, :name])
    end

    it 'returns attributes for a view' do
      expect(relation.ids.attributes).to eql([:id])
    end

    it 'returns attributes for a view with args' do
      expect(relation.names(1).attributes).to eql([:name])
    end

    it 'returns attributes for a curried view' do
      expect(relation.names.attributes).to eql([:name])
    end

    it 'returns correct arity for a curried view' do
      expect(relation.names.arity).to be(1)
    end

    it 'returns explicitly set attributes' do
      expect(relation.with(attributes: [:foo, :bar]).attributes).to eql([:foo, :bar])
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rom-2.0.2 spec/unit/rom/plugins/relation/view_spec.rb
rom-2.0.1 spec/unit/rom/plugins/relation/view_spec.rb
rom-2.0.0 spec/unit/rom/plugins/relation/view_spec.rb