Exemple #1
0
        public void OrchestrateSqlReport_ForMissingParameter_FailsScan()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            fileWrapper.ReadAllText("reports\\data.xml").Returns(SqlSamples.ReportSampleXml);
            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "UserSearchByUserKey.sql",
                        "path\\sql\\theDB\\dbo\\Stored Procedures\\",
                        SqlSamples.FindUserWithId
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            paramReportComparer
            .When(x => x.CompareReports(Arg.Any <SqlReport>(), Arg.Any <SqlReport>(),
                                        Arg.Any <List <string> >()))
            .Do(x =>
            {
                var errors = (List <string>)x.Args()[2];
                errors.Add("SomeId|param is defaulted in master but not in new code");
            });

            var scanner = new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer,
                                             returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                "reports\\scanResult.html",
                false);

            // Assert
            Assert.That(result, Is.EqualTo(false));

            xmlWriter.DidNotReceive().WriteStartElement(Arg.Any <string>());
            fileWrapper.Received(1).ReadAllText("reports\\data.xml");
            htmlReportGenerator.Received(1).GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #2
0
        public void OrchestrateSqlReport_ForDifferentCaseInFileVsScript_GetsCorrectCase()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "FindUserWithID.sql",
                        "path\\sql\\theDB\\dbo\\Stored Procedures\\",
                        SqlSamples.FindUserWithId
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            var scanner =
                new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                null,
                true);

            // Assert
            Assert.That(result, Is.EqualTo(true));

            xmlWriter.Received(1).WriteStartElement(Arg.Any <string>());

            xmlWriter.Received(1).SerializeSqlReportElement(
                Arg.Is <StoredProcedureReport>(
                    x => x.SpName == "FindUserWithId"));

            xmlWriter.Received(1).SerializeSqlReportElement(
                Arg.Is <StoredProcedureReport>(
                    x => x.SpName == "FindUserWithId"));

            xmlWriter.Received(1).WriteEndElement();
            fileWrapper.DidNotReceive().ReadAllText("reports\\data.xml");
            htmlReportGenerator.DidNotReceive().GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #3
0
        public void OrchestrateSqlReport_ForCreateMasterReportWithVariables_CreatesMasterReportWithCorrectVariables()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "VariableReturns.sql",
                        "path\\sql\\theDB\\dbo\\Stored Procedures\\",
                        SqlSamples.VariableReturns
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            var scanner =
                new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                null,
                true);

            // Assert
            Assert.That(result, Is.EqualTo(true));
            xmlWriter.Received(1).WriteStartElement(Arg.Any <string>());

            xmlWriter.Received(1).SerializeSqlReportElement(Arg.Is <StoredProcedureReport>(
                                                                x =>
                                                                x.ReturnValues[0].ReturnValueName == "Param1" &&
                                                                x.ReturnValues[1].ReturnValueName == "Param2" &&
                                                                x.ReturnValues[2].ReturnValueName == "@Variable1" &&
                                                                x.ReturnValues[3].ReturnValueName == "Param3 = 'abc'"));

            xmlWriter.Received(1).SerializeSqlReportElement(Arg.Any <StoredProcedureReport>());
            xmlWriter.Received(1).WriteEndElement();
            fileWrapper.DidNotReceive().ReadAllText("reports\\data.xml");
            htmlReportGenerator.DidNotReceive().GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #4
0
        public void OrchestrateSqlReport_MissingReportPath_ThrowsException()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "UserSearchByUserKey.sql",
                        "path\\sql\\theDB\\dbo\\Stored Procedures\\",
                        SqlSamples.FindUserWithId
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            var scanner =
                new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var ex = Assert.Throws <ArgumentException>(
                () => scanner.OrchestrateSqlReport(
                    "path\\sql", "reports\\data.xml",
                    null,
                    false));

            // Assert
            Assert.That(ex.Message, Is.EqualTo("report path cannot be null or empty."));

            fileWrapper.DidNotReceive().ReadAllText(Arg.Any <string>());
            xmlWriter.DidNotReceive().WriteStartElement(Arg.Any <string>());
            fileWrapper.DidNotReceive().ReadAllText("reports\\data.xml");
            htmlReportGenerator.DidNotReceive().GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #5
