public void Add_ToDeletedParentWithChangedState_AddsNodeAndIsDeletedTrue(NodeState state)
        {
            // Arrange
            var treeContext = new DbTreeContext();
            var root        = new TreeNode
            {
                Id        = Guid.NewGuid(),
                IsDeleted = true,
                State     = state
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var newNode          = new TreeNode
            {
                ParentId = root.Id
            };

            // Act
            dbTreeRepository.Add(newNode);

            // Assert
            Assert.That(treeContext.Tree[newNode.Id], Is.EqualTo(newNode));
            Assert.That(treeContext.Tree[newNode.Id].IsDeleted, Is.True);
        }
        public void Add_NodeIdIsEmpty_SetsNewId()
        {
            // Arrange
            var treeContext      = new DbTreeContext();
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var newNode          = new TreeNode();

            // Act
            dbTreeRepository.Add(newNode);

            // Assert
            Assert.That(newNode.Id, Is.Not.EqualTo(Guid.Empty));
        }
        public void Add_NodeIdIsNotEmpty_DoesNotSetNewId()
        {
            // Arrange
            var treeContext      = new DbTreeContext();
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var id      = Guid.NewGuid();
            var newNode = new TreeNode
            {
                Id = id
            };

            // Act
            dbTreeRepository.Add(newNode);

            // Assert
            Assert.That(newNode.Id, Is.EqualTo(id));
        }
        public void Add_OneMoreRoot_ThrowsArgumentException()
        {
            // Arrange
            var treeContext = new DbTreeContext();
            var root        = new TreeNode
            {
                Id = Guid.NewGuid()
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var newNode          = new TreeNode();

            // Act
            // Assert
            Assert.That(() => dbTreeRepository.Add(newNode), Throws.ArgumentException);
        }
        public void Add_ToDeletedParent_ThrowsInvalidOperationException()
        {
            // Arrange
            var treeContext = new DbTreeContext();
            var root        = new TreeNode
            {
                Id        = Guid.NewGuid(),
                IsDeleted = true
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var newNode          = new TreeNode
            {
                ParentId = root.Id
            };

            // Act
            // Assert
            Assert.That(() => dbTreeRepository.Add(newNode), Throws.InvalidOperationException);
        }
        public void Add_NodeIsValid_AddsNode()
        {
            // Arrange
            var treeContext = new DbTreeContext();
            var root        = new TreeNode
            {
                Id = Guid.NewGuid()
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var newNode          = new TreeNode
            {
                ParentId = root.Id
            };

            // Act
            dbTreeRepository.Add(newNode);

            // Assert
            Assert.That(treeContext.Tree[newNode.Id], Is.EqualTo(newNode));
        }