public void Update_UpdatedNodeWithChangedState_StateIsTheSame(NodeState state)
        {
            // Arrange
            const string TEXT        = "text";
            var          treeContext = new DbTreeContext();
            var          root        = new TreeNode
            {
                Id    = Guid.NewGuid(),
                State = state
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var updatedNode      = new TreeNode
            {
                Id    = root.Id,
                Value = TEXT
            };

            // Act
            dbTreeRepository.Update(updatedNode);

            // Assert
            Assert.That(treeContext.Tree[root.Id].State, Is.EqualTo(state));
        }
        public void Update_UpdatedNodeWithDeleteState_UpdatesNode()
        {
            // Arrange
            const string TEXT        = "text";
            var          treeContext = new DbTreeContext();
            var          root        = new TreeNode
            {
                Id        = Guid.NewGuid(),
                IsDeleted = true,
                State     = NodeState.Deleted
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var updatedNode      = new TreeNode
            {
                Id    = root.Id,
                Value = TEXT
            };

            // Act
            dbTreeRepository.Update(updatedNode);

            // Assert
            Assert.That(treeContext.Tree[root.Id].Value, Is.EqualTo(TEXT));
        }
        public void Update_NodeIsValid_UpdatesNode()
        {
            // Arrange
            const string TEXT        = "text";
            var          treeContext = new DbTreeContext();
            var          root        = new TreeNode
            {
                Id = Guid.NewGuid()
            };

            treeContext.Tree.Add(root.Id, root);
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var updatedNode      = new TreeNode
            {
                Id    = root.Id,
                Value = TEXT
            };

            // Act
            dbTreeRepository.Update(updatedNode);

            // Assert
            Assert.That(treeContext.Tree[root.Id].Value, Is.EqualTo(TEXT));
            Assert.That(treeContext.Tree[root.Id].State, Is.EqualTo(NodeState.Modified));
        }
        public void Update_NodeNotExists_ThrowsKeyNotFoundException()
        {
            // Arrange
            var treeContext      = new DbTreeContext();
            var dbTreeRepository = new DbTreeRepository(treeContext);
            var updatedNode      = new TreeNode
            {
                Id = Guid.NewGuid()
            };

            // Act
            // Assert
            Assert.That(() => dbTreeRepository.Update(updatedNode), Throws.TypeOf <KeyNotFoundException>());
        }
        public void Update_NodeIsDeleted_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 updatedNode      = new TreeNode
            {
                Id    = root.Id,
                Value = "text"
            };

            // Act
            // Assert
            Assert.That(() => dbTreeRepository.Update(updatedNode), Throws.InvalidOperationException);
        }