Exemple #1
0
        public void CsvReportWriterTest_CheckFileContents()
        {
            const string delimiter = ",";

            // set up the data reader to return columns
            ColumnMetaData[] headers =
            {
                new ColumnMetaData("Name",    "varchar", 100),
                new ColumnMetaData("Surname", "varchar", 100),
                new ColumnMetaData("Age",     "varchar",  32),
            };
            object[][] data =
            {
                new object[] { "Matt", "Salmon", 41 },
                new object[] { "John", "Doe",    61 },
                new object[] { "Jane", "Smith",  25 }
            };

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

            reader.FieldCount.Returns(3);
            reader.Read().Returns(true, true, true, false);
            reader.GetValue(0).Returns(data[0][0], data[1][0], data[2][0]);
            reader.GetValue(1).Returns(data[0][1], data[1][1], data[2][1]);
            reader.GetValue(2).Returns(data[0][2], data[1][2], data[2][2]);
            reader.GetFieldType(Arg.Any <int>()).Returns(typeof(String));

            // set up the text formatter to return the value supplied
            _textFormatter.FormatText(Arg.Any <object>(), Arg.Any <Type>()).Returns((c) => { return(c.ArgAt <object>(0).ToString()); });

            // execute
            _reportWriter.Initialise(_filePath, delimiter);
            _reportWriter.WriteHeader(headers.Select(x => x.Name));
            foreach (object[] line in data)
            {
                _reportWriter.WriteLine(reader, headers);
            }
            _reportWriter.Dispose();

            // assert
            Assert.IsTrue(File.Exists(_filePath));
            List <string> lines = File.ReadLines(_filePath).ToList();

            // check that the header is correct
            string expectedHeader = String.Join(delimiter, headers.Select(x => x.Name));

            Assert.AreEqual(expectedHeader, lines[0]);

            // make sure each of the lines is written correctly
            for (int i = 0; i < data.Length; i++)
            {
                object[] line         = data[i];
                string   expectedLine = String.Join(delimiter, data[i]);
                string   actualLine   = lines[i + 1];
                Assert.AreEqual(expectedLine, actualLine);
            }

            // make sure all the data items are formatted
            foreach (object[] line in data)
            {
                foreach (object item in line)
                {
                    _textFormatter.Received(1).FormatText(item, typeof(String));
                }
            }
        }