require File.expand_path('../spec_helper', __FILE__) describe ActiveRecord::Duplicate::Callbacks do let(:klass) { Class.new(ActiveRecord::Base) { self.table_name = 'records' } } it 'runs callbacks' do mock = MiniTest::Mock.new klass.instance_eval do before_duplication { mock.before_duplication(duplication_context) } after_duplication { mock.after_duplication(duplication_context) } end mock.expect(:before_duplication, nil, [:original]) mock.expect(:after_duplication, nil, [:original]) mock.expect(:before_duplication, nil, [:duplicate]) mock.expect(:after_duplication, nil, [:duplicate]) klass.create.duplicate mock.verify end it 'runs callbacks on the original object' do mock = MiniTest::Mock.new klass.instance_eval do before_duplication(on: :original) { mock.before_duplication(duplication_context) } after_duplication(on: :original) { mock.after_duplication(duplication_context) } end mock.expect(:before_duplication, nil, [:original]) mock.expect(:after_duplication, nil, [:original]) klass.create.duplicate mock.verify end it 'runs callbacks on the duplicated object' do mock = MiniTest::Mock.new klass.instance_eval do before_duplication(on: :duplicate) { mock.before_duplication(duplication_context) } after_duplication(on: :duplicate) { mock.after_duplication(duplication_context) } end mock.expect(:before_duplication, nil, [:duplicate]) mock.expect(:after_duplication, nil, [:duplicate]) klass.create.duplicate mock.verify end it 'wont duplicate records if callbacks return false' do klass.instance_eval do before_duplication(on: :original) { false } end klass.create.duplicate.must_equal(false) end end