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"));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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
            }));
        }