spec/movable_spec.rb in compo-0.1.5 vs spec/movable_spec.rb in compo-0.2.0

- old
+ new

@@ -1,201 +1,12 @@ require 'spec_helper' require 'compo' +require 'movable_shared_examples' # Mock implementation of a Movable class MockMovable include Compo::Movable end describe MockMovable do - let(:old_parent) { double(:old_parent) } - let(:new_parent) { double(:new_parent) } - - describe '#move_to' do - context 'when the receiving parent is nil' do - context 'and the Movable has no parent' do - before(:each) do - allow(subject).to receive(:parent).and_return(nil) - end - - it 'returns itself' do - expect(subject.move_to(nil, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent).once - subject.move_to(nil, :test) - end - end - - context 'and the Movable has a parent' do - before(:each) do - allow(subject).to receive(:parent).and_return(old_parent) - allow(old_parent).to receive(:remove) - end - - it 'returns itself' do - expect(subject.move_to(nil, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(nil, :test) - end - - it 'calls #remove on the old parent with the Movable' do - expect(old_parent).to receive(:remove).once.with(subject) - subject.move_to(nil, :test) - end - end - end - - context 'when the receiving parent refuses to add the Movable' do - before(:each) do - allow(new_parent).to receive(:add).and_return(nil) - end - - context 'and the Movable has no parent' do - before(:each) do - allow(subject).to receive(:parent).and_return(nil) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #add on the new parent with the ID and Movable' do - expect(new_parent).to receive(:add).once.with(:test, subject) - subject.move_to(new_parent, :test) - end - end - - context 'and the Movable has a parent that refuses to remove it' do - before(:each) do - allow(subject).to receive(:parent).and_return(old_parent) - allow(old_parent).to receive(:remove).and_return(nil) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #remove on the old parent with the Movable' do - expect(old_parent).to receive(:remove).once.with(subject) - subject.move_to(new_parent, :test) - end - end - - context 'and the Movable has a parent that allows it to be removed' do - before(:each) do - allow(subject).to receive(:parent).and_return(old_parent) - allow(old_parent).to receive(:remove).and_return(subject) - allow(new_parent).to receive(:add) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #remove on the old parent with the Movable' do - expect(old_parent).to receive(:remove).once.with(subject) - subject.move_to(new_parent, :test) - end - - it 'calls #add on the new parent with the ID and Movable' do - expect(new_parent).to receive(:add).once.with(:test, subject) - subject.move_to(new_parent, :test) - end - end - end - - context 'when the receiving parent allows the Movable to be added' do - before(:each) do - allow(new_parent).to receive(:add).and_return(subject) - end - - context 'and the Movable has no parent' do - before(:each) do - allow(subject).to receive(:parent).and_return(nil) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #add on the new parent with the ID and Movable' do - expect(new_parent).to receive(:add).with(:test_id, subject) - - subject.move_to(new_parent, :test_id) - end - end - - context 'and the Movable has a parent that refuses to remove it' do - before(:each) do - allow(subject).to receive(:parent).and_return(old_parent) - allow(old_parent).to receive(:remove).and_return(nil) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #remove on the old parent with the Movable' do - expect(old_parent).to receive(:remove).once.with(subject) - subject.move_to(new_parent, :test) - end - end - - context 'and the Movable has a parent that allows it to be removed' do - before(:each) do - allow(subject).to receive(:parent).and_return(old_parent) - allow(old_parent).to receive(:remove).and_return(subject) - allow(new_parent).to receive(:add) - end - - it 'returns itself' do - expect(subject.move_to(new_parent, :test)).to eq(subject) - end - - it 'calls #parent' do - expect(subject).to receive(:parent) - subject.move_to(new_parent, :test) - end - - it 'calls #remove on the old parent with the Movable' do - expect(old_parent).to receive(:remove).once.with(subject) - subject.move_to(new_parent, :test) - end - - it 'calls #add on the new parent with the ID and Movable' do - expect(new_parent).to receive(:add).once.with(:test, subject) - subject.move_to(new_parent, :test) - end - end - end - end + it_behaves_like 'a movable object' end