@@ -234,4 +234,61 @@ def test_arrange_partial
234234 assert_equal ( [ n5 . id , n3 . id ] , model . arrange_nodes ( [ n5 , n3 ] ) . keys . map ( &:id ) )
235235 end
236236 end
237+
238+ def test_arrange_nodes_orphan_strategy_rootify
239+ AncestryTestDatabase . with_model do |model |
240+ # - n1
241+ # - n2
242+ # - n3
243+ # - n4
244+ n1 = model . create!
245+ n2 = model . create! ( parent : n1 )
246+ n3 = model . create! ( parent : n2 )
247+ n4 = model . create! ( parent : n1 )
248+
249+ # n2 and n4's parent (n1) is missing, so they become roots
250+ result = model . arrange_nodes ( [ n2 , n3 , n4 ] , orphan_strategy : :rootify )
251+ assert_equal ( { n2 => { n3 => { } } , n4 => { } } , result )
252+ end
253+ end
254+
255+ def test_arrange_nodes_orphan_strategy_destroy
256+ AncestryTestDatabase . with_model do |model |
257+ # - n1
258+ # - n2
259+ # - n3
260+ # - n4
261+ n1 = model . create!
262+ n2 = model . create! ( parent : n1 )
263+ n3 = model . create! ( parent : n2 )
264+ n4 = model . create! ( parent : n1 )
265+
266+ # n2 and n4's parent (n1) is missing, so they and their children are dropped
267+ result = model . arrange_nodes ( [ n2 , n3 , n4 ] , orphan_strategy : :destroy )
268+ assert_equal ( { } , result )
269+ end
270+ end
271+
272+ def test_arrange_nodes_orphan_strategy_restrict
273+ AncestryTestDatabase . with_model do |model |
274+ n1 = model . create!
275+ n2 = model . create! ( parent : n1 )
276+
277+ # n2's parent (n1) is missing, so restrict raises
278+ assert_raises ( Ancestry ::AncestryException ) do
279+ model . arrange_nodes ( [ n2 ] , orphan_strategy : :restrict )
280+ end
281+ end
282+ end
283+
284+ def test_arrange_nodes_orphan_strategy_rootify_is_default
285+ AncestryTestDatabase . with_model do |model |
286+ n1 = model . create!
287+ n2 = model . create! ( parent : n1 )
288+
289+ # default behavior: orphans become roots
290+ result = model . arrange_nodes ( [ n2 ] )
291+ assert_equal ( { n2 => { } } , result )
292+ end
293+ end
237294end
0 commit comments