Skip to content

WIP: bulk person API #186

WIP: bulk person API

WIP: bulk person API #186

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

391 passed, 0 failed and 4 skipped

Tests passed successfully

✅ TeachingRecordSystem/tests/TeachingRecordSystem.SupportUi.Tests/TestResults/_fv-az777-957_2024-08-19_13_36_37.trx

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

Test suite Passed Failed Skipped Time
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.AddApiKeyTests 9✅ 80s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApiKeys.EditApiKeyTests 9✅ 85s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.AddApplicationUserTests 6✅ 48s
TeachingRecordSystem.SupportUi.Tests.PageTests.ApplicationUsers.EditApplicationUserTests 23✅ 145s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.AcceptTests 6✅ 101s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.IndexTests 12✅ 156s
TeachingRecordSystem.SupportUi.Tests.PageTests.ChangeRequests.EditChangeRequest.RejectTests 8✅ 153s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.CheckAnswersTests 10✅ 162s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.IndexTests 1✅ 21s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.ProviderTests 6✅ 80s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.SpecialismTests 7✅ 105s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.AddMq.StartDateTests 10✅ 143s
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✅ 152s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ConfirmTests 6✅ 126s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.IndexTests 7✅ 121s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Provider.ReasonTests 10✅ 143s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ConfirmTests 6✅ 135s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.IndexTests 9✅ 141s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Specialism.ReasonTests 10✅ 143s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ConfirmTests 6✅ 125s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.IndexTests 9✅ 124s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.StartDate.ReasonTests 10✅ 136s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ConfirmTests 9✅ 152s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.IndexTests 10✅ 145s
TeachingRecordSystem.SupportUi.Tests.PageTests.Mqs.EditMq.Status.ReasonTests 14✅ 154s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.IndexTests 6✅ 118s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogMandatoryQualificationEventsTests 27✅ 188s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.ChangeLogTests 10✅ 162s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.ConfirmTests 5✅ 89s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditDateOfBirth.IndexTests 13✅ 166s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.ConfirmTests 8✅ 133s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.EditName.IndexTests 9✅ 154s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.IndexTests 3✅ 53s
TeachingRecordSystem.SupportUi.Tests.PageTests.Persons.PersonDetail.QualificationsTests 5✅ 74s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.ConnectTests 8✅ 2⚪ 130s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.ConnectOneLoginUser.IndexTests 8✅ 2⚪ 131s
TeachingRecordSystem.SupportUi.Tests.PageTests.SupportTasks.IndexTests 7✅ 6s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.ConfirmTests 12✅ 80s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.AddUser.IndexTests 8✅ 43s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.EditUserTests 18✅ 130s
TeachingRecordSystem.SupportUi.Tests.PageTests.Users.UsersTests 3✅ 26s

✅ 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "cd7f2350-ba36-4653-8881-c56225e6cdfd", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "d4bfc527-49c2-4670-ac81-8e4bd330c9e6", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "8be9f779-df91-447c-81e6-187a58c5fc14", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "30e46173-bd21-43b8-ba14-c52c2edac1c8", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "5f11f867-8658-4bcd-8b8c-1709bf435741", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "080b8263-865c-4444-a0eb-5ea0e285d705", 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-----\nMIIEvAIBADANBgkqhkiG9"···, 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "503d318f-f711-4937-9d9b-7e66cca7a4e7", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "b08dad09-ba45-44bb-a8a4-f5e2bcf48a45", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "ece714b5-1e01-462c-8c53-25919498aac1", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "f68fc04e-cd4a-4ed0-9111-2669b1b44967", 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-----\nMIIEvAIBADANBgkqhkiG9"···, 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: "88a6c328-715a-4255-8493-76f37a71f44d", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "b1772ce1-1869-4252-b39f-bd924310ba36", 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-----\nMIIEvAIBADANBgkqhkiG9"···, oneLoginAuthenticationSchemeName: "ea439417-8dca-4add-bfe5-467631a0edc9", 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