spec/ventable/ventable_spec.rb in ventable-1.0.0 vs spec/ventable/ventable_spec.rb in ventable-1.2.0
- old
+ new
@@ -1,6 +1,6 @@
-require 'ventable'
+require 'spec_helper'
describe Ventable do
before do
class TestEvent
include Ventable::Event
@@ -24,45 +24,45 @@
Ventable.enable
expect(Ventable.enabled?).to be true
end
end
- describe "including Ventable::Event" do
- it "should create a class instance variable to keep observers" do
+ describe 'including Ventable::Event' do
+ it 'should create a class instance variable to keep observers' do
expect(TestEvent.observers).not_to be_nil
- expect(TestEvent.observers.class.name).to eq("Set")
+ expect(TestEvent.observers.class.name).to eq('Set')
end
- it "should see observers variable from instance methods" do
+ it 'should see observers variable from instance methods' do
observers = nil
TestEvent.new.instance_eval do
observers = self.class.observers
end
expect(observers).to_not be_nil
end
- it "should maintain separate sets of observers for each event" do
+ it 'should maintain separate sets of observers for each event' do
class AnotherEvent
include Ventable::Event
end
expect(AnotherEvent.observers.object_id).to_not eq(TestEvent.observers.object_id)
end
end
- describe "#fire" do
+ describe '#fire' do
before do
class TestEvent
include Ventable::Event
end
end
- it "should properly call a Proc observer" do
+ it 'should properly call a Proc observer' do
run_block = false
- event = nil
+ event = nil
TestEvent.notifies do |e|
run_block = true
- event = e
+ event = e
end
expect(run_block).to eq(false)
expect(event).to be_nil
# fire the event
@@ -70,37 +70,73 @@
expect(run_block).to be true
expect(event).not_to be_nil
end
- it "should properly call a class observer" do
- class TestEvent
- class << self
- attr_accessor :flag
+ describe 'class observer' do
+ before do
+ class TestEvent
+ class << self
+ attr_accessor :flag
+ end
+
+ self.flag = 'unset'
+
+ def flag=(value)
+ self.class.flag = value
+ end
end
- self.flag = "unset"
- def flag= value
- self.class.flag = value
+
+ class TestEventObserver
+ def self.handle_test(event)
+ event.flag = 'boo'
+ end
end
- end
- class TestEventObserver
- def self.handle_test event
- event.flag = "boo"
+ class GlobalObserver
+ class << self
+ def handle_event(event)
+ puts event.inspect
+ end
+ end
end
+
+ TestEvent.notifies TestEventObserver, GlobalObserver
end
- TestEvent.notifies TestEventObserver
- expect(TestEvent.flag).to eq("unset")
- TestEvent.new.fire!
- expect(TestEvent.flag).to eq("boo")
+ let(:event) { TestEvent.new }
+
+ before do
+ expect(TestEvent.flag).to eq('unset')
+ expect(GlobalObserver).to receive(:handle_event).with(event)
+ end
+
+ it 'should set the flag and call observers' do
+ event.fire!
+ expect(TestEvent.flag).to eq('boo')
+ end
+
+ it 'should also fire via the publish alias' do
+ event.publish
+ end
+
+ context 'observer without a handler' do
+ before {
+ class ObserverWithoutAHandler
+ end
+ TestEvent.notifies ObserverWithoutAHandler
+ }
+ it 'should raise an exception' do
+ expect { event.publish }.to raise_error(Ventable::Error)
+ end
+ end
end
- it "should properly call a group of observers" do
- transaction_called = false
+ it 'should properly call a group of observers' do
+ transaction_called = false
transaction_completed = false
- transaction = ->(observer_block) {
+ transaction = ->(observer_block) {
transaction_called = true
observer_block.call
transaction_completed = true
}
@@ -108,26 +144,26 @@
observer_block_called = false
# this flag ensures that this block really runs inside
# the transaction group block
transaction_already_completed = false
- event_inside = nil
+ event_inside = nil
TestEvent.notifies inside: :transaction do |event|
- observer_block_called = true
+ observer_block_called = true
transaction_already_completed = transaction_completed
- event_inside = event
+ event_inside = event
end
expect(transaction_called).to be false
expect(transaction_already_completed).to be false
expect(observer_block_called).to be false
TestEvent.new.fire!
- expect(transaction_called).to be true
- expect(observer_block_called).to be true
- expect(transaction_called).to be true
+ expect(transaction_called).to be true
+ expect(observer_block_called).to be true
+ expect(transaction_called).to be true
expect(transaction_already_completed).to be false
expect(event_inside).to_not be_nil
expect(event_inside).to be_a(TestEvent)
end
@@ -146,11 +182,11 @@
expect(observers_notified).to be false
end
end
end
- describe "#default_callback_method" do
+ describe '#default_callback_method' do
before do
class SomeAwesomeEvent
include Ventable::Event
end
@@ -161,44 +197,45 @@
end
class SomeOtherStuffHappened
include Ventable::Event
end
+
class ClassWithCustomCallbackMethodEvent
include Ventable::Event
def self.ventable_callback_method_name
:handle_my_special_event
end
end
end
- it "should properly set the callback method name" do
- expect(SomeAwesomeEvent.default_callback_method).to eq(:handle_some_awesome)
- expect(Blah::AnotherSweetEvent.default_callback_method).to eq(:handle_blah__another_sweet)
- expect(SomeOtherStuffHappened.default_callback_method).to eq(:handle_some_other_stuff_happened)
- expect(ClassWithCustomCallbackMethodEvent.default_callback_method).to eq(:handle_my_special_event)
+ it 'should properly set the callback method name' do
+ expect(SomeAwesomeEvent.send(:default_callback_method)).to eq(:handle_some_awesome)
+ expect(Blah::AnotherSweetEvent.send(:default_callback_method)).to eq(:handle_blah__another_sweet)
+ expect(SomeOtherStuffHappened.send(:default_callback_method)).to eq(:handle_some_other_stuff_happened)
+ expect(ClassWithCustomCallbackMethodEvent.send(:default_callback_method)).to eq(:handle_my_special_event)
end
end
- describe "#configure" do
- it "properly configures the event with observers" do
+ describe '#configure' do
+ it 'properly configures the event with observers' do
notified_observer = false
TestEvent.configure do
notifies do
notified_observer = true
end
end
TestEvent.new.fire!
expect(notified_observer).to be true
end
- it "configures observers with groups" do
- notified_observer = false
+ it 'configures observers with groups' do
+ notified_observer = false
called_transaction = false
TestEvent.configure do
- group :transaction, &->(b){
+ group :transaction, &->(b) {
b.call
called_transaction = true
}
notifies inside: :transaction do
notified_observer = true
@@ -207,27 +244,27 @@
TestEvent.new.fire!
expect(notified_observer).to be true
expect(called_transaction).to be true
end
- it "throws exception if :inside references unknown group" do
+ it 'throws exception if :inside references unknown group' do
begin
TestEvent.configure do
notifies inside: :transaction do
# some stuff
end
end
- fail "Shouldn't reach here, must throw a valid exception"
+ fail 'Shouldn\'t reach here, must throw a valid exception'
rescue Exception => e
expect(e.class).to eq(Ventable::Error)
end
end
- it "throws exception if nil observer added to the list" do
+ it 'throws exception if nil observer added to the list' do
begin
TestEvent.configure do
notifies nil
end
- fail "Shouldn't reach here, must throw a valid exception"
+ fail 'Shouldn\'t reach here, must throw a valid exception'
rescue Exception => e
expect(e.class).to eq(Ventable::Error)
end
end
end