Esempio n. 1
0
        public void FilterByStatus_OriginalAndUpdatedStatusSpecified_ShouldReturnMatchingStatusesOnly()
        {
            VerifyTestPreconditionsOrThrow();

            var dataContext = this.GetDataContext();

            var settings = new ConnectionStatusChangeReportSettings();

            ConnectionStatusChangeReportBuilder reportBuilder;
            ConnectionStatusChangeReportData    report;

            var memberConnectionStatusId   = GetStatusValueIdOrThrow("Member");
            var attendeeConnectionStatusId = GetStatusValueIdOrThrow("Attendee");
            var visitorConnectionStatusId  = GetStatusValueIdOrThrow("Visitor");
            var prospectConnectionStatusId = GetStatusValueIdOrThrow("Prospect");

            // Get an unfiltered report.
            // The unfiltered data should contain Original Status=[Attendee|Prospect].

            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.OldConnectionStatusId == attendeeConnectionStatusId), "Status expected but not found. [Status=Attendee]");
            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.OldConnectionStatusId == prospectConnectionStatusId), "Status expected but not found. [Status=Prospect]");

            // Get a filtered report: Original Status=Attendee, UpdatedStatus=Member.
            // The filtered data should only contain Original Status=Attendee.
            settings.FromConnectionStatusId = attendeeConnectionStatusId;
            settings.ToConnectionStatusId   = memberConnectionStatusId;

            reportBuilder = new ConnectionStatusChangeReportBuilder(dataContext, settings);

            report = reportBuilder.CreateReport();

            Assert.That.IsTrue(!report.ChangeEvents.Any(x => x.OldConnectionStatusId != attendeeConnectionStatusId), "Status found but not expected.");
        }
Esempio n. 2
0
        public void FilterByStatus_UpdatedStatusUnspecified_ShouldReturnAllStatuses()
        {
            VerifyTestPreconditionsOrThrow();

            var dataContext = GetDataContext();

            var settings = new ConnectionStatusChangeReportSettings();

            ConnectionStatusChangeReportBuilder reportBuilder;
            ConnectionStatusChangeReportData    report;

            var attendeeStatusId = GetStatusValueIdOrThrow("Attendee");
            var memberStatusId   = GetStatusValueIdOrThrow("Member");

            // Get an unfiltered report.
            // The unfiltered data should contain at least one record that is a transition from Visitor.
            reportBuilder = new ConnectionStatusChangeReportBuilder(dataContext, settings);

            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.OldConnectionStatusId == attendeeStatusId), "Status expected but not found. [Status=Attendee]");

            // Get a filtered report: Original Status=Attendee, UpdatedStatus=Member.
            settings.ToConnectionStatusId = GetStatusValueIdOrThrow("Member");

            report = reportBuilder.CreateReport();

            // The report should include events for new people, represented by a change from (null) --> (some status).
            Assert.That.IsTrue(report.ChangeEvents.Any(x => string.IsNullOrEmpty(x.OldConnectionStatusName)), "Status expected but not found. [OldStatus=(empty)]");
        }
Esempio n. 3
0
        /// <summary>
        /// Constructs the web page.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="settings"></param>
        protected void BuildPage(RockContext context, ConnectionStatusChangeReportSettings settings)
        {
            _showResults = PageParameter(PageParameterKey.ShowResults).AsBoolean(false);

            // Apply settings to page controls.
            cpCampus.SetValue(settings.CampusId);

            drpDateRange.DelimitedValues = settings.ReportPeriod.ToDelimitedString("|");

            InitializeConnectionTypesList(ddlFromConnectionStatus);
            InitializeConnectionTypesList(ddlToConnectionStatus);

            ddlFromConnectionStatus.SelectedValue = settings.FromConnectionStatusId.ToStringSafe();
            ddlToConnectionStatus.SelectedValue   = settings.ToConnectionStatusId.ToStringSafe();

            if (_showResults &&
                _report == null)
            {
                // If this is an initial page load, run the Report.
                // Otherwise, it will be loaded from ViewState.
                this.LoadReport();
            }

            pnlResults.Visible = _showResults;

            BindReport();
        }
Esempio n. 4
0
        /// <summary>
        /// Returns a report that contains all of the available test data for comparison results.
        /// </summary>
        /// <returns></returns>
        private static void CreateBaselineReport(RockContext dataContext)
        {
            var settings = new ConnectionStatusChangeReportSettings();

            ConnectionStatusChangeReportBuilder reportBuilder;

            // Get an unfiltered report.
            reportBuilder = new ConnectionStatusChangeReportBuilder(dataContext, settings);

            _BaselineReport = reportBuilder.CreateReport();
        }
