spec/unit/rom/relation/view_spec.rb in rom-3.0.0 vs spec/unit/rom/relation/view_spec.rb in rom-3.0.1

- old
+ new

@@ -2,10 +2,22 @@ require 'rom/memory' RSpec.describe ROM::Relation, '.view' do subject(:relation) { relation_class.new(ROM::Memory::Dataset.new([])) } + let(:registry) do + { tasks: tasks } + end + + let(:tasks) do + Class.new(ROM::Relation[:memory]) do + schema do + attribute :title, ROM::Types::String + end + end.new([]) + end + it 'returns view method name' do klass = Class.new(ROM::Relation[:memory]) { schema { attribute :id, ROM::Types::Int } } @@ -18,10 +30,14 @@ before do relation << { id: 1, name: 'Joe' } relation << { id: 2, name: 'Jane' } end + it 'appends foreign attributes' do + expect(relation.schemas[:foreign_attributes].map(&:name)).to eql(%i[id name title]) + end + it 'uses projected schema for view schema' do expect(relation.schemas[:names].map(&:name)).to eql(%i[name]) end it 'auto-projects the relation via schema' do @@ -42,21 +58,31 @@ end context 'with an explicit schema' do before do # this is normally called automatically during setup - relation_class.finalize({}, relation) + relation_class.finalize(registry, relation) end include_context 'relation with views' do let(:relation_class) do Class.new(ROM::Memory::Relation) do schema(:users) do attribute :id, ROM::Types::Int attribute :name, ROM::Types::String end + view(:foreign_attributes) do + schema do + append(relations[:tasks][:title]) + end + + relation do + self + end + end + view(:names) do schema do project(:name) end @@ -81,11 +107,11 @@ context 'with an inferred schema' do before do # this is normally called automatically during setup relation_class.schema.finalize! - relation_class.finalize({}, relation) + relation_class.finalize(registry, relation) end include_context 'relation with views' do let(:relation_class) do Class.new(ROM::Memory::Relation) do @@ -93,9 +119,19 @@ [[ROM::Types::Int.meta(name: :id, source: :users), ROM::Types::String.meta(name: :name, source: :users)], []] } schema(:users, infer: true) + + view(:foreign_attributes) do + schema do + append(relations[:tasks][:title]) + end + + relation do + self + end + end view(:names) do schema do project(:name) end