示例#1
0
        public void ProcessPath_Processes_Directory_Of_Only_Of_Mixed_Files()
        {
            const string filePath1 = @"c:\dbscripts\file1.SQL";
            const string filePath2 = @"c:\dbscripts\file2.txt";
            const string filePath3 = @"c:\dbscripts\file3.sql";
            const string filePath4 = @"c:\dbscripts\file4.Sql";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { filePath1, new MockFileData("File1SQL") },
                { filePath2, new MockFileData("File2SQL") },
                { filePath3, new MockFileData("File3SQL") },
                { filePath4, new MockFileData("File4SQL") }
            });

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath("\" " + @"c:\DBScripts" + " \""); // Also testing removal of quotes and leading/trailing spaces

            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <TextReader>());
            ruleVisitor.DidNotReceive().VisitRules(filePath2, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <TextReader>());
            reporter.DidNotReceive().Report(Arg.Any <string>());
            Assert.AreEqual(3, processor.GetFileCount());
        }
示例#2
0
        public void ProcessPath_Does_Not_Process_When_Not_File_Directory_Or_Wildcard()
        {
            const string filePath = "This doesnt exist";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = Substitute.For <IFileSystem>();
            var fileBase    = Substitute.For <FileBase>();

            fileBase.Exists(filePath).Returns(false);
            fileSystem.File.Returns(fileBase);
            var directoryBase = Substitute.For <DirectoryBase>();

            directoryBase.Exists(filePath).Returns(false);
            fileSystem.Directory.Returns(directoryBase);

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath(filePath);

            fileBase.Received().Exists(filePath);
            directoryBase.Received().Exists(filePath);
            ruleVisitor.DidNotReceive().VisitRules(filePath, Arg.Any <TextReader>());
            reporter.Received().Report(string.Format("{0} is not a valid path.", filePath));
            Assert.AreEqual(0, processor.GetFileCount());
        }
示例#3
0
        public void ProcessPath_Processes_WildCard_When_It_Needs_To_Use_CurrentDirectory_Path()
        {
            const string filePath1 = @"c:\dbscripts\file1.SQL";
            const string filePath2 = @"c:\dbscripts\file2.txt";
            const string filePath3 = @"c:\dbscripts\file3.sql";
            const string filePath4 = @"c:\dbscripts\file4.Sql";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { filePath1, new MockFileData("File1SQL") },
                { filePath2, new MockFileData("File2SQL") },
                { filePath3, new MockFileData("File3SQL") },
                { filePath4, new MockFileData("File4SQL") }
            }, @"c:\dbscripts"); // Set current directory

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath(@"file*.*");

            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <TextReader>());
            ruleVisitor.DidNotReceive().VisitRules(filePath2, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <TextReader>());

            reporter.DidNotReceive().Report(Arg.Any <string>());

            Assert.AreEqual(3, processor.GetFileCount());
        }
        public void ProcessPath_InvalidPath_ShouldNotProcess()
        {
            // arrange
            const string filePath1 = @"c:\dbscripts\file1.txt";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                {
                    filePath1, new MockFileData("File1SQL")
                }
            });

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(@"c:\DBScripts\invalid*.*");

            // assert
            ruleVisitor.DidNotReceive().VisitRules(filePath1, Arg.Any <Stream>());
            reporter.DidNotReceive().Report(Arg.Any <string>());
            Assert.AreEqual(0, processor.FileCount);
        }
