Skip to content

Instantly share code, notes, and snippets.

@TiuTalk
Created April 11, 2014 00:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TiuTalk/10433438 to your computer and use it in GitHub Desktop.
Save TiuTalk/10433438 to your computer and use it in GitHub Desktop.
require 'spec_helper'
class FakeModelWithPersistenceMethods
include Lockable
attr_accessor :locked
def lock!
@locked = true
end
def unlock!
@locked = false
end
def some_method; end
end
class FakeModelWithoutPersistenceMethods
include Lockable
attr_accessor :locked
end
describe Lockable do
context 'model with persistence methods' do
let(:object) { FakeModelWithPersistenceMethods.new }
context 'unlocked' do
before { object.locked = false }
it 'receive lock! while running the while_locked block' do
object.should_receive(:lock!)
object.while_locked do
object.some_method
end
end
it 'receive unlock! while running the while_locked block' do
object.should_receive(:unlock!)
object.while_locked do
object.some_method
end
end
it 'runs the while_locked block' do
object.should_receive(:some_method)
object.while_locked do
object.some_method
end
end
end
context 'locked' do
before { object.locked = true }
it 'do not receive lock! while running the while_locked block' do
object.should_not_receive(:lock!)
object.while_locked do
object.some_method
end
end
it 'do not receive unlock! while running the while_locked block' do
object.should_not_receive(:unlock!)
object.while_locked do
object.some_method
end
end
it 'do not runs the while_locked block' do
object.should_not_receive(:some_method)
object.while_locked do
object.some_method
end
end
end
end
context 'model without persistence methods' do
let(:object) { FakeModelWithoutPersistenceMethods.new }
it 'raise exception while trying to lock the object' do
expect do
object.while_locked do
object.some_method
end
end.to raise_error 'You should the lock! method inside your class'
end
it 'raise exception while trying to unlock the object' do
object.stub(:lock!)
expect do
object.while_locked do
object.some_method
end
end.to raise_error 'You should the unlock! method inside your class'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment