Sha256: 023d4bc9e3fb8f95dedd0735fdd27d570191204921d0bddfda2793fd2d8c4f89

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

require 'spec_helper'

ActiveRecord::Base.connection.create_table :users, force: true do |t|
  t.text :storage
end

class User < ActiveRecord::Base
  store :storage
  store_field :tutorials
  store_field :delivered, type: Set
end

describe StoreField do
  before do
    @user = User.new
  end

  it 'raises when store is not defined beforehand' do
    expect { Class.new(ActiveRecord::Base) { store :storage; store_field :delivered } }.to_not raise_error(ArgumentError)
    expect { Class.new(ActiveRecord::Base) {                 store_field :delivered } }.to     raise_error(ArgumentError)
  end

  it 'raises when invalid option is given' do
    expect { Class.new(ActiveRecord::Base) { store :storage; store_field :delivered, type: File } }.to raise_error(ArgumentError)
    expect { Class.new(ActiveRecord::Base) { store :storage; store_field :delivered, in: :bogus } }.to raise_error(ArgumentError)
  end

  it 'initializes with the specified type' do
    @user.tutorials.should == {}
    @user.delivered.should == Set.new
  end

  it 'sets and unsets keywords' do
    @user.set_delivered(:welcome)
    @user.set_delivered(:first_deposit)

    # Consume balance, notify once and only once
    @user.set_delivered(:balance_low)
    @user.set_delivered(:balance_negative)

    # Another deposit, restore balance
    @user.unset_delivered(:balance_low)
    @user.unset_delivered(:balance_negative)

    @user.delivered.should == Set.new([:welcome, :first_deposit])
  end

  it 'saves in-line' do
    @user.set_delivered(:welcome).save.should == true
    @user.reload
    @user.set_delivered?(:welcome).should == true
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
store_field-1.0.0 spec/store_field_spec.rb