@@ -289,6 +289,44 @@ def roots_name_and_order
289289 end
290290 end
291291
292+ context "doesn't order roots when requested" do
293+ before :each do
294+ @root1 = LabelWithoutRootOrdering . create! ( :name => 'root1' )
295+ @root2 = LabelWithoutRootOrdering . create! ( :name => 'root2' )
296+ @a , @b , @c , @d , @e = ( 'a' ..'e' ) . map { |ea | LabelWithoutRootOrdering . new ( :name => ea ) }
297+ @root1 . children << @a
298+ @root1 . append_child ( @c )
299+ @root1 . prepend_child ( @d )
300+ @a . append_sibling ( @b )
301+ @d . prepend_sibling ( @e )
302+ end
303+ 304+ it 'order_values properly' do
305+ expect ( @root1 . reload . order_value ) . to be_nil
306+ orders_and_names = @root1 . children . reload . map { |ea | [ ea . name , ea . order_value ] }
307+ expect ( orders_and_names ) . to eq ( [ [ 'e' , 0 ] , [ 'd' , 1 ] , [ 'a' , 2 ] , [ 'b' , 3 ] , [ 'c' , 4 ] ] )
308+ end
309+ 310+ it 'raises on prepending and appending to root' do
311+ expect { @root1 . prepend_sibling ( @f ) } . to raise_error ( ClosureTree ::RootOrderingDisabledError )
312+ expect { @root1 . append_sibling ( @f ) } . to raise_error ( ClosureTree ::RootOrderingDisabledError )
313+ end
314+ 315+ it 'returns empty array for siblings_before and after' do
316+ expect ( @root1 . siblings_before ) . to eq ( [ ] )
317+ expect ( @root1 . siblings_after ) . to eq ( [ ] )
318+ end
319+ 320+ it 'returns expected result for self_and_descendants_preordered' do
321+ expect ( @root1 . self_and_descendants_preordered . to_a ) . to eq ( [ @root1 , @e , @d , @a , @b , @c ] )
322+ end unless sqlite? # sqlite doesn't have a power function.
323+ 324+ it 'raises on roots_and_descendants_preordered' do
325+ expect { LabelWithoutRootOrdering . roots_and_descendants_preordered } . to raise_error (
326+ ClosureTree ::RootOrderingDisabledError )
327+ end
328+ end
329+ 292330 describe 'code in the readme' do
293331 it 'creates STI label hierarchies' do
294332 child = Label . find_or_create_by_path ( [
@@ -341,17 +379,7 @@ def roots_name_and_order
341379 root = Label . create ( :name => "root" )
342380 a = Label . create ( :name => "a" , :parent => root )
343381 b = Label . create ( :name => "b" , :parent => root )
344- expect ( a . order_value ) . to eq ( 0 )
345- expect ( b . order_value ) . to eq ( 1 )
346- #c = Label.create(:name => "c")
347382
348- # should the order_value for roots be set?
349- expect ( root . order_value ) . not_to be_nil
350- expect ( root . order_value ) . to eq ( 0 )
351- 352- # order_value should never be nil on a child.
353- expect ( a . order_value ) . not_to be_nil
354- expect ( a . order_value ) . to eq ( 0 )
355383 # Add a child to root at end of children.
356384 root . children << b
357385 expect ( b . parent ) . to eq ( root )
@@ -395,28 +423,41 @@ def roots_name_and_order
395423 end
396424
397425 context "order_value must be set" do
426+ shared_examples_for "correct order_value" do
427+ before do
428+ @root = model . create ( name : 'root' )
429+ @a , @b , @c = %w( a b c ) . map { |n | @root . children . create ( name : n ) }
430+ end
398431
399- before do
400- @root = Label . create ( name : 'root' )
401- @a , @b , @c = %w( a b c ) . map { |n | @root . children . create ( name : n ) }
402- end
432+ it 'should set order_value on roots' do
433+ expect ( @root . order_value ) . to eq ( expected_root_order_value )
434+ end
403435
404- it 'should set order_value on roots' do
405- expect ( @root . order_value ) . to eq ( 0 )
436+ it 'should set order_value with siblings' do
437+ expect ( @a . order_value ) . to eq ( 0 )
438+ expect ( @b . order_value ) . to eq ( 1 )
439+ expect ( @c . order_value ) . to eq ( 2 )
440+ end
441+ 442+ it 'should reset order_value when a node is moved to another location' do
443+ root2 = model . create ( name : 'root2' )
444+ root2 . add_child @b
445+ expect ( @a . order_value ) . to eq ( 0 )
446+ expect ( @b . order_value ) . to eq ( 0 )
447+ expect ( @c . reload . order_value ) . to eq ( 1 )
448+ end
406449 end
407450
408- it 'should set order_value with siblings' do
409- expect ( @a . order_value ) . to eq ( 0 )
410- expect ( @b . order_value ) . to eq ( 1 )
411- expect ( @c . order_value ) . to eq ( 2 )
451+ context " with normal model" do
452+ let ( :model ) { Label }
453+ let ( :expected_root_order_value ) { 0 }
454+ it_behaves_like "correct order_value"
412455 end
413456
414- it 'should reset order_value when a node is moved to another location' do
415- root2 = Label . create ( name : 'root2' )
416- root2 . add_child @b
417- expect ( @a . order_value ) . to eq ( 0 )
418- expect ( @b . order_value ) . to eq ( 0 )
419- expect ( @c . reload . order_value ) . to eq ( 1 )
457+ context "without root ordering" do
458+ let ( :model ) { LabelWithoutRootOrdering }
459+ let ( :expected_root_order_value ) { nil }
460+ it_behaves_like "correct order_value"
420461 end
421462 end
422463
0 commit comments