Sha256: d393729a2e5937c7dc55b366705989512a0bc9fe555613117fbb78550851b948

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
groovy-0.7.1 spec/schema_spec.rb
groovy-0.7.0 spec/schema_spec.rb