Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amended DB health checks to use NpgsqlDataSource #1444

Merged
merged 1 commit into from
Jul 29, 2024

Amended DB health checks to use NpgsqlDataSource

5611d6c
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

Amended DB health checks to use NpgsqlDataSource #1444

Amended DB health checks to use NpgsqlDataSource
5611d6c
Select commit
Loading
Failed to load commit list.
GitHub Actions / Support UI test results succeeded Jul 26, 2024 in 1s

424 passed, 0 failed and 4 skipped

Tests passed successfully

✅ TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/TestResults/_fv-az654-133_2024-07-26_17_32_06.trx

428 tests were completed in 190s with 424 passed, 0 failed and 4 skipped.

Test suite Passed Failed Skipped Time
TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.AddAlert.ConfirmTests 6✅ 97s
TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.AddAlert.IndexTests 6✅ 86s
TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.Alert.IndexTests 5✅ 73s
TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.CloseAlert.ConfirmTests 4✅ 77s
TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.CloseAlert.IndexTests 7✅ 95s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.AddApiKeyTests 9✅ 81s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.EditApiKeyTests 9✅ 86s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.AddApplicationUserTests 6✅ 34s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.EditApplicationUserTests 23✅ 123s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.AcceptTests 6✅ 98s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.IndexTests 12✅ 143s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.RejectTests 8✅ 136s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.CheckAnswersTests 10✅ 140s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.IndexTests 1✅ 25s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.ProviderTests 6✅ 85s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.SpecialismTests 7✅ 93s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StartDateTests 10✅ 125s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StatusTests 11✅ 136s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.ConfirmTests 7✅ 129s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.IndexTests 10✅ 137s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ConfirmTests 6✅ 116s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.IndexTests 7✅ 112s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ReasonTests 10✅ 132s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ConfirmTests 6✅ 113s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.IndexTests 9✅ 125s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ReasonTests 10✅ 133s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ConfirmTests 6✅ 118s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.IndexTests 9✅ 118s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ReasonTests 10✅ 134s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ConfirmTests 9✅ 137s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.IndexTests 10✅ 120s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ReasonTests 14✅ 144s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.IndexTests 6✅ 95s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.AlertsTests 5✅ 80s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogMandatoryQualificationEventsTests 27✅ 172s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogTests 10✅ 147s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.ConfirmTests 5✅ 78s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.IndexTests 13✅ 159s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.ConfirmTests 8✅ 115s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.IndexTests 9✅ 139s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.IndexTests 3✅ 52s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.QualificationsTests 5✅ 96s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.ConnectTests 8✅ 2⚪ 99s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.IndexTests 8✅ 2⚪ 117s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.IndexTests 7✅ 5s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.ConfirmTests 12✅ 67s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.IndexTests 8✅ 26s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.EditUserTests 18✅ 117s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.UsersTests 3✅ 20s

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.AddAlert.ConfirmTests

✅ Get_StateHasMissingRequiredData_RedirectsToIndex(sanctionCode: "G1", details: null, startDateString: null)
✅ Get_StateHasMissingRequiredData_RedirectsToIndex(sanctionCode: null, details: "These are some test details", startDateString: null)
✅ Get_StateHasMissingRequiredData_RedirectsToIndex(sanctionCode: null, details: null, startDateString: "2021-01-01")
✅ Get_ValidRequest_RendersExpectedContent
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_ValidRequest_AddsAlertAndCompletesJourney

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.AddAlert.IndexTests

✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForValidPerson_ReturnsOk
✅ Post_EmptyRequiredFields_ReturnsError
✅ Post_InvalidLinkUrl_ReturnsError
✅ Post_ValidData_RedirectsToConfirmPage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.Alert.IndexTests

✅ Get_ValidRequest_RendersExpectedContent(startDateString: "2021-01-01", endDateString: "2022-03-05", details: "Alert details", detailsLink: "http://www.gov.uk", isSpent: True, isActive: True, expectedAlertStatus: Closed)
✅ Get_ValidRequest_RendersExpectedContent(startDateString: "2021-01-01", endDateString: "2022-03-05", details: "Alert details", detailsLink: null, isSpent: True, isActive: False, expectedAlertStatus: Inactive)
✅ Get_ValidRequest_RendersExpectedContent(startDateString: "2021-01-01", endDateString: null, details: null, detailsLink: "http://www.gov.uk", isSpent: False, isActive: False, expectedAlertStatus: Inactive)
✅ Get_ValidRequest_RendersExpectedContent(startDateString: "2021-01-01", endDateString: null, details: null, detailsLink: null, isSpent: False, isActive: True, expectedAlertStatus: Active)
✅ Get_WithAlertIdForNonExistentAlert_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.CloseAlert.ConfirmTests

