Commit | Line | Data |
---|---|---|
82958127 | 1 | package TreeTest; |
2 | use strict; | |
3 | use warnings; | |
4 | ||
5 | use Test::More; | |
6 | use TreeTest::Schema; | |
7 | ||
8 | our $NODE_COUNT = 80; | |
9 | ||
10 | sub count_tests { | |
eccca921 | 11 | my $count = 13; |
c11aa533 | 12 | if( TreeTest::Schema::Node->can('position_column') ){ |
13 | $count ++; | |
14 | } | |
15 | return $count; | |
82958127 | 16 | } |
17 | ||
18 | sub run_tests { | |
19 | my $schema = TreeTest::Schema->connect(); | |
20 | my $nodes = $schema->resultset('Node'); | |
21 | my $root = $nodes->create({ name=>'root' }); | |
22 | my @parents = ( | |
23 | 1,1,3,4,4,3,3,8,8,10,10,8,8,3,3,16,3,3,1,20,1,22,22,24,24,22,27,27,29,29,27,32,32,34,34,36,34,38,38,40,40,42,42,44,44,46,44,44,49,44,51,51,53,51,55,55,57,57,55,60,55,62,55,64,64,55,67,67,55,70,70,55,55,51,51,76,76,78,78,76 | |
24 | ); | |
25 | ||
26 | foreach my $parent_id (@parents) { | |
27 | my $node = $nodes->create({ name=>'child' }); | |
28 | $node->parent( $parent_id ); | |
29 | } | |
30 | ok( ($nodes->count()==81), 'correct number of nodes in random tree' ); | |
31 | ok( ($nodes->find(3)->children->count()==7), 'node 3 has correct number of children' ); | |
32 | ok( ($nodes->find(22)->children->count()==3), 'node 22 has correct number of children' ); | |
33 | ||
34 | my $child = ($nodes->find(22)->children->all())[0]; | |
35 | $child->parent( $nodes->find(3) ); | |
36 | ok( ($nodes->find(3)->children->count()==8), 'node 3 has correct number of children' ); | |
37 | ok( ($nodes->find(3)->siblings->count()==3), 'node 3 has correct number of siblings' ); | |
38 | ok( ($nodes->find(22)->children->count()==2), 'node 22 has correct number of children' ); | |
39 | ok( ($nodes->find(22)->siblings->count()==3), 'node 22 has correct number of siblings' ); | |
40 | ||
eccca921 | 41 | $nodes->find(22)->attach_child( $nodes->find(3) ); |
82958127 | 42 | ok( ($nodes->find(22)->children->count()==3), 'node 22 has correct number of children' ); |
43 | ok( ($nodes->find(22)->siblings->count()==2), 'node 22 has correct number of siblings' ); | |
44 | ||
eccca921 | 45 | $nodes->find(22)->attach_sibling( $nodes->find(3) ); |
82958127 | 46 | ok( ($nodes->find(22)->children->count()==2), 'node 22 has correct number of children' ); |
47 | ok( ($nodes->find(22)->siblings->count()==3), 'node 22 has correct number of siblings' ); | |
c11aa533 | 48 | |
bb17efa0 | 49 | ok( ($nodes->find(22)->parents->count()==1), 'node 22 has correct number of parents' ); |
50 | ok( (($nodes->find(22)->parents->all())[0]->id()==$nodes->find(22)->parent->id()), 'node 22 parent matches parents' ); | |
51 | ||
c11aa533 | 52 | if( TreeTest::Schema::Node->can('position_column') ){ |
53 | ok( check_positions(scalar $root->children()), 'positions are correct' ); | |
54 | } | |
55 | } | |
56 | ||
57 | sub check_positions { | |
58 | my $nodes = shift; | |
59 | my $position = 0; | |
60 | while (my $node = $nodes->next()) { | |
61 | $position ++; | |
62 | return 0 if ($node->position() != $position); | |
63 | return 0 if ( !check_positions(scalar $node->children()) ); | |
64 | } | |
65 | return 1; | |
82958127 | 66 | } |
67 | ||
68 | 1; |