public void Given_file_not_exist_when_load_should_tree_be_empty()
        {
            var treeManager = new KnowledgeTreeManager(NonExistentFileName, _mockNodeManager.Object);

            treeManager.Root.Children.Should().BeEmpty();
        }
        public void Given_file_corrupted_when_load_should_tree_be_empty()
        {
            var treeManager = new KnowledgeTreeManager(CorruptedFileName, _mockNodeManager.Object);

            treeManager.Root.Children.Should().BeEmpty();
        }
        public void When_update_should_the_tree_be_saved()
        {
            var treeManager = new KnowledgeTreeManager(CorrectFileName, _mockNodeManager.Object);

            treeManager.Root.Children.ElementAt(1).DetachFromParent();
            treeManager.Root.Children.ElementAt(0).Children.ElementAt(0).AddChild(new Node("1.1.1", _nodeMetadata));
            treeManager.UpdateTree();

            treeManager.ResetTree();
            treeManager.ReloadTree();
            treeManager.Root.Children.ElementAt(0).Id.Should().Be("1");
            treeManager.Root.Children.ElementAt(0).Children.ElementAt(0).Id.Should().Be("1.1");
            treeManager.Root.Children.ElementAt(0).Children.ElementAt(0).Children.ElementAt(0).Id.Should().Be("1.1.1");
            treeManager.Root.Children.ElementAt(0).Children.ElementAt(1).Id.Should().Be("1.2");
        }
        public void Given_file_is_valid_when_load_should_tree_be_loaded()
        {
            var treeManager = new KnowledgeTreeManager(CorrectFileName, _mockNodeManager.Object);

            TreeNode[] treeNodes = treeManager.Root.Children.ToArray();
            treeNodes[0].Id.Should().Be("1");
            treeNodes[0].Children.ElementAt(0).Id.Should().Be("1.1");
            treeNodes[0].Children.ElementAt(1).Id.Should().Be("1.2");
            treeNodes[1].Id.Should().Be("2");
            treeNodes[1].Children.ElementAt(0).Id.Should().Be("2.1");
            treeNodes[1].Children.ElementAt(0).Children.ElementAt(0).Id.Should().Be("2.1.1");
            treeNodes[1].Children.ElementAt(0).Children.ElementAt(1).Id.Should().Be("2.1.2");
            treeNodes[1].Children.ElementAt(0).Children.ElementAt(1).Children.ElementAt(0).Id.Should().Be("2.1.2.1");
        }
        public void When_reset_should_root_be_reset_and_tree_be_empty()
        {
            var treeManager = new KnowledgeTreeManager(CorrectFileName, _mockNodeManager.Object);
            TreeNode oldRoot = treeManager.Root;

            treeManager.ResetTree();

            treeManager.Root.Should().NotBeSameAs(oldRoot);
            treeManager.Root.Children.Should().BeEmpty();
        }
        public void Given_file_corrupted_when_reload_should_throw_exception()
        {
            var treeManager = new KnowledgeTreeManager(CorruptedFileName, _mockNodeManager.Object);

            new Action(treeManager.ReloadTree).ShouldThrow<KnowledgeTreeLoadFailException>();
        }
        public void Given_file_not_exist_when_reload_should_throw_exception()
        {
            if (File.Exists(NonExistentFileName)) File.Delete(NonExistentFileName);

            var treeManager = new KnowledgeTreeManager(NonExistentFileName, _mockNodeManager.Object);

            new Action(treeManager.ReloadTree).ShouldThrow<KnowledgeTreeLoadFailException>();
        }