Esempio n. 5
0
        /// <summary>
        /// Populate a report settings data object from the page control values.
        /// </summary>
        /// <returns></returns>
        private ConnectionStatusChangeReportSettings GetReportSettingsFromPage()
        {
            var settings = new ConnectionStatusChangeReportSettings();

            settings.CampusId = cpCampus.SelectedValue.AsInteger();

            // Parse the date range settings string supplied by the DateRange control .
            settings.ReportPeriod.FromDelimitedString(drpDateRange.DelimitedValues, "|");

            settings.FromConnectionStatusId = ddlFromConnectionStatus.SelectedValueAsInt();
            settings.ToConnectionStatusId   = ddlToConnectionStatus.SelectedValueAsInt();

            return(settings);
        }
Esempio n. 6
0
        /// <summary>
        /// Returns a report that contains all of the available test data for comparison results.
        /// </summary>
        /// <returns></returns>
        private ConnectionStatusChangeReportData GetBaselineReport()
        {
            if (_BaselineReport == null)
            {
                var dataContext = new RockContext();

                var settings = new ConnectionStatusChangeReportSettings();

                ConnectionStatusChangeReportBuilder reportBuilder;

                // Get an unfiltered report.
                reportBuilder = new ConnectionStatusChangeReportBuilder(dataContext, settings);

                _BaselineReport = reportBuilder.CreateReport();
            }

            return(_BaselineReport);
        }
Esempio n. 7
0
        /// <summary>
        /// Constructs the web page.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="settings"></param>
        protected void BuildPage(RockContext context, ConnectionStatusChangeReportSettings settings)
        {
            _showResults = PageParameter(PageParameterKey.ShowResults).AsBoolean(false);

            // Apply settings to page controls.
            cpCampus.SetValue(settings.CampusId);

            drpDateRange.DelimitedValues = settings.ReportPeriod.ToDelimitedString("|");

            InitializeConnectionTypesList(ddlFromConnectionStatus);
            InitializeConnectionTypesList(ddlToConnectionStatus);

            ddlFromConnectionStatus.SelectedValue = settings.FromConnectionStatusId.ToStringSafe();
            ddlToConnectionStatus.SelectedValue   = settings.ToConnectionStatusId.ToStringSafe();

            if (_showResults &&
                _report == null)
            {
                // If this is an initial page load, run the Report.
                // Otherwise, it will be loaded from ViewState.
                this.LoadReport();

                var eventCount = _changeEvents.Count();

                if (_changeEvents != null &&
                    eventCount > _MaxRecords)
                {
                    _changeEvents.Clear();

                    nbNotice.NotificationBoxType = NotificationBoxType.Danger;
                    nbNotice.Title = "Report Failed.";
                    nbNotice.Text  = string.Format("The result set is too large ({0:#,###} records). Retry the report with a more restrictive filter.", eventCount);

                    nbNotice.Visible = true;

                    _showResults = false;
                }
            }

            pnlResults.Visible = _showResults;

            BindReport();
        }
Esempio n. 8
0
        public void FilterByCampus_MatchesExist_ShouldReturnPeopleInMatchedCampusOnly()
        {
            VerifyTestPreconditionsOrThrow();

            var dataContext = GetDataContext();

            // Get an unfiltered report and verify that it contains records for Campus "Main".
            // This establishes the baseline for the test.
            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.CampusId == _MainCampusId), "History events expected but not found. [Campus=(unfiltered)");

            // The standard test data set does not currently have data for people in multiple campuses.
            // As an alternative, create a filtered report for a non-existent Campus and verify that no records are returned.
            var settings = new ConnectionStatusChangeReportSettings();

            settings.CampusId = _InvalidCampusId;

            var reportService = new ConnectionStatusChangeReportBuilder(dataContext, settings);

            var reportFiltered = reportService.CreateReport();

            Assert.That.IsFalse(reportFiltered.ChangeEvents.Any(x => x.CampusId == _MainCampusId), "History events found but not expected. [CampusId=999]");
        }
