Inheritance: IFileSystemQuery
 public FileSystemIntellisenseProvider()
 {
     Optional = false;
     IntellisenseProviderType = IntellisenseProviderType.Default;
     HandlesResultInsertion = true;
     _intellisenseResults = new List<IntellisenseProviderResult>();
     FileSystemQuery = new FileSystemQuery(); 
 }
        private static FileSystemQuery GetFileSystemQuery(bool hasShares = true)
        {
            var dirFact = new Mock<IDirectoryEntryFactory>();
            var dir = new Mock<IDirectoryEntry>();
            var dirLocal = new Mock<IDirectory>();
            dirLocal.Setup(a => a.Exists("bob")).Returns(false);
            dirLocal.Setup(a => a.Exists("bo")).Returns(true);
            dirLocal.Setup(a => a.GetFileSystemEntries(It.IsAny<string>(), It.IsAny<string>())).Returns(new[] { "b", "d", "f" });

            var children = new Mock<IDirectoryEntries>();
            var gChildren = new Mock<IDirectoryEntries>();
            var actualChildren = new List<Mock<IDirectoryEntry>>
                {
                    new Mock<IDirectoryEntry>()
                };
            var actualGChildren = new List<Mock<IDirectoryEntry>>
                {
                    new Mock<IDirectoryEntry>()
                };
            actualGChildren.ForEach(
                b => b.Setup(a => a.Name).Returns("a"));
            actualGChildren.ForEach(
                b => b.Setup(a => a.SchemaClassName).Returns("Computer"));
            actualChildren.ForEach(
                b => b.Setup(a => a.SchemaClassName).Returns("Computer"));
            dirFact.Setup(a => a.Create(It.IsAny<string>())).Returns(dir.Object);

            dir.Setup(a => a.Children).Returns(children.Object);
            children.Setup(a => a.GetEnumerator())
                    .Returns(actualChildren.Select(a => a.Object)
                                           .GetEnumerator());
            actualChildren.First().Setup(a => a.Children).Returns(gChildren.Object);
            gChildren.Setup(a => a.GetEnumerator()).Returns(actualGChildren.Select(a => a.Object).GetEnumerator());
            IList<Share> shares = hasShares? new List<Share>{new Share("a","b",ShareType.Disk)}  : new List<Share>();
            var sFact = new Mock<IShareCollectionFactory>();
            sFact.Setup(a => a.CreateShareCollection(It.IsAny<string>())).Returns(new ShareCollection(shares));

            //------------Execute Test---------------------------
            var query = new FileSystemQuery(dirLocal.Object, dirFact.Object, sFact.Object);

            return query;
        }
        public void FileSystemQuery_FindNetworkComputers_ValidEntries_ExpectReturned()
        {
            //------------Setup for test--------------------------
            var dirFact = new Mock<IDirectoryEntryFactory>();
            var dir = new Mock<IDirectoryEntry>();
            var children = new Mock<IDirectoryEntries>();
            var gChildren = new Mock<IDirectoryEntries>();
            var actualChildren = new List<Mock<IDirectoryEntry>>
                {
                    new Mock<IDirectoryEntry>()

                };
               var actualGChildren = new List<Mock<IDirectoryEntry>>
                {
                    new Mock<IDirectoryEntry>()

                };
            actualGChildren.ForEach(
                b=>b.Setup(a=>a.Name).Returns("a"));
            actualGChildren.ForEach(
                b => b.Setup(a => a.SchemaClassName).Returns("Computer"));
            actualChildren.ForEach(
                b=>b.Setup(a=>a.SchemaClassName).Returns("Computer"));
            dirFact.Setup(a => a.Create(It.IsAny<string>())).Returns(dir.Object);

            dir.Setup(a => a.Children).Returns(children.Object);
            children.Setup(a => a.GetEnumerator())
                .Returns(actualChildren.Select(a=>a.Object)
                .GetEnumerator());
            actualChildren.First().Setup(a => a.Children).Returns(gChildren.Object);
            gChildren.Setup(a => a.GetEnumerator()).Returns(actualGChildren.Select(a => a.Object).GetEnumerator());
            //------------Execute Test---------------------------
            var query = new FileSystemQuery(new DirectoryWrapper(), dirFact.Object, new ShareCollectionFactory());

            var res = query.FindNetworkComputers();
            //------------Assert Results-------------------------
            Assert.AreEqual(res.Count, 1);
            Assert.AreEqual("\\\\a", res[0]);
        }
        public void FileSystemQuery_QueryList_NullPath_ExpectLocalDrives()
        {
            //------------Setup for test--------------------------
             var dir = new Mock<IDirectory>();
             dir.Setup(a => a.GetLogicalDrives()).Returns(new[] { "a", "b", "c" });
             var query = new FileSystemQuery(dir.Object, new DirectoryEntryFactory(), new ShareCollectionFactory());

             query.QueryList(null);
             //------------Assert Results-------------------------
             var files = query.QueryCollection;
             Assert.AreEqual(3, files.Count);
             Assert.AreEqual("a", files[0]);
             Assert.AreEqual("b", files[1]);
             Assert.AreEqual("c", files[2]);
        }
        public void FileSystemQuery_SearchForFileAndFolders_DriveSearchPath_ExpectCurrentValues()
        {
            //------------Setup for test--------------------------
             var dir = new Mock<IDirectory>();
             dir.Setup(a => a.GetFileSystemEntries(It.IsAny<string>())).Returns(new[] { "a", "b", "c" });
             dir.Setup(a => a.Exists(It.IsAny<string>())).Returns(true);
             var query = new FileSystemQuery(dir.Object, new DirectoryEntryFactory(), new ShareCollectionFactory());
             var files = new List<string> { "non" };

             files = query.SearchForFileAndFolders(@"c:", files, '\\');
             //------------Assert Results-------------------------

             Assert.AreEqual(files.Count, 3);
             Assert.AreEqual("a", files[0]);
             Assert.AreEqual("b", files[1]);
             Assert.AreEqual("c", files[2]);
        }
        public void FileSystemQuery_GetServerFolderShare_PathLength_ExpectFalse()
        {
            //------------Setup for test--------------------------

            //------------Execute Test---------------------------
            var query = new FileSystemQuery();
            string sServerFolderShare;
            var res = query.GetServerFolderShare("bob", out sServerFolderShare);
            //------------Assert Results-------------------------
            Assert.IsFalse(res);
        }
        public void FileSystemQuery_GetServerFolderShare_MultipleSlashesShareName_ExpectTrue()
        {
            //------------Setup for test--------------------------
            var dir = new Mock<IDirectory>();
            dir.Setup(a => a.Exists("\\\\bobthebuilder\\dave")).Returns(true);

            //------------Execute Test---------------------------
            var query = new FileSystemQuery(dir.Object, new DirectoryEntryFactory(),new ShareCollectionFactory());
            string sServerFolderShare;
            var res = query.GetServerFolderShare("\\\\bobthebuilder\\dave", out sServerFolderShare);
            //------------Assert Results-------------------------
            Assert.IsTrue(res);
        }
        public void FileSystemQuery_GetServerFolderShare_MultipleSlashesNoShareName_ExpectFalse()
        {
            //------------Setup for test--------------------------

            //------------Execute Test---------------------------
            var query = new FileSystemQuery();
            string sServerFolderShare;
            var res = query.GetServerFolderShare("\\\\bobthebuilder", out sServerFolderShare);
            //------------Assert Results-------------------------
            Assert.IsFalse(res);
        }
        public void FileSystemQuery_GetServerFolderShare_DefaultValue_ExpectTrue()
        {
            //------------Setup for test--------------------------
            var dir = new Mock<IDirectory>();
            dir.Setup(a => a.Exists("\\\\bobthebuilder\\dave")).Returns(false).Verifiable();

            //------------Execute Test---------------------------
            var query = new FileSystemQuery(dir.Object, new DirectoryEntryFactory(), new ShareCollectionFactory());
            string sServerFolderShare;
            var res = query.GetServerFolderShare("\\\\bobthebuilder\\dave\\", out sServerFolderShare);
            //------------Assert Results-------------------------
            Assert.IsTrue(res);
            Assert.AreEqual(@"\\BOBTHEBUILDER\DAVE\",sServerFolderShare);
        }
        public void FileSystemQuery_GetFilesAndFoldersIncludingNetwork_MultipleSlashesShareNameDoesNotExist_ExpectFalse()
        {
            //------------Setup for test--------------------------
            var dir = new Mock<IDirectory>();
            dir.Setup(a => a.Exists("\\\\bobthebuilder\\dave")).Returns(true).Verifiable();
            dir.Setup(a => a.GetFileSystemEntries("\\\\bobthebuilder\\dave")).Returns(new string[0]);
            //------------Execute Test---------------------------
            var query = new FileSystemQuery(dir.Object, new DirectoryEntryFactory(), new ShareCollectionFactory());

            var res = query.GetFilesAndFoldersIncludingNetwork("\\\\bobthebuilder\\dave",new List<string>(), '\\');
            //------------Assert Results-------------------------
            Assert.AreEqual(res.Count,1);
            Assert.AreEqual("\\\\bobthebuilder\\dave\\".ToUpper(), res[0]);
        }