示例#5
0
        public void ProcessPath_Processes_Directory_Of_Files_And_Directories()
        {
            const string filePath1 = @"c:\dbscripts\file1.SQL";
            const string filePath2 = @"c:\dbscripts\db1\file2.sql";
            const string filePath3 = @"c:\dbscripts\db2\file3.sql";
            const string filePath4 = @"c:\dbscripts\db2\sproc\file4.Sql";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { filePath1, new MockFileData("File1SQL") },
                { filePath2, new MockFileData("File2SQL") },
                { filePath3, new MockFileData("File3SQL") },
                { filePath4, new MockFileData("File4SQL") }
            });

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath(@"c:\DBScripts");

            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath2, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <TextReader>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <TextReader>());
            reporter.DidNotReceive().Report(Arg.Any <string>());
            Assert.AreEqual(4, processor.GetFileCount());
        }
        public void ProcessPath_WildcardInvalidDirectory_ShouldNotProcess()
        {
            // arrange
            const string sqlFilePath1 = @"c:\dbscripts\file1.SQL";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            var fileSystem = new MockFileSystem(
                new Dictionary <string, MockFileData>
            {
                {
                    sqlFilePath1, new MockFileData("File1SQL")
                }
            },
                @"c:\dbscripts");

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(@"c:\doesntExist\file*.*");

            // assert
            ruleVisitor.DidNotReceive().VisitRules(sqlFilePath1, Arg.Any <Stream>());

            Assert.AreEqual(0, processor.FileCount);
        }
        public void ProcessPath_SingleFile_ShouldProcessFile()
        {
            // arrange
            const string filePath = "c:\\dbscripts\\myfile.sql";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var fileSystem    = Substitute.For <IFileSystem>();
            var fileBase      = Substitute.For <FileBase>();
            var pluginHandler = Substitute.For <IPluginHandler>();
            var processor     = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            fileBase.Exists(filePath).Returns(true);
            fileBase.OpenRead(filePath).Returns(ParsingUtility.GenerateStreamFromString("Some Sql To Parse"));
            fileSystem.File.Returns(fileBase);

            // act
            processor.ProcessPath("\" " + filePath + " \""); // Also testing removal of quotes and leading/trailing spaces

            // assert
            fileBase.Received().Exists(filePath);
            fileBase.Received().OpenRead(filePath);
            ruleVisitor.Received().VisitRules(filePath, Arg.Any <Stream>());
            Assert.AreEqual(1, processor.FileCount);
        }
        public void ProcessPath_InvalidPathSpecified_ShouldNotProcessFiles()
        {
            // arrange
            const string filePath = "This doesnt exist";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var fileSystem    = Substitute.For <IFileSystem>();
            var fileBase      = Substitute.For <FileBase>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            fileBase.Exists(filePath).Returns(false);
            fileSystem.File.Returns(fileBase);
            var directoryBase = Substitute.For <DirectoryBase>();

            directoryBase.Exists(filePath).Returns(false);
            fileSystem.Directory.Returns(directoryBase);

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(filePath);

            // assert
            fileBase.Received().Exists(filePath);
            directoryBase.Received().Exists(filePath);
            ruleVisitor.DidNotReceive().VisitRules(filePath, Arg.Any <Stream>());
            reporter.Received().Report($"{filePath} is not a valid file path.");
            Assert.AreEqual(0, processor.FileCount);
        }
示例#9
0
        public void ProcessPath_Wildcard_ShouldOnlyProcessSqlFilesInCurrentDirectory()
        {
            // arrange
            var sqlFilePath1 = TestHelper.GetTestFilePath(@"c:\dbscripts\file1.SQL");
            var txtFilePath2 = TestHelper.GetTestFilePath(@"c:\dbscripts\file2.txt");
            var sqlFilePath3 = TestHelper.GetTestFilePath(@"c:\dbscripts\file3.sql");
            var sqlFilePath4 = TestHelper.GetTestFilePath(@"c:\dbscripts\file4.Sql");
            var sqlFilePath5 = TestHelper.GetTestFilePath(@"c:\file4.Sql");

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            var fileSystem = new MockFileSystem(
                new Dictionary <string, MockFileData>
            {
                {
                    sqlFilePath1, new MockFileData("File1SQL")
                },
                {
                    txtFilePath2, new MockFileData("File2SQL")
                },
                {
                    sqlFilePath3, new MockFileData("File3SQL")
                },
                {
                    sqlFilePath4, new MockFileData("File4SQL")
                },
                {
                    sqlFilePath5, new MockFileData("File5SQL")
                }
            }, TestHelper.GetTestFilePath(@"c:\dbscripts"));

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(@"file*.*");

            // assert
            ruleVisitor.Received().VisitRules(sqlFilePath1, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(sqlFilePath3, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(sqlFilePath4, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());

            // should not visit text files
            ruleVisitor.DidNotReceive().VisitRules(txtFilePath2, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());

            // should only visit files in current directory
            ruleVisitor.DidNotReceive().VisitRules(sqlFilePath5, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());

            Assert.AreEqual(3, processor.FileCount);
        }
示例#10
0
        public void ProcessPath_DirectorSpecifiedWildcard_ShouldOnlyProcessSqlFilesInSpecificDirectory()
        {
            // arrange
            const string filePath1 = @"c:\dbscripts\file1.SQL";
            const string filePath2 = @"c:\dbscripts\file2.txt";
            const string filePath3 = @"c:\dbscripts\file3.sql";
            const string filePath4 = @"c:\dbscripts\file4.Sql";
            const string filePath5 = @"c:\file4.Sql";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                {
                    filePath1, new MockFileData("File1SQL")
                },
                {
                    filePath2, new MockFileData("File2SQL")
                },
                {
                    filePath3, new MockFileData("File3SQL")
                },
                {
                    filePath4, new MockFileData("File4SQL")
                },
                {
                    filePath5, new MockFileData("File5SQL")
                }
            });

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(@"c:\DBScripts\file*.*");

            // assert
            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <Stream>());
            ruleVisitor.DidNotReceive().VisitRules(filePath2, Arg.Any <Stream>());
            ruleVisitor.DidNotReceive().VisitRules(filePath5, Arg.Any <Stream>());
            Assert.AreEqual(3, processor.FileCount);
        }