Esempio n. 9
0
        public void Performance_LargeHistoryDataSet_ShouldNotTimeout()
        {
            VerifyTestPreconditionsOrThrow();

            int monthsToInclude = 2;

            var periodStart = new DateTime(RockDateTime.Now.Year, RockDateTime.Now.Month, 1);

            // Run a series of monthly reports throughout the year to test performance for various time periods.
            for (int i = 1; i <= 12; i++)
            {
                var dataContext = GetDataContext();

                periodStart = periodStart.AddMonths(monthsToInclude * -1);

                var nextPeriodEnd = periodStart.AddMonths(monthsToInclude).AddDays(-1);

                var settings = new ConnectionStatusChangeReportSettings();

                settings.ReportPeriod.SetToSpecificDateRange(periodStart, nextPeriodEnd);

                ConnectionStatusChangeReportBuilder reportBuilder;
                ConnectionStatusChangeReportData    report;

                // Get an unfiltered report.
                // The unfiltered data should contain at least one record that is a transition from Visitor.
                reportBuilder = new ConnectionStatusChangeReportBuilder(dataContext, settings);

                var watch = new Stopwatch();

                watch.Start();

                report = reportBuilder.CreateReport();

                watch.Stop();

                Debug.Print($"Pass {i:00}: Period={report.StartDate:dd-MMM-yy} - {report.EndDate:dd-MMM-yy}, Events={report.ChangeEvents.Count}, Execution Time={watch.Elapsed.TotalSeconds}s");
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Apply the Url Query Parameters to a report settings data object.
        /// </summary>
        /// <param name="settings"></param>
        private void ApplyUrlParametersToReportSettings(ConnectionStatusChangeReportSettings settings)
        {
            // Campus
            var campusId = PageParameter(PageParameterKey.CampusId).AsIntegerOrNull();

            if (campusId != null)
            {
                settings.CampusId = campusId.Value;
            }

            // Report Period
            var period = PageParameter(PageParameterKey.Period);

            if (!string.IsNullOrWhiteSpace(period))
            {
                settings.ReportPeriod.FromDelimitedString(period, _urlValuesListDelimiter);
            }
            else
            {
                // If a period is not specified, default to Current Year.
                settings.ReportPeriod.SetToCurrentPeriod(TimePeriodUnitSpecifier.Year);
            }

            // From Status
            var fromStatusId = PageParameter(PageParameterKey.FromStatusId).AsIntegerOrNull();

            if (fromStatusId != null)
            {
                settings.FromConnectionStatusId = fromStatusId;
            }

            // To Status
            var toStatusId = PageParameter(PageParameterKey.ToStatusId).AsIntegerOrNull();

            if (toStatusId != null)
            {
                settings.ToConnectionStatusId = toStatusId;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Get a collection of Url Query String parameters representing the current report settings.
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="setToReportView"></param>
        /// <returns></returns>
        private Dictionary <string, string> GetUrlQueryParametersFromSettings(ConnectionStatusChangeReportSettings settings, bool setToReportView)
        {
            var queryParams = new Dictionary <string, string>();

            // Campus
            if (settings.CampusId.GetValueOrDefault(0) != 0)
            {
                queryParams.Add(PageParameterKey.CampusId, settings.CampusId.ToString());
            }

            // Period.
            if (settings.ReportPeriod.Range != TimePeriodRangeSpecifier.Current &&
                settings.ReportPeriod.TimeUnit != TimePeriodUnitSpecifier.Year)
            {
                // Only set the period parameter if it is not the default setting.
                queryParams.Add(PageParameterKey.Period, settings.ReportPeriod.ToDelimitedString(_urlValuesListDelimiter));
            }

            // From Connection Status
            if (settings.FromConnectionStatusId.GetValueOrDefault(0) != 0)
            {
                queryParams.Add(PageParameterKey.FromStatusId, settings.FromConnectionStatusId.ToString());
            }

            // To Connection Status
            if (settings.ToConnectionStatusId.GetValueOrDefault(0) != 0)
            {
                queryParams.Add(PageParameterKey.ToStatusId, settings.ToConnectionStatusId.ToString());
            }

            // Show Settings?
            if (setToReportView)
            {
                queryParams.Add(PageParameterKey.ShowResults, "true");
            }

            return(queryParams);
        }
Esempio n. 12
0
        public void FilterByCurrentYear_MatchesExist_ShouldReturnChangesInCurrentYearOnly()
        {
            VerifyTestPreconditionsOrThrow();

            var dataContext = GetDataContext();

            // Get an unfiltered report and verify that it contains records for this year and previous years.
            // This establishes the baseline for the test.
            int currentYear = RockDateTime.Now.Year;

            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.EventDate.Year == currentYear), "History events expected but not found. [EventDate=(current year)");
            Assert.That.IsTrue(_BaselineReport.ChangeEvents.Any(x => x.EventDate.Year == (currentYear - 1)), "History events expected but not found. [EventDate=(previous year)");

            // Create a filtered report for current year only.
            var settings = new ConnectionStatusChangeReportSettings();

            settings.ReportPeriod.SetToCurrentPeriod(TimePeriodUnitSpecifier.Year);

            var reportService = new ConnectionStatusChangeReportBuilder(dataContext, settings);

            var reportFiltered = reportService.CreateReport();

            Assert.That.IsFalse(reportFiltered.ChangeEvents.Any(x => x.EventDate.Year != currentYear), "History events found but not expected. [EventDate != (current year)]");
        }