✅ Get_StateHasNoEndDate_RedirectsToIndex
✅ Get_ValidRequest_RendersExpectedContent
✅ Get_WithAlertIdForNonExistentAlert_ReturnsNotFound
✅ Post_ValidRequest_ClosesAlertAndCompletesJourney

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Alerts.CloseAlert.IndexTests

✅ Get_ValidRequestWithEndDateInJourneyState_PopulatesEndDateFromJourneyState
✅ Get_WithAlertIdForActiveAlert_ReturnsOk
✅ Get_WithAlertIdForEndedAlert_ReturnsNotFound
✅ Get_WithAlertIdForNonExistentAlert_ReturnsNotFound
✅ Post_EmptyEndDate_ReturnsError
✅ Post_EndDateBeforeStartDate_ReturnsError
✅ Post_ValidEndDate_RedirectsToConfirmPage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.AddApiKeyTests

✅ Get_ApplicationUserDoesNotExist_ReturnsBadRequest
✅ Get_UserDoesNotHavePermission_ReturnsForbidden
✅ Get_ValidRequest_RendersExpectedContent
✅ Post_ApplicationUserDoesNotExist_ReturnsBadRequest
✅ Post_KeyAlreadyExists_RendersErrorMessage
✅ Post_KeyIsTooLong_RendersErrorMessage
✅ Post_KeyIsTooShort_RendersErrorMessage
✅ Post_UserDoesNotHavePermission_ReturnsForbidden
✅ Post_ValidRequest_CreatesApiKeyCreatesEventAndRedirectsToApplicationUserWithFlashMessage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.EditApiKeyTests

✅ Get_ApiKeyDoesNotExist_ReturnsNotFound
✅ Get_KeyIsExpired_HasDisabledExpireButton
✅ Get_KeyIsNotExpired_HasNonDisabledExpireButton
✅ Get_UserDoesNotHavePermission_ReturnsForbidden
✅ Get_ValidRequest_RendersExpectedContent
✅ PostExpire_KeyDoesNotExist_ReturnsNotFound
✅ PostExpire_KeyIsAlreadyExpired_ReturnsBadRequest
✅ PostExpire_UserDoesNotHavePermission_ReturnsForbidden
✅ PostExpire_ValidRequest_SetsExpiresOnApiKeyCreatesEventAndRedirectsToApplicationUserWithFlashMessage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.AddApplicationUserTests

✅ Get_UserDoesNotHavePermission_ReturnsForbidden
✅ Get_ValidRequest_ReturnsExpectedContent
✅ Post_NameNotSpecified_RendersError
✅ Post_NameTooLong_RendersError
✅ Post_UserDoesNotHavePermission_ReturnsForbidden
✅ Post_ValidRequest_CreatesApplicationUserCreatesEventAndRedirectsWithFlashMessage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.EditApplicationUserTests

