public IActionResult CompareEmployers(string command, int year = 0) { if (year == 0) { year = ReportingYearsHelper.GetTheMostRecentCompletedReportingYear(); } string args = command.AfterFirst(":"); command = command.BeforeFirst(":"); //Clear the default back url of the employer hub pages EmployerBackUrl = null; ReportBackUrl = null; switch (command.ToLower()) { case "employer": EmployerBackUrl = RequestUrl.PathAndQuery; return(RedirectToAction(nameof(ViewingController.Employer), "Viewing", new { employerIdentifier = args })); case "report": ReportBackUrl = RequestUrl.PathAndQuery; return(RedirectToAction(nameof(ViewingController.Report), "Viewing", new { employerIdentifier = args, year })); } return(new HttpBadRequestResult($"Invalid command '{command}'")); }
public IActionResult DownloadCompareData(int year = 0) { if (year == 0) { year = ReportingYearsHelper.GetTheMostRecentCompletedReportingYear(); } var result = CompareEmployers(year) as ViewResult; var viewModel = result.Model as CompareViewModel; IEnumerable <CompareReportModel> data = viewModel?.CompareReports; //Ensure we some data if (data == null || !data.Any()) { return(new HttpNotFoundResult($"There is no employer data for year {year}")); } DataTable model = OrganisationBusinessLogic.GetCompareDatatable(data); //Setup the HTTP response var contentDisposition = new ContentDisposition { FileName = $"Compared GPG Data {ReportingYearsHelper.FormatYearAsReportingPeriod(year)}.csv", Inline = false }; HttpContext.SetResponseHeader("Content-Disposition", contentDisposition.ToString()); /* No Longer required as AspNetCore has response buffering on by default * Response.BufferOutput = true; */ //Track the download WebTracker.TrackPageView(this, contentDisposition.FileName); //Return the data return(Content(model.ToCSV(), "text/csv")); }
public void CompareController_CompareEmployers_NoYear_DefaultSortTheMostRecentCompletedReportingYearAsync() { // Arrange var routeData = new RouteData(); routeData.Values.Add("Action", nameof(CompareController.CompareEmployers)); routeData.Values.Add("Controller", "Viewing"); var controller = UiTestHelper.GetController <CompareController>(0, routeData); //Setup the mock url helper var testUri = new Uri("https://localhost/Viewing/compare-employers"); controller.AddMockUriHelper(testUri.ToString(), "CompareEmployers"); var reportingYear = ReportingYearsHelper.GetTheMostRecentCompletedReportingYear(); var mockOrg = OrganisationHelper.GetOrganisationInScope("MockedOrg", reportingYear); DateTime accountingDateTime = mockOrg.SectorType.GetAccountingStartDate(reportingYear); //create the comparison data var expectedModel = ViewingServiceHelper.GetCompareTestData(5).ToList(); //Setup the mocked business logic var mockOrgBL = new Mock <IOrganisationBusinessLogic>(); mockOrgBL .Setup(x => x.GetCompareData(It.IsAny <IEnumerable <string> >(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <bool>())) .Returns(expectedModel); controller.OrganisationBusinessLogic = mockOrgBL.Object; // Act ViewResult result = controller.CompareEmployers(0) as ViewResult; // Assert Assert.NotNull(result); Assert.AreEqual(result.ViewName, "CompareEmployers"); Assert.AreEqual(controller.ViewBag.ReturnUrl, testUri.PathAndQuery); Assert.AreEqual(controller.CompareViewService.SortColumn, null); Assert.AreEqual(controller.CompareViewService.SortAscending, true); var lastComparedEmployerList = controller.CompareViewService.ComparedEmployers.Value.ToList().ToSortedSet().ToDelimitedString(); controller.CompareViewService.LastComparedEmployerList.Compare(lastComparedEmployerList); var actualModel = result.Model as CompareViewModel; Assert.NotNull(actualModel); Assert.NotNull(actualModel.CompareReports); Assert.IsTrue(actualModel.CompareReports.All(obj => actualModel.Year == reportingYear)); actualModel.CompareReports.Compare(expectedModel); }
public void CompareController_DownloadCompareData_NoYear_DefaultSortTheMostRecentCompletedReportingYearAsync() { // Arrange var routeData = new RouteData(); routeData.Values.Add("Action", nameof(CompareController.DownloadCompareData)); routeData.Values.Add("Controller", "Viewing"); var controller = UiTestHelper.GetController <CompareController>(0, routeData); var reportingYear = ReportingYearsHelper.GetTheMostRecentCompletedReportingYear(); var mockOrg = OrganisationHelper.GetOrganisationInScope("MockedOrg", reportingYear); DateTime accountingDateTime = mockOrg.SectorType.GetAccountingStartDate(reportingYear); //create the comparison data var expectedModel = ViewingServiceHelper.GetCompareTestData(5).ToList(); //Setup the mocked business logic var mockOrgBL = new Mock <IOrganisationBusinessLogic>(); mockOrgBL .Setup(x => x.GetCompareData(It.IsAny <IEnumerable <string> >(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <bool>())) .Returns(expectedModel); var expectedData = expectedModel.ToDataTable(); mockOrgBL .Setup(x => x.GetCompareDatatable(It.IsAny <IEnumerable <CompareReportModel> >())) .Returns(expectedData); controller.OrganisationBusinessLogic = mockOrgBL.Object; // Act var result = controller.DownloadCompareData() as ContentResult; // Assert //Test the google analytics tracker was executed once on the controller var filename = $"Compared GPG Data {ReportingYearsHelper.FormatYearAsReportingPeriod(reportingYear)}.csv"; controller.WebTracker.GetMockFromObject().Verify(mock => mock.TrackPageView(It.IsAny <Controller>(), filename, null), Times.Once()); Assert.NotNull(result); Assert.AreEqual(result.ContentType, "text/csv"); Assert.AreEqual(controller.Response.Headers["Content-Disposition"], $"attachment; filename=\"{filename}\""); Assert.AreEqual(controller.CompareViewService.SortColumn, null); Assert.AreEqual(controller.CompareViewService.SortAscending, true); Assert.NotNull(result.Content); Assert.AreEqual(result.Content, expectedData.ToCSV()); }
public IActionResult CompareEmployers(int year, string employers = null) { if (year == 0) { CompareViewService.SortColumn = null; CompareViewService.SortAscending = true; year = ReportingYearsHelper.GetTheMostRecentCompletedReportingYear(); } //Load employers from querystring (via shared email) if (!string.IsNullOrWhiteSpace(employers)) { string[] comparedEmployers = employers.SplitI("-"); if (comparedEmployers.Any()) { CompareViewService.ClearBasket(); CompareViewService.AddRangeToBasket(comparedEmployers); CompareViewService.SortAscending = true; CompareViewService.SortColumn = null; return(RedirectToAction("CompareEmployers", new { year })); } } //If the session is lost then load employers from the cookie else if (CompareViewService.BasketItemCount == 0) { CompareViewService.LoadComparedEmployersFromCookie(); } ViewBag.ReturnUrl = Url.Action("CompareEmployers", new { year }); //Clear the default back url of the employer hub pages EmployerBackUrl = null; ReportBackUrl = null; //Get the compare basket organisations IEnumerable <CompareReportModel> compareReports = OrganisationBusinessLogic.GetCompareData( CompareViewService.ComparedEmployers.Value.AsEnumerable(), year, CompareViewService.SortColumn, CompareViewService.SortAscending); //Track the compared employers string lastComparedEmployerList = CompareViewService.ComparedEmployers.Value.ToList().ToSortedSet().ToDelimitedString(); if (CompareViewService.LastComparedEmployerList != lastComparedEmployerList && IsAction("CompareEmployers")) { SortedSet <string> employerIds = compareReports.Select(r => r.EncOrganisationId).ToSortedSet(); WebTracker.TrackPageView( this, $"compare-employers: {employerIds.ToDelimitedString()}", $"{ViewBag.ReturnUrl}?{employerIds.ToEncapsulatedString("e=", null, "&", "&", false)}"); foreach (CompareReportModel employer in compareReports) { WebTracker.TrackPageView( this, $"{employer.EncOrganisationId}: {employer.OrganisationName}", $"{ViewBag.ReturnUrl}?{employer.EncOrganisationId}={employer.OrganisationName}"); } CompareViewService.LastComparedEmployerList = lastComparedEmployerList; } //Generate the shared links string shareEmailUrl = Url.Action( nameof(CompareEmployers), "Compare", new { year, employers = CompareViewService.ComparedEmployers.Value.ToList().ToDelimitedString("-") }, Request.Scheme); ViewBag.BasketViewModel = new CompareBasketViewModel { CanAddEmployers = true, CanViewCompare = false, CanClearCompare = true }; return(View( "CompareEmployers", new CompareViewModel { LastSearchUrl = SearchViewService.GetLastSearchUrl(), CompareReports = compareReports, CompareBasketCount = CompareViewService.BasketItemCount, ShareEmailUrl = CompareViewService.BasketItemCount <= CompareViewService.MaxCompareBasketShareCount ? shareEmailUrl : null, Year = year, SortAscending = CompareViewService.SortAscending, SortColumn = CompareViewService.SortColumn })); }