public void ShouldCreateReportIfProcessingSucceeds()
        {
            var sut = CreateSut();

            _builder.CreateReport(Arg.Any <FileReportModel>()).Returns("Report Data");

            sut.Process(new List <Story>());

            _writer.Received().OutputReport("Report Data", Arg.Any <string>(), Arg.Any <string>());
        }
        public void ExecuteJob_OutputFormatSpecified_CommandExecutedWithWriter()
        {
            // setup
            string            connString  = Guid.NewGuid().ToString();
            ConnectionSetting connSetting = new ConnectionSetting(Guid.NewGuid().ToString(), connString);
            ReportJob         job         = new ReportJob();

            job.Command        = Guid.NewGuid().ToString();
            job.OutputFormat   = Guid.NewGuid().ToString();
            job.OutputFileName = Guid.NewGuid().ToString();
            job.OutputFilePath = Environment.CurrentDirectory;
            job.Delimiter      = Guid.NewGuid().ToString();

            IDbConnection dbConn = Substitute.For <IDbConnection>();

            _dbConnectionFactory.CreateConnection(connString, true).Returns(dbConn);

            IDbCommand cmd = Substitute.For <IDbCommand>();

            dbConn.CreateCommand().Returns(cmd);

            IReportWriter reportWriter = Substitute.For <IReportWriter>();

            _reportWriterFactory.GetReportWriter(job.OutputFormat).Returns(reportWriter);

            IDataReader reader = Substitute.For <IDataReader>();

            reader.GetSchemaTable().Returns(new DataTable());
            cmd.ExecuteReader().Returns(reader);

            // execute
            ReportJobResult result = _reportExecutor.ExecuteJob(connSetting, job);

            // assert
            cmd.DidNotReceive().ExecuteNonQuery();
            cmd.Received(1).ExecuteReader();

            reportWriter.Received(1).Initialise(Arg.Any <String>(), job.Delimiter);
            reportWriter.Received(1).WriteHeader(Arg.Any <IEnumerable <String> >());
        }