示例#11
0
        public void ProcessPath_Does_Not_Process_Files_When_WildCard_Does_Not_Find_Anything()
        {
            const string filePath1 = @"c:\dbscripts\file1.txt";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { filePath1, new MockFileData("File1SQL") }
            });

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath(@"c:\DBScripts\oops*.*");

            ruleVisitor.DidNotReceive().VisitRules(filePath1, Arg.Any <TextReader>());
            reporter.DidNotReceive().Report(Arg.Any <string>());
            Assert.AreEqual(0, processor.GetFileCount());
        }
        public void ProcessPath_PathWithSpaces_ShouldProcessFiles()
        {
            // arrange
            const string filePath1 = @"c:\dbscripts\file1.SQL";
            const string filePath2 = @"c:\dbscripts\file2.txt";
            const string filePath3 = @"c:\dbscripts\file3.sql";
            const string filePath4 = @"c:\dbscripts\file4.Sql";

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var pluginHandler = Substitute.For <IPluginHandler>();
            var reporter      = Substitute.For <IReporter>();

            var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                {
                    filePath1, new MockFileData("File1SQL")
                },
                {
                    filePath2, new MockFileData("File2SQL")
                },
                {
                    filePath3, new MockFileData("File3SQL")
                },
                {
                    filePath4, new MockFileData("File4SQL")
                }
            });

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath("\" " + @"c:\DBScripts" + " \"");

            // assert
            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.DidNotReceive().VisitRules(filePath2, Arg.Any <IEnumerable <IRuleException> >(), Arg.Any <Stream>());
            Assert.AreEqual(3, processor.FileCount);
        }
示例#13
0
        public void ProcessPath_DirectorySpecified_ShouldProcessSubDirectories()
        {
            // arrange
            var filePath1 = TestHelper.GetTestFilePath(@"c:\dbscripts\file1.SQL");
            var filePath2 = TestHelper.GetTestFilePath(@"c:\dbscripts\db1\file2.sql");
            var filePath3 = TestHelper.GetTestFilePath(@"c:\dbscripts\db2\file3.sql");
            var filePath4 = TestHelper.GetTestFilePath(@"c:\dbscripts\db2\sproc\file4.Sql");

            var ruleVisitor   = Substitute.For <IRuleVisitor>();
            var reporter      = Substitute.For <IReporter>();
            var pluginHandler = Substitute.For <IPluginHandler>();

            var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                {
                    filePath1, new MockFileData("File1SQL")
                },
                {
                    filePath2, new MockFileData("File2SQL")
                },
                {
                    filePath3, new MockFileData("File3SQL")
                },
                {
                    filePath4, new MockFileData("File4SQL")
                }
            });

            var processor = new SqlFileProcessor(ruleVisitor, pluginHandler, reporter, fileSystem);

            // act
            processor.ProcessPath(TestHelper.GetTestFilePath(@"c:\dbscripts"));

            // assert
            ruleVisitor.Received().VisitRules(filePath1, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath2, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath3, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            ruleVisitor.Received().VisitRules(filePath4, Arg.Any <IEnumerable <IExtendedRuleException> >(), Arg.Any <Stream>());
            Assert.AreEqual(4, processor.FileCount);
        }
示例#14
0
        public void ProcessPath_Processes_Single_File_When_It_Exists()
        {
            const string filePath = "c:\\dbscripts\\myfile.sql";

            var ruleVisitor = Substitute.For <IRuleVisitor>();
            var reporter    = Substitute.For <IBaseReporter>();
            var fileSystem  = Substitute.For <IFileSystem>();
            var fileBase    = Substitute.For <FileBase>();

            fileBase.Exists(filePath).Returns(true);
            fileBase.ReadAllText(filePath).Returns("Some Sql To Parse");
            fileSystem.File.Returns(fileBase);

            var processor = new SqlFileProcessor(ruleVisitor, reporter, fileSystem);

            processor.ProcessPath("\" " + filePath + " \""); // Also testing removal of quotes and leading/trailing spaces

            fileBase.Received().Exists(filePath);
            fileBase.Received().ReadAllText(filePath);
            ruleVisitor.Received().VisitRules(filePath, Arg.Any <TextReader>());
            reporter.DidNotReceive().Report(Arg.Any <string>());
            Assert.AreEqual(1, processor.GetFileCount());
        }