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."); }
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)]"); }
/// <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(); }
/// <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(); }
/// <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); }
/// <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); }
/// <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(); }
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]"); }
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"); } }
/// <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; } }
/// <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); }
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)]"); }