spec/unit/model_spec.rb in guacamole-0.2.0 vs spec/unit/model_spec.rb in guacamole-0.3.0
- old
+ new
@@ -12,16 +12,24 @@
end
describe Guacamole::Model do
subject { TestModel }
let(:current_time) { Time.now }
+ let(:callbacks) { double('Callback') }
+ let(:callbacks_module) { double('CallbacksModule') }
+ before do
+ allow(callbacks_module).to receive(:callbacks_for).and_return(callbacks)
+ allow(callbacks).to receive(:run_callbacks).with(:validate).and_yield
+ stub_const('Guacamole::Callbacks', callbacks_module)
+ end
+
describe 'module inclusion' do
it 'should include Virtus.model' do
expect(subject.ancestors.any? do |ancestor|
ancestor.to_s.include? 'Virtus'
- end).to be_true
+ end).to be true
end
it 'should include ActiveModel::Validation' do
expect(subject.ancestors).to include ActiveModel::Validations
end
@@ -62,15 +70,40 @@
describe 'persisted?' do
subject { TestModel.new }
it 'should be persisted if it has a key' do
subject.key = 'my_key'
- expect(subject.persisted?).to be_true
+ expect(subject.persisted?).to be true
end
it "should not be persisted if it doesn't have a key" do
subject.key = nil
- expect(subject.persisted?).to be_false
+ expect(subject.persisted?).to be false
+ end
+ end
+
+ describe 'callbacks' do
+ subject { TestModel.new }
+
+ it 'should register one callback class responsible for this model' do
+ awesome_callbacks_class = double('AwesomeCallbacksClass')
+ stub_const('AwesomeCallbacks', awesome_callbacks_class)
+ expect(callbacks_module).to receive(:register_callback).with(TestModel, awesome_callbacks_class)
+
+ TestModel.callbacks :awesome_callbacks
+ end
+
+ it 'should run validate callbacks on valid?' do
+ expect(callbacks).to receive(:run_callbacks).with(:validate).and_yield
+ expect(subject).to receive(:valid_without_callbacks?)
+
+ subject.valid?
+ end
+
+ it 'should provide method to get callback for self' do
+ expect(callbacks_module).to receive(:callbacks_for).with(subject)
+
+ subject.callbacks
end
end
describe 'id' do
subject { TestModel.new }