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