0
        public void OrchestrateSqlReport_ForOutput_ParsesOutputValuesCorrectly()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            fileWrapper.ReadAllText("reports\\data.xml").Returns(SqlSamples.ReportSampleXml);
            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "RetrieveOneUseCoupon.sql",
                        "path\\sql\\theDB\\Schema55\\Stored Procedures\\",
                        SqlSamples.RetrieveOneUseCoupon
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            var scanner = new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                "reports\\scanResult.html",
                false);

            // Assert
            Assert.That(result, Is.EqualTo(true));

            xmlWriter.DidNotReceive().WriteStartElement(Arg.Any <string>());
            fileWrapper.Received(1).ReadAllText("reports\\data.xml");
            htmlReportGenerator.Received(1).GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #6
0
        public void OrchestrateSqlReport_ForNoSqlFilesInFolder_Ignores()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var nonSqlDirectory      = Substitute.For <IDirectoryInfoWrapper>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var directoryWrapper     = Substitute.For <IDirectoryWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            sqlDirectories.Add(nonSqlDirectory);

            directoryWrapper.GetDirectories(Arg.Any <string>())
            .Returns(sqlDirectories);

            var directoryFactory
                = Substitute.For <IDirectoryWrapperFactory>();

            directoryFactory.CreateDirectoryWrapper(Arg.Any <string>())
            .Returns(directoryWrapper);

            var scanner =
                new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                null,
                true);

            // Assert
            Assert.That(result, Is.EqualTo(true));

            xmlWriter.Received(1).WriteStartElement(Arg.Any <string>());
            xmlWriter.DidNotReceive().SerializeSqlReportElement(Arg.Any <StoredProcedureReport>());
            xmlWriter.Received(1).WriteEndElement();
            fileWrapper.DidNotReceive().ReadAllText("reports\\data.xml");
            htmlReportGenerator.DidNotReceive().GenerateComparisonReport(Arg.Any <string>(), Arg.Any <List <string> >());
        }
Exemple #7
0
        public void OrchestrateSqlReport_ForNamedVariables_CanParseNames()
        {
            // Setup
            var fileWrapper          = Substitute.For <IFileWrapper>();
            var xmlWriter            = Substitute.For <IXmlStreamWriterWrapper>();
            var xmlWrapper           = Substitute.For <IXmlStreamWrapperFactory>();
            var sqlDirectories       = new List <IDirectoryInfoWrapper>();
            var htmlReportGenerator  = Substitute.For <IHtmlReportGenerator>();
            var paramReportComparer  = Substitute.For <IParamReportComparer>();
            var returnReportComparer = Substitute.For <IReturnReportComparer>();

            xmlWrapper.CreateXmlWriter(Arg.Any <string>()).Returns(xmlWriter);

            var sqlFileData = new List <List <List <string> > >
            {
                new List <List <string> >
                {
                    new List <string>
                    {
                        "NameProcedure.sql",
                        "path\\sql\\theDB\\dbo\\Stored Procedures\\",
                        SqlSamples.NameProcedure
                    }
                },
                new List <List <string> >()
            };

            var directoryFactory =
                SimulateSqlFiles("path\\sql", sqlFileData, fileWrapper, sqlDirectories);

            var scanner =
                new SqlFileScanner(fileWrapper, xmlWrapper, directoryFactory, htmlReportGenerator, paramReportComparer, returnReportComparer);

            // Act
            var result = scanner.OrchestrateSqlReport(
                "path\\sql", "reports\\data.xml",
                null,
                true);

            // Assert
            Assert.That(result, Is.EqualTo(true));
        }