✅ Get_UserDoesNotExist_ReturnsNotFound
✅ Get_UserDoesNotHavePermission_ReturnsForbidden
✅ Get_ValidRequest_RendersExpectedContent
✅ Post_NameNotProvided_RendersError
✅ Post_NameTooLong_RendersError
✅ Post_UserDoesNotExist_ReturnsNotFound
✅ Post_UserDoesNotHavePermission_ReturnsForbidden
✅ Post_ValidRequest_UpdatesNameAndRolesAndOneLoginSettingsAndCreatesEventAndRedirectsWithFlashMessage
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "94b4455b-12f9-41d3-83a2-c28eefbf803e", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "ClientId", expectedErrorMessage: "Enter a client ID")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "1f77f726-84ce-4052-b680-b57df207ea8a", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "ClientSecret", expectedErrorMessage: "Enter a client secret")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "S", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "3af5c6fa-56b5-404f-8006-0d414ea1573a", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "ClientSecret", expectedErrorMessage: "Client secret must be at least 16 characters")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "foo", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "eb48a6f7-f7a2-4a1d-ab81-e7df0e3861dc", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "RedirectUris", expectedErrorMessage: "One or more redirect URIs are not valid")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "foo", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "68b98e70-5d35-446d-8a7f-22486fb98f09", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "PostLogoutRedirectUris", expectedErrorMessage: "One or more post logout redirect URIs are not vali"···)
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "44107606-ca52-4530-9a13-18a6aea5aaee", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginClientId", expectedErrorMessage: "Enter the One Login client ID")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginAuthenticationSchemeName", expectedErrorMessage: "Enter an authentication scheme name")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "03938917-0bba-4d32-a402-74689cf8e52a", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, expectedErrorField: "OneLoginPostLogoutRedirectUriPath", expectedErrorMessage: "One Login post logout redirect URI must be 100 cha"···)
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "2a44859c-f8a3-42ac-a96f-2a2699f970f7", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "", expectedErrorField: "OneLoginPostLogoutRedirectUriPath", expectedErrorMessage: "Enter the One Login post logout redirect URI")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "bc1d4540-66d0-4295-b5e8-15a86cecb98b", oneLoginRedirectUriPath: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginRedirectUriPath", expectedErrorMessage: "One Login redirect URI must be 100 characters or l"···)
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "f9cf720d-4958-4b89-9bf8-4fa3a2f34f50", oneLoginRedirectUriPath: "", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginRedirectUriPath", expectedErrorMessage: "Enter the One Login redirect URI")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginAuthenticationSchemeName", expectedErrorMessage: "Authentication scheme name must be 50 characters o"···)
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "", oneLoginAuthenticationSchemeName: "86def8bf-8770-4cb0-b1eb-8acde197909b", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "OneLoginPrivateKeyPem", expectedErrorMessage: "Enter the One Login private key")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "client_id", clientSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "f65d2381-df2f-4fbf-8fb0-29bf9affc71d", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "ClientSecret", expectedErrorMessage: "Client secret must be 200 characters or less")
✅ Post_WithOidcClientButInvalidDetails_RendersExpectedError(clientId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, clientSecret: "Secret0123456789", redirectUris: "https://localhost/callback", postLogoutRedirectUris: "https://localhost/logout-callback", oneLoginClientId: "client_id", oneLoginClientKeyPem: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "6fe63704-a2fc-4832-b926-17dcb2e631d5", oneLoginRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/callback", oneLoginPostLogoutRedirectUriPath: "/_onelogin/System.Func`1[System.Guid]/logout-callb"···, expectedErrorField: "ClientId", expectedErrorMessage: "Client ID must be 50 characters or less")

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.AcceptTests

✅ Get_WhenUserDoesNotHaveHelpdeskOrAdministratorRole_ReturnsForbidden
✅ Get_WhenUserHasNoRoles_ReturnsForbidden
✅ Get_WithTicketNumberForInactiveIncident_ReturnsBadRequest
✅ Get_WithTicketNumberForNonExistentIncident_ReturnsNotFound
✅ Post_ValidRequest_RedirectsWithFlashMessage
✅ Post_WhenUserDoesNotHaveHelpdeskOrAdministratorRole_ReturnsForbidden

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.IndexTests

✅ Get_UserWithNoRoles_ReturnsForbidden
✅ Get_UserWithoutHelpdeskOrAdministratorRole_ReturnsForbidden
✅ Get_WithTicketNumberForActiveDateOfBirthChangeIncident_RendersExpectedContent
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: False, hasNewMiddleName: False, hasNewLastName: True)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: False, hasNewMiddleName: True, hasNewLastName: False)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: False, hasNewMiddleName: True, hasNewLastName: True)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: True, hasNewMiddleName: False, hasNewLastName: False)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: True, hasNewMiddleName: False, hasNewLastName: True)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: True, hasNewMiddleName: True, hasNewLastName: False)
✅ Get_WithTicketNumberForActiveNameChangeIncident_RendersExpectedContent(hasNewFirstName: True, hasNewMiddleName: True, hasNewLastName: True)
✅ Get_WithTicketNumberForInactiveIncident_ReturnsBadRequest
✅ Get_WithTicketNumberForNonExistentIncident_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.RejectTests

✅ Get_WhenUserDoesNotHaveHelpdeskOrAdministratorRole_ReturnsForbidden
✅ Get_WhenUserHasNoRoles_ReturnsForbidden
✅ Get_WithTicketNumberForInactiveIncident_ReturnsBadRequest
✅ Get_WithTicketNumberForNonExistentIncident_ReturnsNotFound
✅ Post_WhenRejectionReasonChoiceHasNoSelection_ReturnsError
✅ Post_WhenRejectionReasonChoiceIsChangeNoLongerRequired_RedirectsWithFlashMessage
✅ Post_WhenRejectionReasonChoiceIsNotChangeNoLongerRequired_RedirectsWithFlashMessage
✅ Post_WhenUserDoesNotHaveHelpdeskOrAdministratorRole_ReturnsForbidden

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.CheckAnswersTests

✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState(status: Failed)
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState(status: InProgress)
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState(status: Passed)
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForValidPersonReturnsOk
✅ Post_Cancel_DeletesJourneyRedirectsAndDoesNotCreateMq
✅ Post_Confirm_CreatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(status: Failed)
✅ Post_Confirm_CreatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(status: InProgress)
✅ Post_Confirm_CreatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(status: Passed)
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.IndexTests

✅ Get_RedirectsToMqAddProvider

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.ProviderTests

✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForValidPerson_ReturnsOk
✅ Post_WhenNoProviderIsSelected_ReturnsError
✅ Post_WhenProviderIsSelected_RedirectsToSpecialismPage
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.SpecialismTests

✅ Get_ProviderMissingFromState_RedirectsToProvider
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_ProviderMissingFromState_RedirectsToProvider
✅ Post_WhenNoSpecialismIsSelected_ReturnsError
✅ Post_WhenSpecialismIsSelected_RedirectsToStartDatePage
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StartDateTests

✅ Get_SpecialismMissingFromState_RedirectsToSpecialism
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForValidPerson_ReturnsOk
✅ Post_SpecialismMissingFromState_RedirectToSpecialism
✅ Post_StartDateIsAfterOrEqualToEndDate_RendersError(daysAfter: 0)
✅ Post_StartDateIsAfterOrEqualToEndDate_RendersError(daysAfter: 1)
✅ Post_WhenNoStartDateIsEntered_ReturnsError
✅ Post_WhenStartDateIsEntered_RedirectsToResultPage
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StatusTests

✅ Get_StartDateMissingFromState_RedirectsToStartDate
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForValidPerson_ReturnsOk
✅ Post_EndDateIsBeforeOrEqualToStartDate_RendersError(daysBefore: 0)
✅ Post_EndDateIsBeforeOrEqualToStartDate_RendersError(daysBefore: 1)
✅ Post_StartDateMissingFromState_RedirectsToStartDate
✅ Post_ValidRequest_RedirectsToResultPage
✅ Post_WhenResultIsNotSelected_ReturnsError
✅ Post_WhenResultIsPassedAndEndDateHasNotBeenEntered_ReturnsError
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.ConfirmTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequest_DisplaysContentAsExpected(providerName: "University of Leeds", specialism: Hearing, startDateString: "2021-10-05", status: Deferred, endDateString: null, deletionReason: ProviderRequest, deletionReasonDetail: null, uploadEvidence: False)
✅ Get_ValidRequest_DisplaysContentAsExpected(providerName: "University of Leeds", specialism: Hearing, startDateString: "2021-10-05", status: Passed, endDateString: "2021-11-05", deletionReason: ProviderRequest, deletionReasonDetail: "Some details about the deletion reason", uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(providerName: null, specialism: null, startDateString: null, status: null, endDateString: null, deletionReason: AnotherReason, deletionReasonDetail: null, uploadEvidence: False)
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_Confirm_DeletesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage
✅ Post_MissingDataInJourneyState_Redirects

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.IndexTests

✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Get_WithQualificationIdForValidQualification_ReturnsOk
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_ValidInput_RedirectsToConfirmPage
✅ Post_WhenEvidenceFileIsInvalidType_ReturnsError
✅ Post_WhenNoDeletionReasonIsSelected_ReturnsError
✅ Post_WhenNoUploadEvidenceOptionIsSelected_ReturnsError
✅ Post_WhenUploadEvidenceOptionIsYesAndNoFileIsSelected_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ConfirmTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: "Some reason", uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: null, uploadEvidence: False)
✅ Post_Cancel_DeletesJourneyAndRedirectsAndDoesNotUpdateMq
✅ Post_Confirm_UpdatesMqCreatesEventAndCompletesJourneyRedirectsWithFlashMessage
✅ Post_MissingDataInJourneyState_Redirects

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.IndexTests

✅ Get_ValidRequestWithInitializedJourneyState_PopulatesModelFromJourneyState
✅ Get_ValidRequestWithUninitializedJourneyState_PopulatesModelFromDatabase
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_WhenNoProviderIsSelected_ReturnsError
✅ Post_WhenProviderIsSelected_RedirectsToReasonPage
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ReasonTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequestWithPopulatedDataInJourneyState_ReturnsOK
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_ValidInput_RedirectsToConfirmPage
✅ Post_WhenEvidenceFileIsInvalidType_ReturnsError
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError
✅ Post_WhenNoUploadEvidenceOptionIsSelected_ReturnsError
✅ Post_WhenUploadEvidenceOptionIsYesAndNoFileIsSelected_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ConfirmTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: "Some reason", uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: null, uploadEvidence: False)
✅ Post_Cancel_DeletesJourneyRedirectsAndDoesNotUpdateMq
✅ Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage
✅ Post_MissingDataInJourneyState_Redirects

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.IndexTests

✅ Get_QualificationWasMigratedFromDqtWithLegacySpecialism_ShowsLegacySpecialisms
✅ Get_QualificationWasMigratedFromDqtWithNonLegacySpecialism_DoesNotShowLegacySpecialisms
✅ Get_ValidRequestWithInitializedJourneyState_PopulatesModelFromJourneyState
✅ Get_ValidRequestWithUninitializedJourneyState_PopulatesModelFromDatabase
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_WhenNoSpecialismIsSelected_ReturnsError
✅ Post_WhenSpecialismIsSelected_RedirectsToReasonPage
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ReasonTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequestWithPopulatedDataInJourneyState_ReturnsOK
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_ValidInput_RedirectsToConfirmPage
✅ Post_WhenEvidenceFileIsInvalidType_ReturnsError
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError
✅ Post_WhenNoUploadEvidenceOptionIsSelected_ReturnsError
✅ Post_WhenUploadEvidenceOptionIsYesAndNoFileIsSelected_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ConfirmTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: "Some reason", uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(changeReasonDetail: null, uploadEvidence: False)
✅ Post_Cancel_DeletesJourneyRedirectsAndDoesNotUpdateMq
✅ Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage
✅ Post_MissingDataInJourneyState_Redirects

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.IndexTests

✅ Get_ValidRequestWithInitializedJourneyState_PopulatesModelFromJourneyState
✅ Get_ValidRequestWithUninitializedJourneyState_PopulatesModelFromDatabase
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_StartDateIsAfterOrEqualToEndDate_RendersError(daysAfter: 0)
✅ Post_StartDateIsAfterOrEqualToEndDate_RendersError(daysAfter: 1)
✅ Post_WhenNoStartDateIsEntered_ReturnsError
✅ Post_WhenStartDateIsEntered_RedirectsToReasonPage
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ReasonTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequestWithPopulatedDataInJourneyState_ReturnsOK
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_ValidInput_RedirectsToConfirmPage
✅ Post_WhenEvidenceFileIsInvalidType_ReturnsError
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError
✅ Post_WhenNoUploadEvidenceOptionIsSelected_ReturnsError
✅ Post_WhenUploadEvidenceOptionIsYesAndNoFileIsSelected_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ConfirmTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequest_DisplaysContentAsExpected(isStatusChange: False, isEndDateChange: True, changeReasonDetail: null, uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(isStatusChange: True, isEndDateChange: False, changeReasonDetail: "some reason", uploadEvidence: True)
✅ Get_ValidRequest_DisplaysContentAsExpected(isStatusChange: True, isEndDateChange: True, changeReasonDetail: null, uploadEvidence: False)
✅ Post_Cancel_DeletesJourneyRedirectsAndDoesNotUpdateMq
✅ Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(isStatusChange: False, isEndDateChange: True, changeReasonDetail: null, uploadEvidence: True)
✅ Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(isStatusChange: True, isEndDateChange: False, changeReasonDetail: "some reason", uploadEvidence: True)
✅ Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirectsWithFlashMessage(isStatusChange: True, isEndDateChange: True, changeReasonDetail: null, uploadEvidence: False)
✅ Post_MissingDataInJourneyState_Redirects

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.IndexTests

✅ Get_ValidRequestWithInitializedJourneyState_PopulatesModelFromJourneyState
✅ Get_ValidRequestWithUninitializedJourneyState_PopulatesModelFromDatabase
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_EndDateIsBeforeOrEqualToStartDate_RendersError(daysBefore: 0)
✅ Post_EndDateIsBeforeOrEqualToStartDate_RendersError(daysBefore: 1)
✅ Post_ValidRequest_RedirectsToConfirmPage
✅ Post_WhenResultIsNotSelected_ReturnsError
✅ Post_WhenResultIsSelectedAndEndDateHasNotBeenEntered_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ReasonTests

✅ Get_MissingDataInJourneyState_Redirects
✅ Get_ValidRequestWithPopulatedDataInJourneyState_ReturnsOK
✅ Get_WithQualificationIdForNonExistentQualification_ReturnsNotFound
✅ Post_Cancel_DeletesJourneyAndRedirects
✅ Post_ValidInput_RedirectsToConfirmPage(isStatusChange: False, isEndDateChange: True)
✅ Post_ValidInput_RedirectsToConfirmPage(isStatusChange: True, isEndDateChange: False)
✅ Post_ValidInput_RedirectsToConfirmPage(isStatusChange: True, isEndDateChange: True)
✅ Post_WhenEvidenceFileIsInvalidType_ReturnsError
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError(isStatusChange: False, isEndDateChange: True)
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError(isStatusChange: True, isEndDateChange: False)
✅ Post_WhenNoChangeReasonIsSelected_ReturnsError(isStatusChange: True, isEndDateChange: True)
✅ Post_WhenNoUploadEvidenceOptionIsSelected_ReturnsError
✅ Post_WhenUploadEvidenceOptionIsYesAndNoFileIsSelected_ReturnsError
✅ Post_WithQualificationIdForNonExistentQualification_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.IndexTests

✅ Get_WithEmptySearchParameter_DisplaysSearchFormOnly
✅ Get_WithNoQueryParameters_DisplaysSearchFormOnly
✅ Get_WithSearchQueryParameterWithNoMatches_DisplaysNoMatches
✅ Get_WithSearchThatLooksLikeADate_DisplaysMatchesOnDateOfBirth
✅ Get_WithSearchThatLooksLikeAName_DisplaysMatchesOnName
✅ Get_WithSearchThatLooksLikeATrn_DisplaysMatchOnTrn

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.AlertsTests

✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForPersonWithCurrentAndPreviousAlerts_DisplaysExpectedContent
✅ Get_WithPersonIdForPersonWithNoAlerts_DisplaysNoCurrentAlerts
✅ Get_WithPersonIdForPersonWithOnlyCurrentAlerts_DisplaysExpectedContent
✅ Get_WithPersonIdForPersonWithOnlyPreviousAlerts_DisplaysExpectedContent

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogMandatoryQualificationEventsTests

✅ Person_WithDeletedMandatoryQualificationEventWithLegacyProvider_RendersExpectedProviderName
✅ Person_WithDeletedMandatoryQualificationEventWithNoProvider_RendersNoneForProviderName
✅ Person_WithMandatoryQualficationDqtDeactivatedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualficationDqtDeactivatedEventWithLegacyProvider_RendersExpectedProviderName
✅ Person_WithMandatoryQualficationDqtDeactivatedEventWithNoProvider_RendersExpectedContent
✅ Person_WithMandatoryQualificationCreatedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationCreatedEventCreatedByDqtUser_RendersExpectedRaisedBy
✅ Person_WithMandatoryQualificationDeletedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationDeletedEventWithEmptyData_RendersExpectedContent
✅ Person_WithMandatoryQualificationDeletedEventWithNoEvidenceFile_DoesNotRenderEvidenceRow
✅ Person_WithMandatoryQualificationDqtReactivatedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationImportedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationMigratedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationMigratedEventWithChangedProvider_RendersProviderRowInPreviousDataSummaryList
✅ Person_WithMandatoryQualificationMigratedEventWithChangedSpecialism_RendersSpecialismRowInPreviousDataSummaryList
✅ Person_WithMandatoryQualificationMigratedEventWithNoChanges_DoesNotRenderPreviousDataSummaryList
✅ Person_WithMandatoryQualificationUpdatedEvent_RendersExpectedContent
✅ Person_WithMandatoryQualificationUpdatedEventWithChangedEndDate_RendersEndDateRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithChangedProvider_RendersTrainingProviderRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithChangedSpecialism_RendersSpecialismRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithChangedStartDate_RendersStartDateRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithChangedStatus_RendersStatusRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithoutChangedProvider_DoesNotRenderTrainingProviderRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithoutChangedSpecialism_DoesNotRenderSpecialismRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithoutChangedStartDate_DoesNotRenderStartDateRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithoutChangedStatus_DoesNotRenderStatusRowWithinPreviousData
✅ Person_WithMandatoryQualificationUpdatedEventWithoutChangeReason_DoesNotRenderReasonForChangeBlock

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogTests

✅ Get_NoChanges_DisplaysNoChangesMessage
✅ Get_PersonDoesNotExist_ReturnsNotFound
✅ Get_PersonWithDateOfBirthChangeCase_RendersExpectedItem(status: Approved, expectedSummaryText: "Approved")
✅ Get_PersonWithDateOfBirthChangeCase_RendersExpectedItem(status: Rejected, expectedSummaryText: "Rejected")
✅ Get_PersonWithNameChangeCase_RendersExpectedItem(status: Approved, expectedSummaryText: "Approved")
✅ Get_PersonWithNameChangeCase_RendersExpectedItem(status: Rejected, expectedSummaryText: "Rejected")
✅ Get_PersonWithNote_RendersExpectedContent
✅ Get_PersonWithTask_RendersExpectedContent
✅ Get_PersonWithTaskWithCompletedStatus_RendersClosedStatus
✅ Get_PersonWithTaskWithPastDueDate_RendersOverdueStatus

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.ConfirmTests

✅ Get_StateHasNoDateOfBirth_RedirectsToIndex
✅ Get_ValidRequest_RendersExpectedContent
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_ValidRequest_UpdatesDateOfBirthAndCompletesJourney
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.IndexTests

✅ Get_ValidRequestForNewJourney_PopulatesModelFromDqt
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_WithInvalidData_ReturnsError(day: "", month: "", year: "", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Enter a date of birth")
✅ Post_WithInvalidData_ReturnsError(day: "", month: "", year: "1969", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a day and month")
✅ Post_WithInvalidData_ReturnsError(day: "", month: "10", year: "", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a day and year")
✅ Post_WithInvalidData_ReturnsError(day: "", month: "10", year: "1969", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a day")
✅ Post_WithInvalidData_ReturnsError(day: "10", month: "", year: "", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a month and year")
✅ Post_WithInvalidData_ReturnsError(day: "10", month: "", year: "1969", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a month")
✅ Post_WithInvalidData_ReturnsError(day: "10", month: "10", year: "", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must include a year")
✅ Post_WithInvalidData_ReturnsError(day: "32", month: "10", year: "1969", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must be a real date")
✅ Post_WithInvalidData_ReturnsError(day: "Blah", month: "Blah", year: "Blah", expectedErrorElementId: "DateOfBirth", expectedErrorMessage: "Date of birth must be a real date")
✅ Post_WithValidData_RedirectsToConfirmPage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.ConfirmTests

✅ Get_StateHasMissingRequiredData_RedirectsToIndex(firstName: "NewFirstName", middleName: null, lastName: null)
✅ Get_StateHasMissingRequiredData_RedirectsToIndex(firstName: null, middleName: "NewMiddleName", lastName: null)
✅ Get_StateHasMissingRequiredData_RedirectsToIndex(firstName: null, middleName: null, lastName: "NewLastName")
✅ Get_StateHasMissingRequiredData_RedirectsToIndex(firstName: null, middleName: null, lastName: null)
✅ Get_ValidRequest_RendersExpectedContent
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_ValidRequest_UpdatesNameAndCompletesJourney
✅ Post_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.IndexTests

✅ Get_ValidRequestForNewJourney_PopulatesModelFromDqt
✅ Get_ValidRequestWithPopulatedDataInJourneyState_PopulatesModelFromJourneyState
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Post_WithInvalidData_ReturnsExpectedErrors(firstName: "", middleName: "", lastName: "Bloggs", expectedErrorElementId: "FirstName", expectedErrorMessage: "Enter a first name")
✅ Post_WithInvalidData_ReturnsExpectedErrors(firstName: "Joe", middleName: "", lastName: "", expectedErrorElementId: "LastName", expectedErrorMessage: "Enter a last name")
✅ Post_WithInvalidData_ReturnsExpectedErrors(firstName: "Joe", middleName: "", lastName: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, expectedErrorElementId: "LastName", expectedErrorMessage: "Last name must be 100 characters or less")
✅ Post_WithInvalidData_ReturnsExpectedErrors(firstName: "Joe", middleName: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, lastName: "Bloggs", expectedErrorElementId: "MiddleName", expectedErrorMessage: "Middle name must be 100 characters or less")
✅ Post_WithInvalidData_ReturnsExpectedErrors(firstName: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"···, middleName: "", lastName: "Bloggs", expectedErrorElementId: "FirstName", expectedErrorMessage: "First name must be 100 characters or less")
✅ Post_WithValidData_RedirectsToConfirmPage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.IndexTests

✅ Get_WithPersonIdForExistingPersonWithAllPropertiesSet_ReturnsExpectedContent
✅ Get_WithPersonIdForExistingPersonWithMissingProperties_ReturnsExpectedContent
✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.QualificationsTests

✅ Get_WithPersonIdForNonExistentPerson_ReturnsNotFound
✅ Get_WithPersonIdForPersonWithMandatoryQualifications_DisplaysExpectedContent(providerName: "University of Birmingham", specialism: Hearing, startDateString: "2022-01-05", status: Deferred, endDateString: null)
✅ Get_WithPersonIdForPersonWithMandatoryQualifications_DisplaysExpectedContent(providerName: "University of Birmingham", specialism: Hearing, startDateString: "2022-01-05", status: Passed, endDateString: "2022-07-13")
✅ Get_WithPersonIdForPersonWithMandatoryQualifications_DisplaysExpectedContent(providerName: null, specialism: null, startDateString: null, status: null, endDateString: null)
✅ Get_WithPersonIdForPersonWithNoMandatoryQualifications_DisplaysNoMandatoryQualifications

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.ConnectTests

✅ Get_SupportTaskDoesNotExist_ReturnsNotFound
⚪ Get_SupportTaskIsNotConnectOneLoginUserType_ReturnsNotFound
✅ Get_SupportTaskIsNotOpen_ReturnsNotFound
✅ Get_TrnDoesNotExist_ReturnsBadRequest
✅ Get_ValidRequest_ReturnsExpectedContent
✅ Post_SupportTaskDoesNotExist_ReturnsNotFound
⚪ Post_SupportTaskIsNotConnectOneLoginUserType_ReturnsNotFound
✅ Post_SupportTaskIsNotOpen_ReturnsNotFound
✅ Post_TrnDoesNotExist_ReturnsBadRequest
✅ Post_ValidRequest_ClosesTaskConnectsUserToPersonAndRedirectsToSupportTaskList

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.IndexTests

✅ Get_SupportTaskDoesNotExist_ReturnsNotFound
⚪ Get_SupportTaskIsNotConnectOneLoginUserType_ReturnsNotFound
✅ Get_SupportTaskIsNotOpen_ReturnsNotFound
✅ Get_ValidRequest_RendersExpectedContent
✅ Post_NoSuggestionChosen_RendersError
✅ Post_SupportTaskDoesNotExist_ReturnsNotFound
⚪ Post_SupportTaskIsNotConnectOneLoginUserType_ReturnsNotFound
✅ Post_SupportTaskIsNotOpen_ReturnsNotFound
✅ Post_ValidRequestFromSuggestion_RedirectsToConnectPage
✅ Post_ValidRequestWithOverridenTrn_RedirectsToConnectPage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.IndexTests

✅ Get_CategoriesSpecified_ReturnsResultsMatchingCategoriesOnly
✅ Get_DateRequestedSortByQueryParam_ShowsTasksSortedByDateRequested
✅ Get_NoCategoriesSpecifiedAndFiltersApplied_ReturnsNoResults
✅ Get_NoCategoriesSpecifiedAndNoFiltersApplied_ReturnsAllCategories
✅ Get_NoSortByQueryParam_ShowsTasksSortedByDateRequested
✅ Get_ReferenceSpecified_ReturnsResultMatchingReferenceOnly
✅ Get_TypeSortByQueryParam_ShowsTasksSortedByType

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.ConfirmTests

✅ Get_UserIdDoesNotExist_ReturnsNotFound
✅ Get_UserWithoutAdministratorRole_ReturnsForbidden
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: False, hasDisabledCrmAccount: False, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: False, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: False, hasDqtRoles: True)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: True, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: True, hasDqtRoles: True)
✅ Post_NoName_RendersError
✅ Post_NoRolesSelected_RendersError
✅ Post_UserIdDoesNotExist_ReturnsNotFound
✅ Post_UserWithoutAdministratorRole_ReturnsForbidden
✅ Post_ValidRequest_CreatesUserEmitsEventAndRedirectsWithFlashMessage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.IndexTests

✅ Get_UserWithoutAdministratorRole_ReturnsForbidden
✅ Get_WithAdministratorUser_ReturnsOk
✅ Post_EmailDoesNotHaveSuffix_AppendsEducationSuffixBeforeSearching
✅ Post_NoEmailEntered_RendersErrorMessage
✅ Post_UserFound_ButAlreadyExistsInTrs_RedirectsToEditPage
✅ Post_UserFound_RedirectsToConfirmPage
✅ Post_UserNotFound_RendersErrorMessage
✅ Post_UserWithoutAdministratorRole_ReturnsForbidden

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Users.EditUserTests

✅ Get_UserIdDoesNotExist_ReturnsNotFound
✅ Get_UserWithOutAdministratorRole_ReturnsForbidden
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: False, hasDisabledCrmAccount: False, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: False, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: False, hasDqtRoles: True)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: True, hasDqtRoles: False)
✅ Get_ValidRequest_RendersExpectedContent(hasCrmAccount: True, hasDisabledCrmAccount: True, hasDqtRoles: True)
✅ Post_NoName_RendersError
✅ Post_NoRolesSelected_RendersError
✅ Post_UserExistsButIsAlreadyActive_ReturnsBadRequest
✅ Post_UserExistsButIsAlreadyDeactivated_ReturnsBadRequest
✅ Post_UserIdDoesNotExist_ReturnsNotFound
✅ Post_UserWithoutAdministratorRole_ReturnsForbidden
✅ Post_ValidRequest_ActivatesUsersEmitsEventAndRedirectsWithFlashMessage
✅ Post_ValidRequest_CreatesUserEmitsEventAndRedirectsWithFlashMessage(changeName: False, changeRoles: True, expectedEvent: True, expectedChanges: Roles)
✅ Post_ValidRequest_CreatesUserEmitsEventAndRedirectsWithFlashMessage(changeName: True, changeRoles: False, expectedEvent: True, expectedChanges: Name)
✅ Post_ValidRequest_CreatesUserEmitsEventAndRedirectsWithFlashMessage(changeName: True, changeRoles: True, expectedEvent: True, expectedChanges: Name | Roles)
✅ Post_ValidRequest_DeactivatesUsersEmitsEventAndRedirectsWithFlashMessage

✅ TeachingRecordSystem.SupportUi.Tests.PageTests.Users.UsersTests

✅ Get_UserWithAdministratorRole_ReturnsOk
✅ Get_UserWithOutAdministratorRole_ReturnsForbidden
✅ Get_ValidRequestAndUsersFound_RendersUsers