private static IReadOnlyList<string> InvokePopulateColumnValues(Application app, IEnumerable<KeyValuePair<string, List<string>>> headers, out OrderedDictionary subRecordSet)
            {
                var csvExporter = new ApplicationListCsvExporter();
                var privateObject = new PrivateObject(csvExporter);

                var args = new object[] { app, headers, null };
                var result = (IReadOnlyList<string>)privateObject.Invoke("PopulateColumnValues", args);

                subRecordSet = (OrderedDictionary)args[2];

                return result;
            }
            public void NullSourceParameter()
            {
                var csvExporter = new ApplicationListCsvExporter();
                var headers = csvExporter.GenerateHeaders(null);

                Assert.IsNull(headers);
            }
 private static string InvokeEscapeForCsv(string dirty)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { dirty };
     return (string)privateObject.Invoke("EscapeForCsv", args);
 }
            public void Applications_NoAppData()
            {
                string jsonString = AssemblyResourceReader.ReadAsString("Test_Data.Applications_NoAppData.json");
                var apps = JsonConvert.DeserializeObject<List<Application>>(jsonString);

                var csvExporter = new ApplicationListCsvExporter();
                var headers = csvExporter.GenerateHeaders(apps);

                Assert.IsNotNull(headers);
                Assert.AreNotEqual(0, headers.Count);
            }
            public void MultiAppsWithOneTypeOfRepeater()
            {
                string jsonString = AssemblyResourceReader.ReadAsString("Test_Data.Applications_Expense.json");
                var apps = JsonConvert.DeserializeObject<List<Application>>(jsonString);

                var csvExporter = new ApplicationListCsvExporter();
                var headers = csvExporter.GenerateHeaders(apps);

                Assert.IsNotNull(headers);
                Assert.AreNotEqual(0, headers.Count);

                var expensesHeader = headers.FirstOrDefault(h => h.Key == "Expenses");
                Assert.IsNotNull(expensesHeader);
                Assert.IsNotNull(expensesHeader.Value);
                Assert.IsInstanceOfType(expensesHeader.Value, typeof(List<string>));
                Assert.AreNotEqual(0, expensesHeader.Value.Count);
            }
 private static void InvokeGenerateApplicationRowsCsv(IReadOnlyList<string> recordBase, OrderedDictionary subRecordSets, StringBuilder sb)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { recordBase, subRecordSets, sb };
     var types = new[] { typeof(IReadOnlyList<string>), typeof(OrderedDictionary), typeof(StringBuilder) };
     privateObject.Invoke("GenerateApplicationRowsCsv", types, args);
 }
 private static void InvokeGenerateHeaderCsv(IReadOnlyList<KeyValuePair<string, List<string>>> headers, StringBuilder sb)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { headers, sb };
     var types = new[] { typeof(IReadOnlyList<KeyValuePair<string, List<string>>>), typeof(StringBuilder) };
     privateObject.Invoke("GenerateHeaderCsv", types, args);
 }
 private static void InvokeGenerateApplicationCsv(Application app, IEnumerable<KeyValuePair<string, List<string>>> headers, StringBuilder sb)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { app, headers, sb };
     var types = new[] { typeof(Application), typeof(IEnumerable<KeyValuePair<string, List<string>>>), typeof(StringBuilder) };
     privateObject.Invoke("GenerateApplicationCsv", types, args);
 }
            private static bool InvokeTryGetAppProperty(string key, Application app, out object column)
            {
                Func<string, User> getUserFn = userId =>
                    {
                        if (userId == "creator")
                        {
                            return new User
                                   {
                                       DisplayName = "The Creator",
                                       Id = "creator"
                                   };
                        }

                        if (userId == "modifier")
                        {
                            return new User
                                   {
                                       DisplayName = "The Modifier",
                                       Id = "modifier"
                                   };
                        }

                        return null;
                    };

                var csvExporter = new ApplicationListCsvExporter(getUserFn);
                var privateObject = new PrivateObject(csvExporter);

                var args = new object[] { key, app, null };
                var result = (bool)privateObject.Invoke("TryGetAppProperty", args);

                column = args[2];

                return result;
            }
 private static void InvokePrefixEmptyColumns(int emptyColumnPrefix, StringBuilder sb)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { emptyColumnPrefix, sb };
     var types = new[] { typeof(int), typeof(StringBuilder) };
     privateObject.Invoke("PrefixEmptyColumns", types, args);
 }
 private static List<string> InvokePopulateNestedRecordColumnValues(Dictionary<string, object> record, List<string> headers)
 {
     var csvExporter = new ApplicationListCsvExporter();
     var privateObject = new PrivateObject(csvExporter);
     var args = new object[] { record, headers };
     return (List<string>)privateObject.Invoke("PopulateNestedRecordColumnValues", args);
 }
        /// <summary>
        /// Downloads a CSV document for an Application Search.
        /// </summary>
        /// <param name="context">The request context.</param>
        /// <param name="sessionData">The <see cref="SessionData"/> containing the application id.</param>
        /// <param name="formId">The form id.</param>
        /// <param name="filter">The search filter as JSON.</param>
        /// <param name="fileName">The file name.</param>
        /// <param name="applicationManager"><see cref="ApplicationManager"/> instance for performing application search.</param>
        /// <param name="userManager">The user manager.</param>
        private void Download(HttpContext context, SessionData sessionData, string formId, string filter, string fileName, ApplicationManager applicationManager, UserManager userManager)
        {
            var filterObj = JsonConvert.DeserializeObject<ApplicationSearchFilter>(filter);
            var apps = applicationManager.FindApplications(formId, sessionData.UserId, filterObj);

            var sb = new StringBuilder();

            ApplicationListCsvExporter csvExporter = new ApplicationListCsvExporter(userManager.GetUserById);
            csvExporter.GenerateCsv(apps, sb);

            var csvBytes = Encoding.UTF8.GetBytes(sb.ToString());

            var response = HttpContext.Current.Response;
            response.BuildBinaryFileResponse(string.Format("{0}.csv", fileName), csvBytes, Encoding.UTF8, InternetMediaType.ApplicationOctetStream);
            response.Flush();
            context.ApplicationInstance.CompleteRequest();
        }