public void Given_DelimiterOption_When_FileResultStreamReturned_Then_ContentsIsDelimitedBySpecifiedDelimiter(string expectedDelimiter)
        {
            //ARRANGE
            var peopleWithPrivateData = PersonWithPrivateData.GetFakePeople().ToList();

            //ACT
            var result = peopleWithPrivateData.ToFileStreamResult(options =>
            {
                options.Delimiter = expectedDelimiter;
                options.UsePropertyNamesAsHeaders = false;
            });

            //ASSERT
            var actualBytes = new Byte[result.FileStream.Length];

            result.FileStream.Read(actualBytes, 0, actualBytes.Length);

            var actualLines = Encoding.UTF8.GetString(actualBytes).Split("\r\n");

            Assert.AreEqual(peopleWithPrivateData.Count, actualLines.Length);

            for (var i = 0; i < actualLines.Length; i++)
            {
                var actualLineData = actualLines[i].Split(expectedDelimiter);
                Assert.AreEqual(3, actualLineData.Length);
            }
        }
        public void Given_ContentTypeOption_When_FileResultStreamReturned_Then_ResultStreamsContentTypeIsSet()
        {
            //ARRANGE
            var peopleWithPrivateData = PersonWithPrivateData.GetFakePeople().ToList();

            //ACT
            var result = peopleWithPrivateData.ToFileStreamResult(options => options.ContentType = "application/ms-excel");

            //ASSERT
            Assert.AreEqual("application/ms-excel", result.ContentType);
        }
        public void Given_FileDownloadNameOption_When_FileResultStreamReturned_Then_ResultStreamsFileDownloadNameIsSet()
        {
            //ARRANGE
            var peopleWithPrivateData = PersonWithPrivateData.GetFakePeople().ToList();

            //ACT
            var result = peopleWithPrivateData.ToFileStreamResult(options => options.FileDownloadName = "Test.csv");

            //ASSERT
            Assert.AreEqual("Test.csv", result.FileDownloadName);
        }
        public void Given_EndOfLineOption_When_FileResultStreamReturned_Then_EndOfLineIsDelimitedBySpecifiedEndOfLineString(string expectedEndOfLine)
        {
            //ARRANGE
            var peopleWithPrivateData = PersonWithPrivateData.GetFakePeople().ToList();

            //ACT
            var result = peopleWithPrivateData.ToFileStreamResult(options =>
            {
                options.EndOfLine = expectedEndOfLine;
                options.UsePropertyNamesAsHeaders = false;
            });

            //ASSERT
            var actualBytes = new Byte[result.FileStream.Length];

            result.FileStream.Read(actualBytes, 0, actualBytes.Length);

            var actualLines = Encoding.UTF8.GetString(actualBytes).Split(expectedEndOfLine);

            Assert.AreEqual(peopleWithPrivateData.Count, actualLines.Length);
        }
        public void Given_ClassWithNonPublicMembers_When_OutputToFileStream_Then_OnlyPublicPropertiesAreOutput()
        {
            //ARRANGE
            var peopleWithPrivateData = PersonWithPrivateData.GetFakePeople().ToList();

            //ACT
            var result = peopleWithPrivateData.ToFileStreamResult(options => options.UsePropertyNamesAsHeaders = false);

            //ASSERT
            var actualBytes = new Byte[result.FileStream.Length];

            result.FileStream.Read(actualBytes, 0, actualBytes.Length);

            var actualLines = Encoding.UTF8.GetString(actualBytes).Split("\r\n");

            for (var i = 0; i < actualLines.Length; i++)
            {
                var actualLineData = actualLines[i].Split(",");
                Assert.AreEqual(3, actualLineData.Length);
                Assert.IsTrue(actualLineData.Contains(peopleWithPrivateData[i].FirstName));
                Assert.IsTrue(actualLineData.Contains(peopleWithPrivateData[i].Surname));
                Assert.IsTrue(actualLineData.Contains(peopleWithPrivateData[i].Height.ToString()));
            }
        }