public async Task ExportsController_GetCoursesPartialTest() { AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController controller = new ExportsController(); SetupController(controller); ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); var defaultResult = await controller.Index(); Assert.IsNotNull(defaultResult, "invalid result"); Assert.IsInstanceOfType(defaultResult, typeof(ViewResult), "Unexpected result type"); ViewResult defaultViewResult = defaultResult as ViewResult; Assert.IsNotNull(defaultViewResult.Model, "Invalid model result"); Assert.IsInstanceOfType(defaultViewResult.Model, typeof(ExportsViewModel), "Unexpected model type"); ExportsViewModel modelResult = defaultViewResult.Model as ExportsViewModel; var schoolIds = modelResult.SchoolsCriteriaSection.FilterCheckboxes.Select(p => p.SchoolId).ToList(); var partialResult = await controller.GetPreviewCoursesJsonString(0); Assert.IsNotNull(partialResult, "Invalid result"); Assert.IsInstanceOfType(partialResult, typeof(JsonResult), "Unexpected result type"); JsonResult partialViewResult = partialResult as JsonResult; Assert.IsNotNull(partialViewResult.Data, "Invalid model"); Assert.IsInstanceOfType(partialViewResult.Data, typeof(ViewModels.DataPreviewPagedJsonModel), "Unexpected model type"); ViewModels.DataPreviewPagedJsonModel apiCriteriaResult = partialViewResult.Data as ViewModels.DataPreviewPagedJsonModel; Assert.IsTrue(apiCriteriaResult.TotalPages > 0, "No data found"); }
public ActionResult UpdateTemplate(ExportsViewModel model) { var schoolIds = model.SelectedSchools?.Split(',').ToList(); //var schoolYears = model.SelectedSchoolYears?.Split(',').ToList(); //var terms = model.SelectedTerms?.Split(',').ToList(); //var subjects = model.SelectedSubjects?.Split(',').ToList(); //var courses = model.SelectedCourses?.Split(',').ToList(); var teachers = model.SelectedTeachers?.Split(',').ToList(); var sections = model.SelectedSections?.Split(',').ToList(); var inputs = new FilterInputs { Schools = schoolIds, //SchoolYears = schoolYears, //Terms = terms, //Subjects = subjects, //Courses = courses, Teachers = teachers, Sections = sections }; var inputsJson = JsonConvert.SerializeObject(inputs); var template = db.Templates.First(x => x.TemplateId == model.EditTemplateId); template.Filters = inputsJson; template.OneRosterVersion = model.OneRosterVersion; db.SaveChanges(UserName, IpAddress); return(RedirectToAction("Index", "Templates")); }
public async Task ExportsController_GetSectionsPartialTest() { AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController controller = new ExportsController(); SetupController(controller); ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); var defaultResult = await controller.Index(); Assert.IsNotNull(defaultResult, "invalid result"); Assert.IsInstanceOfType(defaultResult, typeof(ViewResult), "Unexpected result type"); ViewResult defaultViewResult = defaultResult as ViewResult; Assert.IsNotNull(defaultViewResult.Model, "Invalid model result"); Assert.IsInstanceOfType(defaultViewResult.Model, typeof(ExportsViewModel), "Unexpected model type"); ExportsViewModel modelResult = defaultViewResult.Model as ExportsViewModel; var schoolIds = modelResult.SchoolsCriteriaSection.FilterCheckboxes.Select(p => p.SchoolId).ToList(); var partialResult = await controller.GetSectionsPartial(schoolIds : schoolIds, boxesAlreadyChecked : null, getMore : false); Assert.IsNotNull(partialResult, "Invalid result"); Assert.IsInstanceOfType(partialResult, typeof(PartialViewResult), "Unexpected result type"); PartialViewResult partialViewResult = partialResult as PartialViewResult; Assert.IsNotNull(partialViewResult.Model, "Invalid model"); Assert.IsInstanceOfType(partialViewResult.Model, typeof(ApiCriteriaSection), "Unexpected model type"); ApiCriteriaSection apiCriteriaResult = partialViewResult.Model as ApiCriteriaSection; Assert.IsTrue(apiCriteriaResult.FilterCheckboxes.Count > 0, "No data found"); }
public async Task ExportsController_PreviewTest() { Assert.Inconclusive("Unit test has infinite looping"); AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController exportsController = new ExportsController(); SetupController(exportsController); ExportsViewModel defaultExportsViewModel = await GetDefaultExportsViewModel(); var previewResult = await exportsController.Preview( schoolIds : defaultExportsViewModel.SelectedSchools.Split(',').ToList(), //schoolYears: null, //terms: null, //subjects: null, //courses: defaultExportsViewModel.SelectedCourses.Split(',').ToList(), teachers : null, sections : null, oneRosterVersion : null ); Assert.IsNotNull(previewResult, "Invalid result"); Assert.IsInstanceOfType(previewResult, typeof(PartialViewResult), "Invalid result type"); PartialViewResult partialViewResult = previewResult as PartialViewResult; Assert.IsNotNull(partialViewResult.Model, "Invalid model"); Assert.IsInstanceOfType(partialViewResult.Model, typeof(ExportsViewModel), "Unexpected type for model"); ExportsViewModel partialResultModel = partialViewResult.Model as ExportsViewModel; Assert.IsTrue(partialResultModel.DataPreviewSections.Count > 0, "No Data Preview Sections"); Assert.IsTrue(partialResultModel.JsonPreviews.Orgs.Count() > 0, "No Orgs for JsonPreview"); }
private async Task <ExportsViewModel> GetDefaultExportsViewModel() { ExportsViewModel result = new ExportsViewModel(); await ApiCalls.PopulateFilterSection1(result); FilterInputs filters = new FilterInputs(); var schools = await ApiCalls.GetSchools(); result.SelectedSchools = string.Join(",", schools.Select(p => p.SchoolId)); return(result); }
private FilterInputs GenerateTestFilterInputs(ExportsViewModel viewModel) { var inputs = new FilterInputs { Schools = viewModel.SchoolsCriteriaSection.FilterCheckboxes.Select(p => p.SchoolId).Distinct().ToList(), //Subjects = viewModel.SubjectsCriteriaSection.FilterCheckboxes.Select(p => p.Subject).Distinct().ToList(), //Courses = viewModel.CoursesCriteriaSection.FilterCheckboxes.Select(p => p.Course).Distinct().ToList(), Teachers = viewModel.TeachersCriteriaSection.FilterCheckboxes.Select(p => p.Teacher).Distinct().ToList() }; return(inputs); }
public async Task <ActionResult> Index(int?templateId = null) { var model = new ExportsViewModel(); await InitializeModel(model); if (templateId != null) { await InitializeModelForEdit(model, templateId.Value); } return(View(model)); }
public async Task <ActionResult> DownloadCsv(ExportsViewModel model) { var schools = model.SelectedSchools?.Split(',').ToList(); //var schoolYears = model.SelectedSchoolYears?.Split(',').ToList(); //var terms = model.SelectedTerms?.Split(',').ToList(); //var subjects = model.SelectedSubjects?.Split(',').ToList(); //var courses = model.SelectedCourses?.Split(',').ToList(); var teachers = model.SelectedTeachers?.Split(',').ToList(); var sections = model.SelectedSections?.Split(',').ToList(); var csvUtils = new CsvMethods(); //var bytes = await csvUtils.GetZipFile(schools, schoolYears, terms, subjects, courses, teachers, sections, model.OneRosterVersion); var bytes = await csvUtils.GetZipFile(schools, teachers, sections, model.OneRosterVersion); var downloadFileName = "EdFiExport_" + string.Format("{0:MM_dd_yyyy}", DateTime.Now) + ".zip"; return(File(bytes, "application/zip", downloadFileName)); }
private async Task InitializeModel(ExportsViewModel model) { await ApiCalls.PopulateFilterSection1(model); //model.SubjectsCriteriaSection = new ApiCriteriaSection //{ // SectionName = "Subjects" //}; //model.CoursesCriteriaSection = new ApiCriteriaSection //{ // SectionName = "Courses" //}; model.TeachersCriteriaSection = new ApiCriteriaSection { SectionName = "Teachers" }; model.SectionsCriteriaSection = new ApiCriteriaSection { SectionName = "Sections" }; using (var context = new ApplicationDbContext()) { model.OneRosterVersion = context.ApplicationSettings.FirstOrDefault(x => x.SettingName == ApplicationSettingsTypes.DefaultOneRosterVersion)?.SettingValue; } ViewBag.OneRosterVersions = new List <SelectListItem> { new SelectListItem { Text = OneRosterVersions.OR_1_0, Value = OneRosterVersions.OR_1_0 }, new SelectListItem { Text = OneRosterVersions.OR_1_1, Value = OneRosterVersions.OR_1_1 } }; }
public async Task ExportsController_DownloadCsvTest() { AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController controller = new ExportsController(); SetupController(controller); //ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); ExportsViewModel defaultExportViewModel = new ExportsViewModel(); var defaultResult = await controller.DownloadCsv(defaultExportViewModel); Assert.IsNotNull(defaultResult, "Invalid Result"); Assert.IsInstanceOfType(defaultResult, typeof(FileContentResult), "Is not a FileResult"); FileContentResult fileResult = defaultResult as FileContentResult; Assert.IsTrue(!string.IsNullOrWhiteSpace(fileResult.FileDownloadName), "Invalid File Name"); Assert.IsTrue(fileResult.FileContents != null && fileResult.FileContents.Count() > 0, "Invalid File Contents"); List <string> lstInvalidFileNames = new List <string>(); using (System.IO.MemoryStream memStream = new System.IO.MemoryStream(fileResult.FileContents)) { System.IO.Compression.ZipArchive zipArchive = new ZipArchive(memStream); string[] validFileNames = { "orgs.csv", "users.csv", "courses.csv", "classes.csv", "enrollments.csv", "academicSessions.csv", "demographics.csv" }; foreach (var singleEntry in zipArchive.Entries) { if (!validFileNames.Contains(singleEntry.Name)) { lstInvalidFileNames.Add(singleEntry.Name); } //For Validation rules check https://docs.google.com/spreadsheets/d/1X-gX06CaeDwDn5-Q-pqVAVahgJRtQqFOx5jj3FtIHKs/edit#gid=0 ValidateFileContents(singleEntry); } memStream.Close(); } if (lstInvalidFileNames.Count > 0) { Assert.Fail("Invalid File Names: " + String.Join(",", lstInvalidFileNames.ToArray())); } //var zipFile = System.IO.Compression.ZipFile }
public async Task ExportsController_IndexTest() { AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController controller = new ExportsController(); SetupController(controller); ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); var defaultResult = await controller.Index(); Assert.IsNotNull(defaultResult, "invalid result"); Assert.IsInstanceOfType(defaultResult, typeof(ViewResult), "Unexpected result type"); ViewResult defaultViewResult = defaultResult as ViewResult; Assert.IsNotNull(defaultViewResult.Model, "Invalid model result"); Assert.IsInstanceOfType(defaultViewResult.Model, typeof(ExportsViewModel), "Unexpected model type"); ExportsViewModel modelResult = defaultViewResult.Model as ExportsViewModel; Assert.IsTrue(modelResult.SchoolsCriteriaSection.FilterCheckboxes != null && modelResult.SchoolsCriteriaSection.FilterCheckboxes.Count > 0, "No data for Schools Criteria"); }
public async Task ExportsController_SaveTemplate() { AuthenticationHelper.HttpContext = AuthenticationHelper.CreateHttpContext(true); ExportsController controller = new ExportsController(); SetupController(controller); //ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); DateTime currentTime = DateTime.UtcNow; ExportsViewModel defaultExportViewModel = await GetDefaultExportsViewModel(); defaultExportViewModel.NewTemplateName = string.Format("[UNIT TEST TEMPLATE]-{0}", currentTime); defaultExportViewModel.NewTemplateVendorName = string.Format("[UNIT TEST VENDOR]-{0}", currentTime); var result = controller.SaveTemplate(defaultExportViewModel); Assert.IsNotNull(result, "Invalid result"); if (result is RedirectToRouteResult) { RedirectToRouteResult redirecResult = result as RedirectToRouteResult; Assert.IsTrue(redirecResult.RouteValues["action"].ToString() == "Index" && redirecResult.RouteValues["controller"].ToString() == "Templates"); } else { Assert.Fail("Unexpected result"); } var templateToDelete = AuthenticationHelper.DB.Templates.Where(p => p.VendorName == defaultExportViewModel.NewTemplateVendorName && p.TemplateName == defaultExportViewModel.NewTemplateName).FirstOrDefault(); if (templateToDelete != null) { AuthenticationHelper.DB.Templates.Remove(templateToDelete); if ( AuthenticationHelper.DB.SaveChanges() == 0) { Assert.Fail("Unable to delete template: " + defaultExportViewModel.NewTemplateName); } } }
public ActionResult SaveTemplate(ExportsViewModel model) { var schoolIds = model.SelectedSchools?.Split(',').ToList(); //var schoolYears = model.SelectedSchoolYears?.Split(',').ToList(); //var terms = model.SelectedTerms?.Split(',').ToList(); //var subjects = model.SelectedSubjects?.Split(',').ToList(); //var courses = model.SelectedCourses?.Split(',').ToList(); var teachers = model.SelectedTeachers?.Split(',').ToList(); var sections = model.SelectedSections?.Split(',').ToList(); var inputs = new FilterInputs { Schools = schoolIds, //SchoolYears = schoolYears, //Terms = terms, //Subjects = subjects, //Courses = courses, Teachers = teachers, Sections = sections }; var inputsJson = JsonConvert.SerializeObject(inputs); var template = new Template { TemplateName = model.NewTemplateName, VendorName = model.NewTemplateVendorName, OneRosterVersion = model.OneRosterVersion, Filters = inputsJson }; db.Templates.Add(template); db.SaveChanges(UserName, IpAddress); return(RedirectToAction("Index", "Templates")); }
public async Task <ActionResult> Preview(List <string> schoolIds, //List<string> schoolYears, //List<string> terms, //List<string> subjects, //List<string> courses, List <string> teachers, List <string> sections, string oneRosterVersion) { var model = new ExportsViewModel(); var inputs = new FilterInputs { Schools = schoolIds, //SchoolYears = schoolYears, //Terms = terms, //Subjects = subjects, //Courses = courses, Teachers = teachers, Sections = sections }; model.JsonPreviews = await ApiCalls.GetJsonPreviews(inputs, oneRosterVersion); IEnumerable <string> orgColumnNames; IEnumerable <string> usersColumnNames; IEnumerable <string> coursesColumnNames; IEnumerable <string> classesColumnNames; IEnumerable <string> enrollmentsColumnNames; IEnumerable <string> academicsessionsColumnNames; if (oneRosterVersion == OneRosterVersions.OR_1_0) { orgColumnNames = typeof(CsvOrgs).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); usersColumnNames = typeof(CsvUsers).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); coursesColumnNames = typeof(CsvCourses).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); classesColumnNames = typeof(CsvClasses).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); enrollmentsColumnNames = typeof(CsvEnrollments).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); academicsessionsColumnNames = typeof(CsvAcademicSessions).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR10IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); } else { orgColumnNames = typeof(CsvOrgs).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); usersColumnNames = typeof(CsvUsers).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); coursesColumnNames = typeof(CsvCourses).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); classesColumnNames = typeof(CsvClasses).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); enrollmentsColumnNames = typeof(CsvEnrollments).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); academicsessionsColumnNames = typeof(CsvAcademicSessions).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); } model.DataPreviewSections = new List <DataPreviewSection> { new DataPreviewSection { SectionName = "orgs", ColumnNames = orgColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.OrgsTotalPages }, new DataPreviewSection { SectionName = "users", ColumnNames = usersColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.UsersTotalPages }, new DataPreviewSection { SectionName = "courses", ColumnNames = coursesColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.CoursesTotalPages }, new DataPreviewSection { SectionName = "classes", ColumnNames = classesColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.ClassesTotalPages }, new DataPreviewSection { SectionName = "enrollments", ColumnNames = enrollmentsColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.EnrollmentsTotalPages }, new DataPreviewSection { SectionName = "academicsessions", ColumnNames = academicsessionsColumnNames, CurrentPage = 1, TotalPages = model.JsonPreviews.AcademicSessionsTotalPages } }; if (oneRosterVersion == OneRosterVersions.OR_1_1) { var manifestColumnNames = typeof(CsvManifest).GetProperties().Where(x => Attribute.IsDefined(x, typeof(OR11IncludeFieldAttribute))).Select(x => x.Name.Replace("__", ".")); model.DataPreviewSections.Add(new DataPreviewSection { SectionName = "manifest", ColumnNames = manifestColumnNames }); } return(PartialView("_DataPreview", model)); }
private async Task InitializeModelForEdit(ExportsViewModel model, int templateId) { var template = db.Templates.First(x => x.TemplateId == templateId); model.EditTemplateId = templateId; model.EditTemplateName = template.TemplateName; model.OneRosterVersion = template.OneRosterVersion; var filters = JsonConvert.DeserializeObject <FilterInputs>(template.Filters); CheckSelectedBoxes(model.SchoolsCriteriaSection.FilterCheckboxes, filters.Schools); model.SchoolsCriteriaSection.IsExpanded = filters.Schools != null; if (filters.Teachers != null) { var teachersSection = await ApiCalls.GetTeachers(filters.Schools, false); var alreadyCheckedTeachers = await ApiCalls.GetSpecificTeachers(filters.Teachers); var duplicateTeachers = teachersSection.AllCheckboxes.Where(x => filters.Teachers.Contains(x.Id)).ToList(); foreach (var box in duplicateTeachers) { teachersSection.AllCheckboxes.Remove(box); } var duplicateTeachers2 = teachersSection.FilterCheckboxes.Where(x => filters.Teachers.Contains(x.Id)).ToList(); foreach (var box in duplicateTeachers2) { teachersSection.FilterCheckboxes.Remove(box); } teachersSection.AllCheckboxes.AddRange(alreadyCheckedTeachers); teachersSection.FilterCheckboxes.AddRange(alreadyCheckedTeachers); teachersSection.AllCheckboxes = teachersSection.AllCheckboxes.OrderByDescending(x => x.Selected).ToList(); teachersSection.FilterCheckboxes = teachersSection.FilterCheckboxes.OrderByDescending(x => x.Selected).ToList(); teachersSection.IsExpanded = alreadyCheckedTeachers != null && alreadyCheckedTeachers.Count() > 0; model.TeachersCriteriaSection = teachersSection; } if (filters.Schools != null) { var sectionsSection = await ApiCalls.GetSections(filters.Schools, false); if (filters.Sections != null) { var alreadyCheckedSections = await ApiCalls.GetSpecificSections(filters.Sections); var duplicateSections = sectionsSection.AllCheckboxes.Where(x => filters.Sections.Contains(x.Id)).ToList(); foreach (var box in duplicateSections) { sectionsSection.AllCheckboxes.Remove(box); } var duplicateSections2 = sectionsSection.FilterCheckboxes.Where(x => filters.Sections.Contains(x.Id)).ToList(); foreach (var box in duplicateSections2) { sectionsSection.FilterCheckboxes.Remove(box); } sectionsSection.AllCheckboxes.AddRange(alreadyCheckedSections); sectionsSection.FilterCheckboxes.AddRange(alreadyCheckedSections); sectionsSection.AllCheckboxes = sectionsSection.AllCheckboxes.OrderByDescending(x => x.Selected).ToList(); sectionsSection.FilterCheckboxes = sectionsSection.FilterCheckboxes.OrderByDescending(x => x.Selected).ToList(); sectionsSection.IsExpanded = alreadyCheckedSections != null && alreadyCheckedSections.Count() > 0; model.SectionsCriteriaSection = sectionsSection; } } }