public void Load_DbDoesNotContainsNode_ReturnsNull()
        {
            // Arrange
            var treeContext          = new CachedTreeContext();
            var dbTreeRepository     = Substitute.For <IDbTreeRepository>();
            var cachedTreeRepository = new CachedTreeRepository(treeContext, dbTreeRepository);

            // Act
            TreeNode treeNode = cachedTreeRepository.Load(Guid.NewGuid());

            // Assert
            Assert.That(treeNode, Is.Null);
        }
        public void Load_CacheDoesNotContainNode_NodeAddsToContext()
        {
            // Arrange
            var expectedNode = new TreeNode
            {
                Id = Guid.NewGuid()
            };
            var treeContext      = new CachedTreeContext();
            var dbTreeRepository = Substitute.For <IDbTreeRepository>();

            dbTreeRepository.GetById(expectedNode.Id).Returns(expectedNode);
            var cachedTreeRepository = new CachedTreeRepository(treeContext, dbTreeRepository);

            // Act
            cachedTreeRepository.Load(expectedNode.Id);

            // Assert
            Assert.That(treeContext.Tree, Contains.Key(expectedNode.Id));
        }
        public void Load_DeletedNode_ReturnsNull()
        {
            // Arrange
            var expectedNode = new TreeNode
            {
                Id        = Guid.NewGuid(),
                IsDeleted = true
            };
            var treeContext      = new CachedTreeContext();
            var dbTreeRepository = Substitute.For <IDbTreeRepository>();

            dbTreeRepository.GetById(expectedNode.Id).Returns(expectedNode);
            var cachedTreeRepository = new CachedTreeRepository(treeContext, dbTreeRepository);

            // Act
            TreeNode treeNode = cachedTreeRepository.Load(expectedNode.Id);

            // Assert
            Assert.That(treeNode, Is.Null);
        }
        public void Load_CacheDoesNotContainNode_ReturnsNodeWithRepositoryCall()
        {
            // Arrange
            var expectedNode = new TreeNode
            {
                Id = Guid.NewGuid()
            };
            var treeContext      = new CachedTreeContext();
            var dbTreeRepository = Substitute.For <IDbTreeRepository>();

            dbTreeRepository.GetById(expectedNode.Id).Returns(expectedNode);
            var cachedTreeRepository = new CachedTreeRepository(treeContext, dbTreeRepository);

            // Act
            TreeNode node = cachedTreeRepository.Load(expectedNode.Id);

            // Assert
            Assert.That(node.Id, Is.EqualTo(expectedNode.Id));
            dbTreeRepository.Received().GetById(node.Id);
        }