test: add orm store, model, and relation tests
This commit is contained in:
1 parent
d321e2fd1e
commit
703f6cd845
3 files changed
+279
No files matched your search
@@ -0,0 +1,56 @@
|
||||
require 'minitest/autorun'
|
||||
require 'prism'
|
||||
require 'tmpdir'
|
||||
|
||||
class OrmRelationTest < Minitest::Test
|
||||
def setup
|
||||
@dir = Dir.mktmpdir('prism-relation-store')
|
||||
@store = Prism::Orm::Store.new(File.join(@dir, 'test.pstore'))
|
||||
@store.create_table(:items, %w[id name category])
|
||||
item_class = Class.new(Prism::Orm::Model) do
|
||||
table_name :items
|
||||
end
|
||||
item_class.store = @store
|
||||
Object.const_set(:Item, item_class)
|
||||
end
|
||||
|
||||
def teardown
|
||||
FileUtils.remove_entry(@dir)
|
||||
Object.send(:remove_const, :Item) if Object.const_defined?(:Item)
|
||||
end
|
||||
|
||||
def test_offset_skips_leading_rows
|
||||
%w[a b c d].each { |name| Item.create!(name: name) }
|
||||
names = Item.order(:name).offset(2).map(&:name)
|
||||
assert_equal %w[c d], names
|
||||
end
|
||||
|
||||
def test_offset_combined_with_limit_paginates
|
||||
%w[a b c d e].each { |name| Item.create!(name: name) }
|
||||
page_two = Item.order(:name).offset(2).limit(2).map(&:name)
|
||||
assert_equal %w[c d], page_two
|
||||
end
|
||||
|
||||
def test_chained_where_calls_combine_with_and_semantics
|
||||
Item.create!(name: 'match', category: 'tools')
|
||||
Item.create!(name: 'match', category: 'other')
|
||||
Item.create!(name: 'nope', category: 'tools')
|
||||
|
||||
result = Item.where(name: 'match').where(category: 'tools').to_a
|
||||
assert_equal 1, result.size
|
||||
assert_equal 'match', result.first.name
|
||||
end
|
||||
|
||||
def test_relation_is_enumerable
|
||||
Item.create!(name: 'b')
|
||||
Item.create!(name: 'a')
|
||||
assert_equal %w[a b], Item.order(:name).sort_by(&:name).map(&:name)
|
||||
assert_equal 2, Item.all.count
|
||||
end
|
||||
|
||||
def test_exists_predicate
|
||||
refute Item.where(name: 'ghost').exists?
|
||||
Item.create!(name: 'ghost')
|
||||
assert Item.where(name: 'ghost').exists?
|
||||
end
|
||||
end
|
||||
Reference in new issue
Block a user