Tests for adjacency list as well as a bunch of fixes.
[dbsrgits/DBIx-Class-Tree.git] / t / lib / TreeTest.pm
diff --git a/t/lib/TreeTest.pm b/t/lib/TreeTest.pm
new file mode 100644 (file)
index 0000000..95a0dec
--- /dev/null
@@ -0,0 +1,46 @@
+package TreeTest;
+use strict;
+use warnings;
+
+use Test::More;
+use TreeTest::Schema;
+
+our $NODE_COUNT = 80;
+
+sub count_tests {
+    return 11;
+}
+
+sub run_tests {
+    my $schema = TreeTest::Schema->connect();
+    my $nodes = $schema->resultset('Node');
+    my $root = $nodes->create({ name=>'root' });
+    my @parents = (
+        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
+    );
+
+    foreach my $parent_id (@parents) {
+        my $node = $nodes->create({ name=>'child' });
+        $node->parent( $parent_id );
+    }
+    ok( ($nodes->count()==81), 'correct number of nodes in random tree' );
+    ok( ($nodes->find(3)->children->count()==7), 'node 3 has correct number of children' );
+    ok( ($nodes->find(22)->children->count()==3), 'node 22 has correct number of children' );
+
+    my $child = ($nodes->find(22)->children->all())[0];
+    $child->parent( $nodes->find(3) );
+    ok( ($nodes->find(3)->children->count()==8), 'node 3 has correct number of children' );
+    ok( ($nodes->find(3)->siblings->count()==3), 'node 3 has correct number of siblings' );
+    ok( ($nodes->find(22)->children->count()==2), 'node 22 has correct number of children' );
+    ok( ($nodes->find(22)->siblings->count()==3), 'node 22 has correct number of siblings' );
+
+    $nodes->find(22)->attach_child( $nodes->find(3) );
+    ok( ($nodes->find(22)->children->count()==3), 'node 22 has correct number of children' );
+    ok( ($nodes->find(22)->siblings->count()==2), 'node 22 has correct number of siblings' );
+
+    $nodes->find(22)->attach_sibling( $nodes->find(3) );
+    ok( ($nodes->find(22)->children->count()==2), 'node 22 has correct number of children' );
+    ok( ($nodes->find(22)->siblings->count()==3), 'node 22 has correct number of siblings' );
+}
+
+1;