Sha256: 4c7f32580929f0e7261e2ce92f58ec62f32ebe902b64bcdfce2d44f5f01cf016

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

require 'spec_helper'

class TestAgg
  include Eventus::AggregateRoot

  attr_accessor :loaded

  def bake_cake
    apply_change :cake_baked, :flavor => 'strawberry'
  end

  apply :dino do |e|
    @loaded = true
  end
end

describe Eventus::AggregateRoot do
  let(:events) { [] }
  let(:persistence) { stub.as_null_object }

  before do
    TestAgg.stub(:persistence).and_return(persistence)
  end

  it "should load a new aggregate from find" do
    result = TestAgg.find('abc')
    result.should_not be_nil
  end

  describe "when events exist" do
    before do
      persistence.should_receive(:load).with('abc').and_return(events)
      events << {:name => 'dino', :body => {}}
    end

    it "should apply the event" do
      result = TestAgg.find('abc')
      result.loaded.should == true
    end
  end

  describe "when applying a new change" do
    let(:aggregate) { TestAgg.new }
    let(:stream) { stub(:stream, :committed_events => []) }

    before do
      aggregate.populate(stream)
    end

    it "should be added to the stream" do
      stream.should_receive(:add)
      aggregate.bake_cake
    end
  end

  describe "when saving" do
    let(:aggregate) { TestAgg.new }
    let(:stream) { stub(:stream, :committed_events => []) }

    before do
      aggregate.populate(stream)
    end

    it "should commit stream" do
      stream.should_receive(:commit)
      aggregate.save
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eventus-0.3.0 spec/aggregate_root_spec.rb
eventus-0.2.0 spec/aggregate_root_spec.rb