Skip to content

Add bulk person search API endpoint #189

Add bulk person search API endpoint

Add bulk person search API endpoint #189

GitHub Actions / Support UI test results succeeded Aug 20, 2024 in 0s

391 passed, 0 failed and 4 skipped

Tests passed successfully

✅ TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/TestResults/_fv-az1426-140_2024-08-20_12_15_26.trx

395 tests were completed in 222s with 391 passed, 0 failed and 4 skipped.

Test suite Passed Failed Skipped Time
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.AddApiKeyTests 9✅ 83s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.EditApiKeyTests 9✅ 91s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.AddApplicationUserTests 6✅ 52s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.EditApplicationUserTests 23✅ 161s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.AcceptTests 6✅ 111s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.IndexTests 12✅ 173s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.RejectTests 8✅ 141s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.CheckAnswersTests 10✅ 148s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.IndexTests 1✅ 15s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.ProviderTests 6✅ 84s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.SpecialismTests 7✅ 109s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StartDateTests 10✅ 155s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StatusTests 11✅ 159s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.ConfirmTests 7✅ 143s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.DeleteMq.IndexTests 10✅ 168s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ConfirmTests 6✅ 134s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.IndexTests 7✅ 125s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ReasonTests 10✅ 158s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ConfirmTests 6✅ 134s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.IndexTests 9✅ 144s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ReasonTests 10✅ 146s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ConfirmTests 6✅ 132s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.IndexTests 9✅ 147s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ReasonTests 10✅ 153s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ConfirmTests 9✅ 167s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.IndexTests 10✅ 158s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ReasonTests 14✅ 178s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.IndexTests 6✅ 136s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogMandatoryQualificationEventsTests 27✅ 194s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogTests 10✅ 172s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.ConfirmTests 5✅ 88s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.IndexTests 13✅ 173s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.ConfirmTests 8✅ 118s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.IndexTests 9✅ 152s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.IndexTests 3✅ 58s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.QualificationsTests 5✅ 90s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.ConnectTests 8✅ 2⚪ 141s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.IndexTests 8✅ 2⚪ 137s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.IndexTests 7✅ 7s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.ConfirmTests 12✅ 98s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.IndexTests 8✅ 39s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.EditUserTests 18✅ 143s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.UsersTests 3✅ 25s

✅ 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "fbea3a3f-301a-4c3b-b221-92c97ddfb79f", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "d3be4b82-d107-46ee-9cbf-2491a9c9f8b0", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "e93f4391-a28e-4b58-912b-3d38af578c9f", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "2860950f-4a54-4d55-b5ae-9a131702ac42", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "cab08c47-f710-42e9-880f-940ee16c8851", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "a2968af8-d685-4023-a49b-e0ff65a2a87c", 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-----\nMIIEvQIBADANBgkqhkiG9"···, 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "0ba98c30-f4c9-4cf9-9e55-e83f28472164", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "795eb8cc-5ad9-4038-a9aa-6c977221f5cb", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "94549c0d-57c4-4c7b-b0de-36969ca9dc4a", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "b71f547b-89df-4f8f-aa5d-df16b2da1c07", 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-----\nMIIEvQIBADANBgkqhkiG9"···, 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: "41bf5f24-1c49-4f06-ba94-9e1ff4ac6560", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "8fde9f65-5530-4c29-9ce4-714d70ead922", 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-----\nMIIEvQIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "c233662c-424f-4563-8a32-001771b2733f", 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.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