public void Reset_InAnyCase_CallsRepositoryReset()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();

            // Act
            IActionResult result = new CachedTreeController(treeRepository).Reset();

            // Assert
            treeRepository.Received().Reset();
            Assert.That(result, Is.TypeOf <NoContentResult>());
        }
        public void GetNodes_RepositoryReturnsNull_ReturnsEmptyList()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();

            treeRepository.GetAll().Returns((List <TreeNode>)null);
            var cachedTreeController = new CachedTreeController(treeRepository);

            // Act
            IEnumerable <TreeNode> nodes = cachedTreeController.GetNodes().Value;

            // Assert
            Assert.That(nodes, Is.Empty);
        }
        public void GetNode_NodeNotExists_ReturnsNotFoundResult()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();

            treeRepository.Load(Arg.Any <Guid>()).Returns((TreeNode)null);
            var cachedTreeController = new CachedTreeController(treeRepository);

            // Act
            ActionResult result = cachedTreeController.GetNode(Arg.Any <Guid>()).Result;

            // Assert
            Assert.That(result, Is.TypeOf <NotFoundResult>());
        }
        public void DeleteNode_NodeIdNotValid_DoesNotCallRepositoryDelete()
        {
            // Arrange
            Guid id             = Guid.NewGuid();
            var  treeRepository = Substitute.For <ICachedTreeRepository>();

            treeRepository.GetById(id).Returns((TreeNode)null);

            // Act
            IActionResult result = new CachedTreeController(treeRepository).DeleteNode(id);

            // Assert
            treeRepository.DidNotReceive().Delete(Arg.Any <TreeNode>());
            Assert.That(result, Is.TypeOf <NotFoundResult>());
        }
        public void AddNode_NewNodeIsValid_ReturnsCreatedAtActionWithNewId()
        {
            // Arrange
            var  treeRepository = Substitute.For <ICachedTreeRepository>();
            Guid newId          = Guid.NewGuid();

            treeRepository.Add(Arg.Do <TreeNode>(node => node.Id = newId));
            var cachedTreeController = new CachedTreeController(treeRepository);

            // Act
            ActionResult result = cachedTreeController.AddNode(new TreeNode()).Result;

            // Assert
            Assert.That(result, Is.TypeOf <CreatedAtActionResult>());
            Assert.That(((CreatedAtActionResult)result).RouteValues["id"], Is.EqualTo(newId));
        }
        public void UpdateNode_NodeIdNotValid_CallsRepositoryUpdate()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();

            // Act
            IActionResult result = new CachedTreeController(treeRepository).UpdateNode(
                Guid.NewGuid(),
                new TreeNode
            {
                Id = Guid.NewGuid()
            });

            // Assert
            treeRepository.DidNotReceive().Update(Arg.Any <TreeNode>());
            Assert.That(result, Is.TypeOf <BadRequestResult>());
        }
        public void UpdateNode_NodeIsValid_CallsRepositoryUpdate()
        {
            // Arrange
            var  treeRepository = Substitute.For <ICachedTreeRepository>();
            Guid id             = Guid.NewGuid();
            var  node           = new TreeNode
            {
                Id = id
            };

            // Act
            IActionResult result = new CachedTreeController(treeRepository).UpdateNode(id, node);

            // Assert
            treeRepository.Received().Update(node);
            Assert.That(result, Is.TypeOf <NoContentResult>());
        }
        public void GetNode_NodeExists_ReturnsNode()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();
            var expectedNode   = new TreeNode
            {
                Id        = Guid.NewGuid(),
                IsDeleted = true,
                ParentId  = Guid.NewGuid(),
                Value     = "text"
            };

            treeRepository.Load(expectedNode.Id).Returns(expectedNode);
            var cachedTreeController = new CachedTreeController(treeRepository);

            // Act
            TreeNode node = cachedTreeController.GetNode(expectedNode.Id).Value;

            // Assert
            Assert.That(node, Is.EqualTo(expectedNode));
        }
        public void GetNodes_NodesExists_ReturnsNodes()
        {
            // Arrange
            var treeRepository = Substitute.For <ICachedTreeRepository>();
            var expectedNodes  = new List <TreeNode>
            {
                new TreeNode
                {
                    Id        = Guid.NewGuid(),
                    IsDeleted = true,
                    ParentId  = Guid.NewGuid(),
                    Value     = "text"
                }
            };

            treeRepository.GetAll().Returns(expectedNodes);
            var cachedTreeController = new CachedTreeController(treeRepository);

            // Act
            IEnumerable <TreeNode> nodes = cachedTreeController.GetNodes().Value;

            // Assert
            Assert.That(nodes, Is.EquivalentTo(expectedNodes));
        }