public void Should_handle_GetParent_operation_over_larger_hierarchy()
        {
            // build a sample hierarchy
            var hierarchyEntry = new HierarchyEntry
            {
                Name       = "Test Hierarchy",
                SchemaName = "dbo",
                TableName  = "test"
            };

            // initialize the provider
            var dataProvider = new MssqlDataProvider();
            var provider     = new MssqlHierarchyDataProvider(dataProvider);

            // generate the complex hierarchy
            TestHierarchy.BuildTestHierarchy(hierarchyEntry, provider);

            var rootNode          = provider.GetRootNode(hierarchyEntry);
            var primaryChildren   = provider.GetChildren(hierarchyEntry, rootNode);
            var primaryChild1     = primaryChildren.First();
            var secondaryChildren = provider.GetChildren(hierarchyEntry, primaryChild1);
            var leafChild         = secondaryChildren.First();

            var parent = provider.GetParent(hierarchyEntry, leafChild);

            Assert.That(parent.LeftId, Is.LessThan(leafChild.LeftId));
            Assert.That(parent.RightId, Is.GreaterThan(leafChild.RightId));

            // clean up
            dataProvider.DropTable(hierarchyEntry.SchemaName, hierarchyEntry.TableName);
        }
        public void Should_handle_GetDescendants_operation_over_larger_hierarchy()
        {
            // build a sample hierarchy
            var hierarchyEntry = new HierarchyEntry
            {
                Name       = "Test Hierarchy",
                SchemaName = "dbo",
                TableName  = "test"
            };

            // initialize the provider
            var dataProvider = new MssqlDataProvider();
            var provider     = new MssqlHierarchyDataProvider(dataProvider);

            // generate the complex hierarchy
            TestHierarchy.BuildTestHierarchy(hierarchyEntry, provider);

            var rootNode    = provider.GetRootNode(hierarchyEntry);
            var descendants = provider.GetDescendants(hierarchyEntry, rootNode, true, true);

            Assert.That(descendants.Count, Is.EqualTo(7));
            Assert.That(descendants[0].LeftId, Is.EqualTo(1));
            Assert.That(descendants[0].RightId, Is.EqualTo(14));
            Assert.That(descendants[1].LeftId, Is.EqualTo(2));
            Assert.That(descendants[1].RightId, Is.EqualTo(7));
            Assert.That(descendants[2].LeftId, Is.EqualTo(3));
            Assert.That(descendants[2].RightId, Is.EqualTo(4));
            Assert.That(descendants[3].LeftId, Is.EqualTo(5));
            Assert.That(descendants[3].RightId, Is.EqualTo(6));
            Assert.That(descendants[4].LeftId, Is.EqualTo(8));
            Assert.That(descendants[4].RightId, Is.EqualTo(13));
            Assert.That(descendants[5].LeftId, Is.EqualTo(9));
            Assert.That(descendants[5].RightId, Is.EqualTo(10));
            Assert.That(descendants[6].LeftId, Is.EqualTo(11));
            Assert.That(descendants[6].RightId, Is.EqualTo(12));

            Assert.That(rootNode.LeftId, Is.EqualTo(1));
            Assert.That(rootNode.RightId, Is.EqualTo(14));

            // clean up
            dataProvider.DropTable(hierarchyEntry.SchemaName, hierarchyEntry.TableName);
        }
        public void Should_handle_GetAncestors_operation_over_larger_hierarchy()
        {
            // build a sample hierarchy
            var hierarchyEntry = new HierarchyEntry
            {
                Name       = "Test Hierarchy",
                SchemaName = "dbo",
                TableName  = "test"
            };

            // initialize the provider
            var dataProvider = new MssqlDataProvider();
            var provider     = new MssqlHierarchyDataProvider(dataProvider);

            // generate the complex hierarchy
            TestHierarchy.BuildTestHierarchy(hierarchyEntry, provider);

            var rootNode          = provider.GetRootNode(hierarchyEntry);
            var primaryChildren   = provider.GetChildren(hierarchyEntry, rootNode);
            var primaryChild1     = primaryChildren.First();
            var secondaryChildren = provider.GetChildren(hierarchyEntry, primaryChild1);
            var leafChild         = secondaryChildren.First();

            var ancestors = provider.GetAncestors(hierarchyEntry, leafChild, true, true);

            Assert.That(ancestors.Count, Is.EqualTo(3));
            Assert.That(ancestors[0].LeftId, Is.EqualTo(1));
            Assert.That(ancestors[0].RightId, Is.EqualTo(14));
            Assert.That(ancestors[1].LeftId, Is.EqualTo(2));
            Assert.That(ancestors[1].RightId, Is.EqualTo(7));
            Assert.That(ancestors[2].LeftId, Is.EqualTo(leafChild.LeftId));
            Assert.That(ancestors[2].RightId, Is.EqualTo(leafChild.RightId));

            // clean up
            dataProvider.DropTable(hierarchyEntry.SchemaName, hierarchyEntry.TableName);
        }