public void LoadMasterReport_ForValidReport_LoadsData()
        {
            // Setup
            var xmlFactory  = Substitute.For <IXmlStreamWrapperFactory>();
            var fileWrapper = Substitute.For <IFileWrapper>();

            fileWrapper.ReadAllText("c:\\output\\fakeReport1.xml")
            .Returns(SqlSamples.ReportSampleXml);

            var writer = new SqlReportWriter(xmlFactory, fileWrapper);

            // Act
            var report =
                writer.LoadMasterReport("c:\\output\\fakeReport1.xml");

            // Assert
            Assert.That(report.TimeStamp, Is.EqualTo("6/24/2019 5:44:53 PM"));
            Assert.That(report.StoredProcedures.Count, Is.EqualTo(1));
            Assert.That(report.StoredProcedures[0].Db, Is.EqualTo("Database1"));
            Assert.That(report.StoredProcedures[0].Schema, Is.EqualTo("dbo"));
            Assert.That(report.StoredProcedures[0].SpName, Is.EqualTo("LoadUserByName"));

            Assert.That(report.StoredProcedures[0].Parameters.Count, Is.EqualTo(1));
            Assert.That(report.StoredProcedures[0].ReturnValues.Count, Is.EqualTo(1));
            Assert.That(report.StoredProcedures[0].Parameters[0].IsDefaulted, Is.EqualTo(true));
            Assert.That(report.StoredProcedures[0].Parameters[0].ParameterName, Is.EqualTo("@UserName"));
            Assert.That(report.StoredProcedures[0].ReturnValues[0].ReturnValueName, Is.EqualTo("U.UserName"));
        }
        public void WriteMasterReport_ForValidReport_WritesDataToFile()
        {
            // Setup
            var xmlFactory   = Substitute.For <IXmlStreamWrapperFactory>();
            var fileWrapper  = Substitute.For <IFileWrapper>();
            var streamWriter = Substitute.For <IXmlStreamWriterWrapper>();

            xmlFactory.CreateXmlWriter("c:\\output\\fakeReport1.xml")
            .Returns(streamWriter);

            var storedProcedureReport = new StoredProcedureReport()
            {
                Db         = "MyDB",
                Schema     = "Schema1",
                SpName     = "SomeSp1",
                Parameters = new List <ParamSqlReportEntry>()
                {
                    new ParamSqlReportEntry("@Id", "INT", "N/A", false)
                },
                ReturnValues = new List <ReturnSqlReportEntry>()
                {
                    new ReturnSqlReportEntry("P.Name", 1, false, ""),
                }
            };

            var sqlReport = new SqlReport
            {
                TimeStamp        = "6/21/2019 6:45:00 PM",
                StoredProcedures = new List <StoredProcedureReport>()
                {
                    storedProcedureReport
                }
            };

            var writer = new SqlReportWriter(xmlFactory, fileWrapper);

            // Act
            writer.WriteMasterReport("c:\\output\\fakeReport1.xml",
                                     sqlReport);

            // Assert
            streamWriter.Received(1).WriteStartElement("SqlReport");
            streamWriter.Received(1).WriteElementString("TimeStamp", Arg.Any <string>());
            streamWriter.Received(1).SerializeSqlReportElement(storedProcedureReport);
            streamWriter.Received(1).WriteEndElement();
            streamWriter.Received(1).Flush();
        }