Sha256: 89b54e66cd823dff8755258f6d25e9b8933545905a6f5215034583520b463d05

Contents?: true

Size: 1.85 KB

Versions: 4

Compression:

Stored size: 1.85 KB

Contents

describe 'callbacks' do
  before do
    class CallbackDocument
      include Yapper::Document

      field :field_1
      field :field_2

      before_save :do_before_save
      before_save :do_another_before_save
      after_save  :do_after_save
      after_save  :do_another_after_save

      private

      def do_before_save
        $before_save_1 = true
      end

      def do_another_before_save
        $before_save_2 = true
      end

      def do_after_save
        $after_save_1 = true
      end

      def do_another_after_save
        $after_save_2 = true
      end
    end
  end
  before { Yapper::DB.instance.purge }
  after { Object.send(:remove_const, 'CallbackDocument') }

  describe 'creating documents' do
    it 'before and after callbacks are fired' do
      CallbackDocument.create(:field_1 => 'field1',
                              :field_2 => 'field2')

      $before_save_1.should == true
      $before_save_2.should == true
      $after_save_1.should == true
      $after_save_2.should == true
    end
  end

  describe 'updating documents' do
    before do
      @doc = CallbackDocument.create(:field_1 => 'field1')
      $before_save_1 = false
      $before_save_2 = false
      $after_save_1 = false
      $after_save_2 = false
    end

    it 'before and after callbacks are fired' do
      @doc.field_1 = 'field1_updated'
      @doc.save

      $before_save_1.should == true
      $before_save_2.should == true
      $after_save_1.should == true
      $after_save_2.should == true
    end
  end

  describe 'on failure' do
    before do
      class CallbackDocument
        after_save  :fail

        def fail
          raise "fail"
        end
      end
    end

    it 'rollsback the entire update' do
      lambda {
        CallbackDocument.create(:field_1 => 'field1')
      }.should.raise

      CallbackDocument.all.count.should == 0
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
motion-yapper-0.1.0 spec/integration/callback_spec.rb
motion-yapper-0.0.3 spec/integration/callback_spec.rb
motion-yapper-0.0.2 spec/integration/callback_spec.rb
motion-yapper-0.0.1 spec/integration/callback_spec.rb