spec/branch_shared_examples.rb in compo-0.3.1 vs spec/branch_shared_examples.rb in compo-0.4.0
- old
+ new
@@ -1,15 +1,16 @@
+require 'url_finder_shared_examples'
require 'url_referenceable_shared_examples'
require 'movable_shared_examples'
shared_examples 'a branch' do
it_behaves_like 'a URL referenceable object'
it_behaves_like 'a movable object'
describe '#initialize' do
it 'initialises with a Parentless as parent' do
- expect(subject.parent).to be_a(Compo::Parentless)
+ expect(subject.parent).to be_a(Compo::Composites::Parentless)
end
it 'initialises with an ID function returning nil' do
expect(subject.id).to be_nil
end
@@ -20,32 +21,64 @@
it 'returns the empty string' do
expect(subject.url).to eq('')
end
end
context 'when the Branch is the child of a root' do
- let(:parent) { Compo::HashBranch.new }
+ let(:parent) { Compo::Branches::Hash.new }
before(:each) { subject.move_to(parent, :id) }
- it 'returns /ID, where ID is the ID of the Leaf' do
+ it 'returns /ID, where ID is the ID of the Branch' do
expect(subject.url).to eq('/id')
end
end
end
describe '#move_to' do
context 'when the Branch has a parent' do
context 'when the new parent is nil' do
- let(:parent) { Compo::HashBranch.new }
+ let(:parent) { Compo::Branches::Hash.new }
before(:each) { subject.move_to(parent, :id) }
it 'loses its previous parent' do
- expect(subject.move_to(nil, :id).parent).to be_a(Compo::Parentless)
+ expect(subject.move_to(nil, :id).parent).to be_a(
+ Compo::Composites::Parentless
+ )
end
it 'is no longer a child of its parent' do
subject.move_to(nil, :id)
expect(parent.children).to_not include(subject)
end
end
+ end
+ end
+end
+
+shared_examples 'a branch with children' do
+ it_behaves_like 'a branch'
+
+ describe '#find_url' do
+ it_behaves_like 'a URL finding' do
+ let(:target) { Compo::Branches::Leaf.new }
+
+ before(:each) do
+ a = Compo::Branches::Hash.new
+ b = Compo::Branches::Array.new
+ d = Compo::Branches::Leaf.new
+ e = Compo::Branches::Leaf.new
+ zero = Compo::Branches::Leaf.new
+
+ a.move_to(subject, initial_ids[0])
+ b.move_to(a, 'b')
+ zero.move_to(b, 0)
+ target.move_to(b, 1)
+ d.move_to(subject, initial_ids[1])
+ e.move_to(a, 'e')
+ end
+
+ let(:correct_url) { "#{initial_ids[0]}/b/1" }
+ let(:incorrect_url) { "#{initial_ids[0]}/z/1" }
+
+ let(:proc) { ->(*args, &b) { subject.find_url(*args, &b) } }
end
end
end