require_relative './spec_helper' describe Groovy::Model do CONTEXT_NAME = 'schema_spec' before :all do Groovy.open('tmp/' + CONTEXT_NAME, CONTEXT_NAME) load_test_schema! end after :all do Groovy.close(CONTEXT_NAME) end def load_test_schema! klass = Class.new Object.const_set("Product", klass) Product.class_eval do include Groovy::Model schema(type: 'hash', context: CONTEXT_NAME) do |t| t.string :name t.many :categories t.timestamps end end klass = Class.new Object.const_set("Category", klass) Category.class_eval do include Groovy::Model schema(context: CONTEXT_NAME) do |t| t.many :products, "Products" t.string :name t.timestamps end end end describe 'hash table' do it 'creates, updates and finds records as expected' do product = Product.new('ipod-mini', name: 'iPod Mini') expect(product.new_record?).to eq(true) expect(product.name).to eq('iPod Mini') expect(product.save).to eq(true) expect(product.persisted?).to eq(true) expect(product.key).to eq('ipod-mini') expect(product.update_attributes(name: 'iPod Mini 2nd Generation')) expect(product.name).to eq('iPod Mini 2nd Generation') expect(Product.find('ipod-mini')).to eq(product) end it 'works with references too' do product = Product.new('ipod-mini', name: 'iPod Mini') expect(product.save).to eq(true) category = Category.new(name: 'iPods') expect(category.save).to eq(true) category.products << product product.categories << category expect(product.reload.categories).to eq([category]) end end end