Skip to content

Handle outbox messages #1994

Handle outbox messages

Handle outbox messages #1994

GitHub Actions / TeachingRecordSystem.Api.Tests test results succeeded Feb 7, 2025 in 0s

492 passed, 0 failed and 0 skipped

Tests passed successfully

✅ TeachingRecordSystem/tests/TeachingRecordSystem.Api.Tests/TestResults/_fv-az847-238_2025-02-07_15_11_06.trx

492 tests were completed in 193s with 492 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
TeachingRecordSystem.Api.Tests.Endpoints.IdentityWebHooks.GetAnIdentityEndpointsTests 11✅ 16s
TeachingRecordSystem.Api.Tests.Filters.CrmServiceProtectionFaultExceptionFilterTests 3✅ 5s
TeachingRecordSystem.Api.Tests.V1.Operations.GetTeacherTests 7✅ 20s
TeachingRecordSystem.Api.Tests.V1.SwaggerTests 1✅ 2s
TeachingRecordSystem.Api.Tests.V2.Operations.FindTeachersTests 12✅ 24s
TeachingRecordSystem.Api.Tests.V2.Operations.GetIttProvidersTests 1✅ 2s
TeachingRecordSystem.Api.Tests.V2.Operations.GetOrCreateTrnRequestTests 39✅ 58s
TeachingRecordSystem.Api.Tests.V2.Operations.GetTeacherTests 12✅ 14s
TeachingRecordSystem.Api.Tests.V2.Operations.GetTrnRequestTests 12✅ 47s
TeachingRecordSystem.Api.Tests.V2.Operations.SetIttOutcomeTests 24✅ 25s
TeachingRecordSystem.Api.Tests.V2.Operations.SetNpqQualificationTests 10✅ 12s
TeachingRecordSystem.Api.Tests.V2.Operations.UnlockTeacherTests 11✅ 51s
TeachingRecordSystem.Api.Tests.V2.Operations.UpdateTeacherTests 62✅ 45s
TeachingRecordSystem.Api.Tests.V2.SwaggerTests 1✅ 3s
TeachingRecordSystem.Api.Tests.V3.SwaggerTests 10✅ 16s
TeachingRecordSystem.Api.Tests.V3.V20240101.CreateDateOfBirthChangeTests 12✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240101.CreateNameChangeTests 12✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240101.FindTeachersTests 11✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherByTrnTests 19✅ 80s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherTests 35✅ 118s
TeachingRecordSystem.Api.Tests.V3.V20240307.CreateTrnRequestTests 22✅ 6s
TeachingRecordSystem.Api.Tests.V3.V20240307.GetTrnRequestTests 9✅ 52s
TeachingRecordSystem.Api.Tests.V3.V20240412.CreateDateOfBirthChangeTests 7✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240412.CreateNameChangeTests 6✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240416.GetTeacherByTrnTests 3✅ 19s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateDateOfBirthChangeTests 7✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateNameChangeTests 6✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateTrnRequestTests 3✅ 1s
TeachingRecordSystem.Api.Tests.V3.V20240606.FindPersonByLastNameAndDateOfBirthTests 11✅ 6s
TeachingRecordSystem.Api.Tests.V3.V20240814.FindPersonByLastNameAndDateOfBirthTests 11✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240814.FindPersonsByTrnAndDateOfBirthTests 8✅ 5s
TeachingRecordSystem.Api.Tests.V3.V20240912.GetQtlsDateRequestTests 7✅ 35s
TeachingRecordSystem.Api.Tests.V3.V20240920.FindPersonByLastNameAndDateOfBirthTests 1✅ 679ms
TeachingRecordSystem.Api.Tests.V3.V20240920.FindPersonsByTrnAndDateOfBirthTests 1✅ 587ms
TeachingRecordSystem.Api.Tests.V3.V20240920.GetPersonByTrnTests 17✅ 72s
TeachingRecordSystem.Api.Tests.V3.V20240920.GetPersonTests 1✅ 10s
TeachingRecordSystem.Api.Tests.V3.V20240920.SetDeceasedTests 9✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20250203.CreateTrnRequestTests 2✅ 759ms
TeachingRecordSystem.Api.Tests.V3.V20250203.SetCpdInductionStatusTests 39✅ 111s
TeachingRecordSystem.Api.Tests.V3.VersionReferenceTests 10✅ 96ms
TeachingRecordSystem.Api.Tests.V3.VNext.SetWelshInductionStatusTests 7✅ 37s

✅ TeachingRecordSystem.Api.Tests.Endpoints.IdentityWebHooks.GetAnIdentityEndpointsTests

✅ Post_WithInvalidContent_ThrowsJsonException
✅ Post_WithInvalidMessageFormat_ThrowsJsonException
✅ Post_WithInvalidSignatureInHeader_ReturnsUnauthorised
✅ Post_WithMessageTypeWeAreNotInterestedIn_ThrowsJsonException
✅ Post_WithNonJsonMessage_ThrowsJsonException
✅ Post_WithNoSignatureInHeader_ReturnsUnauthorised
✅ Post_WithUserUpdatedMessageForRemovedTrn_RemovesLinkFromDqt
✅ Post_WithUserWithoutTrn_DoesNotCallDqt
✅ Post_WithValidUserCreatedMessage_ReturnsNoContent
✅ Post_WithValidUserMergedMessage_ReturnsNoContent
✅ Post_WithValidUserUpdatedMessage_ReturnsNoContent

✅ TeachingRecordSystem.Api.Tests.Filters.CrmServiceProtectionFaultExceptionFilterTests

✅ ServiceProtectionFaultThrown_Returns429Response(testEndpoint: "concurrent_requests")
✅ ServiceProtectionFaultThrown_Returns429Response(testEndpoint: "execution_time")
✅ ServiceProtectionFaultThrown_Returns429Response(testEndpoint: "number_of_requests")

✅ TeachingRecordSystem.Api.Tests.V1.Operations.GetTeacherTests

✅ Given_invalid_birthdate_returns_error(birthDate: "xxx")
✅ Given_invalid_trn_returns_error(trn: "123456")
✅ Given_invalid_trn_returns_error(trn: "12345678")
✅ Given_invalid_trn_returns_error(trn: "xxx")
✅ Given_match_returns_ok
✅ Given_multiple_matches_returns_match_on_TRN
✅ Given_no_match_found_returns_notfound

✅ TeachingRecordSystem.Api.Tests.V1.SwaggerTests

✅ Get_SwaggerEndpoint_ReturnsOk

✅ TeachingRecordSystem.Api.Tests.V2.Operations.FindTeachersTests

✅ FindTeachers_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ FindTeachers_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ FindTeachers_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Given_both_ukprn_and_provider_name_are_specified_returns_error
✅ Given_find_with_no_search_parameters_return_empty_collection
✅ Given_no_results_returns_ok
✅ Given_search_returns_a_result_returns_expected_response
✅ Given_search_returns_a_result_with_activesanctions_set_returns_expected_response(activeSanctions: False)
✅ Given_search_returns_a_result_with_activesanctions_set_returns_expected_response(activeSanctions: True)
✅ Given_search_returns_a_result_with_no_active_sanctions_returns_expected_response
✅ Given_search_with_valid_provider_returns_results(providerName: "someProvider", providerUkprn: "")
✅ Given_search_with_valid_provider_returns_results(providerName: null, providerUkprn: "1005811506")

✅ TeachingRecordSystem.Api.Tests.V2.Operations.GetIttProvidersTests

✅ Given_request_returns_list_of_itt_providers

✅ TeachingRecordSystem.Api.Tests.V2.Operations.GetOrCreateTrnRequestTests

✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Put_InvalidRequestId_ReturnsError
✅ Put_OverseasQualifiedTeacherAndEarlyYearsProgrammeType_ReturnsError
✅ Put_RequestForOverseasQualifiedTeacherWithSlugId_ReturnsError
✅ Put_RequestIdTooLong_ReturnsError
✅ Put_RequestWithDateOfBirthBefore01011940_ReturnsError(year: 1900, month: 1, day: 1)
✅ Put_RequestWithDateOfBirthInFuture_ReturnsError(year: 2022, month: 1, day: 1)
✅ Put_RequestWithDateOfBirthInFuture_ReturnsError(year: 2023, month: 1, day: 1)
✅ Put_RequestWithInvalidAgeRange_ReturnsError(ageRangeFrom: -1, ageRangeTo: 1, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeFrom", expectedErrorMessage: "Age must be 0-19 inclusive.")
✅ Put_RequestWithInvalidAgeRange_ReturnsError(ageRangeFrom: 1, ageRangeTo: -1, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeTo", expectedErrorMessage: "Age must be 0-19 inclusive.")
✅ Put_RequestWithInvalidAgeRange_ReturnsError(ageRangeFrom: 5, ageRangeTo: 4, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeTo", expectedErrorMessage: "'Age to' cannot be less than 'age from'.")
✅ Put_RequestWithInvalidIttCountry_ReturnsError
✅ Put_RequestWithInvalidIttProvider_ReturnsError
✅ Put_RequestWithInvalidIttQualification_ReturnsError
✅ Put_RequestWithInvalidIttSubject1_ReturnsError
✅ Put_RequestWithInvalidIttSubject2_ReturnsError
✅ Put_RequestWithInvalidQualificationProvider_ReturnsError
✅ Put_RequestWithInvalidQualificationSbject_ReturnsError
✅ Put_RequestWithInvalidQualificationSubject2_ReturnsError
✅ Put_RequestWithInvalidQualificationSubject3_ReturnsError
✅ Put_RequestWithInvalidQualificationType_ReturnsError
✅ Put_RequestWithNotFoundQualificationType_ReturnsError
✅ Put_SlugIdTooLong_ReturnsError
✅ Put_ValidRequestForOverseasQualifiedTeacher_ExecutesSuccessfully
✅ Put_ValidRequestInCrmWithResolvedTrn_ReturnsOkWithCompletedStatus
✅ Put_ValidRequestInCrmWithUnresolvedTrn_ReturnsOkWithPendingStatus
✅ Put_ValidRequestInDbWithResolvedTrn_ReturnsOkWithCompletedStatus
✅ Put_ValidRequestInDbWithUnresolvedTrn_ReturnsOkWithPendingStatus
✅ Put_ValidRequestWithInternationalQualifiedTeacherStatus_ExecutesSuccessfully
✅ Put_ValidRequestWithMultiWordFirstName_PopulatesContactMiddlenameField(firstName: "Joe Xavier", middleName: "", expectedFirstName: "Joe", expectedMiddleName: "Xavier")
✅ Put_ValidRequestWithMultiWordFirstName_PopulatesContactMiddlenameField(firstName: "Joe Xavier", middleName: "Andre", expectedFirstName: "Joe", expectedMiddleName: "Xavier Andre")
✅ Put_ValidRequestWithNewId_CreatesContactRecordAndReturnsCreated(trn: "1234567", expectedStatus: "Completed", expectedPotentialDuplicate: False)
✅ Put_ValidRequestWithNewId_CreatesContactRecordAndReturnsCreated(trn: null, expectedStatus: "Pending", expectedPotentialDuplicate: True)
✅ Put_ValidRequestWithNullQualification_Succeeds
✅ Put_ValidRequestWithNullQualificationSubject2_Succeeds
✅ Put_ValidRequestWithNullQualificationSubject3_Succeeds

✅ TeachingRecordSystem.Api.Tests.V2.Operations.GetTeacherTests

✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Given_invalid_trn_returns_error(trn: "123456")
✅ Given_invalid_trn_returns_error(trn: "12345678")
✅ Given_invalid_trn_returns_error(trn: "xxx")
✅ Given_match_returns_ok
✅ Given_match_returns_ok_and_returns_active_and_inactive_itt_records
✅ Given_match_returns_returns_ok_with_correct_allowPIIUpdates(allowPiiUpdates: False, expectedAllowPiiUpdates: False)
✅ Given_match_returns_returns_ok_with_correct_allowPIIUpdates(allowPiiUpdates: null, expectedAllowPiiUpdates: False)
✅ Given_match_returns_returns_ok_with_correct_allowPIIUpdates(allowPiiUpdates: True, expectedAllowPiiUpdates: True)
✅ Given_no_match_found_returns_notfound

✅ TeachingRecordSystem.Api.Tests.V2.Operations.GetTrnRequestTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ForTrnRequestInCrmWithTrnToken_ReturnsAccessYourQualificationsLink
✅ Get_ForTrnRequestInDbWithTrnToken_ReturnsAccessYourQualificationsLink
✅ Get_TrnRequestDoesNotExistForCurrentClient_ReturnsNotFound
✅ Get_TrnRequestDoesNotExistInDbOrCrm_ReturnsNotFound
✅ Get_ValidRequestInCrmWithResolvedTrn_ReturnsOkWithCompletedStatus
✅ Get_ValidRequestInCrmWithUnresolvedTrn_ReturnsOkWithPendingStatus
✅ Get_ValidRequestInDbWithResolvedTrn_ReturnsOkWithCompletedStatus
✅ Get_ValidRequestInDbWithUnresolvedTrn_ReturnsOkWithPendingStatus

✅ TeachingRecordSystem.Api.Tests.V2.Operations.SetIttOutcomeTests

✅ Given_AssessmentDate_would_lead_to_QtsDate_in_future_returns_error
✅ Given_missing_birthdate_returns_error
✅ Given_missing_IttProviderUkprn_returns_error
✅ Given_non_Pass_outcome_and_specified_AssessmentDate_returns_error(outcome: Deferred)
✅ Given_non_Pass_outcome_and_specified_AssessmentDate_returns_error(outcome: DeferredForSkillsTests)
✅ Given_non_Pass_outcome_and_specified_AssessmentDate_returns_error(outcome: Fail)
✅ Given_non_Pass_outcome_and_specified_AssessmentDate_returns_error(outcome: Withdrawn)
✅ Given_Passed_outcome_and_missing_AssessmentDate_returns_error
✅ Given_teacher_already_has_different_QTS_date_returns_error
✅ Given_teacher_is_fetched_using_correct_method_without_passing_slugid
✅ Given_teacher_is_fetched_using_fallback_if_notfound_using_slugid
✅ Given_teacher_passing_withdrawn_outcome_for_teacher_that_is_withdrawn_do_nothing_without_error
✅ Given_teacher_state_is_invalid_returns_error(failedReason: EytsDateMismatch, expectedErrorCode: 10003)
✅ Given_teacher_state_is_invalid_returns_error(failedReason: MultipleIttRecords, expectedErrorCode: 10004)
✅ Given_teacher_state_is_invalid_returns_error(failedReason: MultipleQtsRecords, expectedErrorCode: 10007)
✅ Given_teacher_state_is_invalid_returns_error(failedReason: NoMatchingIttRecord, expectedErrorCode: 10005)
✅ Given_teacher_state_is_invalid_returns_error(failedReason: NoMatchingQtsRecord, expectedErrorCode: 10006)
✅ Given_teacher_state_is_invalid_returns_error(failedReason: QtsDateMismatch, expectedErrorCode: 10003)
✅ Given_TRN_that_does_not_exist_returns_not_found
✅ Given_TRN_that_maps_to_multiple_teachers_return_error
✅ IttOutcome_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ IttOutcome_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ IttOutcome_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ IttOutcome_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])

✅ TeachingRecordSystem.Api.Tests.V2.Operations.SetNpqQualificationTests

✅ Given_completeddate_before_provider_earliest_completiondate_return_error
✅ Given_contact_for_trn_not_found_return_error
✅ Given_invalid_qualificationtype_return_error
✅ Given_request_without_trn_return_error
✅ Given_valid_request_for_qualification_not_createdbyapi_return_error
✅ Given_valid_request_return_nocontent
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["AssignQtls"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["GetPerson"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UnlockPerson"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UpdatePerson"])

✅ TeachingRecordSystem.Api.Tests.V2.Operations.UnlockTeacherTests

✅ Given_a_teacher_that_does_exist_and_is_locked_returns_ok
✅ Given_a_teacher_that_does_exist_but_is_not_locked_returns_ok(loginFailedCounter: 0)
✅ Given_a_teacher_that_does_exist_but_is_not_locked_returns_ok(loginFailedCounter: 1)
✅ Given_a_teacher_that_does_exist_but_is_not_locked_returns_ok(loginFailedCounter: 2)
✅ Given_a_teacher_that_does_exist_but_is_not_locked_returns_ok(loginFailedCounter: null)
✅ Given_a_teacher_that_does_not_exist_returns_notfound
✅ Given_a_teacher_that_has_activesanctions_returns_error
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["AssignQtls"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["GetPerson"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UpdateNpq"])
✅ UnlockTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UpdatePerson"])

✅ TeachingRecordSystem.Api.Tests.V2.Operations.UpdateTeacherTests

✅ Given_a_teacher_that_does_not_exist_returns_notfound
✅ Given_a_two_teachers_have_the_same_trn_return_conflict
✅ Given_asessmentonlyroute_programmetype_then_intraining_outcome_is_not_permitted
✅ Given_emailaddress_exceeeds_maxlength_returns_error
✅ Given_firstname_empty_returns_error
✅ Given_firstname_exceeeds_maxlength_returns_error
✅ Given_InitialTeacherTraining_is_empty_return_error
✅ Given_invalid_age_combination_returns_error(ageRangeFrom: -1, ageRangeTo: 1, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeFrom", expectedErrorMessage: "Age must be 0-19 inclusive.")
✅ Given_invalid_age_combination_returns_error(ageRangeFrom: 1, ageRangeTo: -1, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeTo", expectedErrorMessage: "Age must be 0-19 inclusive.")
✅ Given_invalid_age_combination_returns_error(ageRangeFrom: 5, ageRangeTo: 4, expectedErrorPropertyName: "InitialTeacherTraining.AgeRangeTo", expectedErrorMessage: "'Age to' cannot be less than 'age from'.")
✅ Given_invalid_dateofbirth_returns_error
✅ Given_invalid_email_returns_error
✅ Given_invalid_gendercode_returns_error
✅ Given_invalid_itt_provider_returns_error
✅ Given_invalid_itt_qualification_returns_error
✅ Given_invalid_itt_subject1_returns_error
✅ Given_invalid_itt_subject2_returns_error
✅ Given_invalid_itt_subject3_returns_error
✅ Given_invalid_outcome_return_error
✅ Given_invalid_qualification_country_returns_error
✅ Given_invalid_qualification_subject_returns_error
✅ Given_invalid_qualification_subject2_returns_error
✅ Given_invalid_qualification_subject3_returns_error
✅ Given_invalid_qualification_type_returns_error
✅ Given_lastname_empty_returns_error
✅ Given_lastname_exceeeds_maxlength_returns_error
✅ Given_middlename_exceeeds_maxlength_returns_error
✅ Given_missing_birthdate_returns_error
✅ Given_missing_initialteachertraining_providerukprn_returns_error
✅ Given_multiple_lookups_failed_returns_error
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: Apprenticeship)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: Core)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: CoreFlexible)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: EYITTGraduateEmploymentBased)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: EYITTGraduateEntry)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: EYITTSchoolDirectEarlyYears)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: FutureTeachingScholars)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: HEI)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: InternationalQualifiedTeacherStatus)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: LicensedTeacherProgramme)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: OverseasTrainedTeacherProgramme)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: PrimaryAndSecondaryPostgraduateFeeFunded)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: PrimaryAndSecondaryUndergraduateFeeFunded)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: ProviderLedPostgrad)
✅ Given_non_asessmentonlyroute_programmetypes_then_underassessment_outcome_is_not_permitted(programmeType: UndergraduateOptIn)
✅ Given_qts_registration_not_matched_return_error
✅ Given_request_slugid_exceeding_maxlength_return_error
✅ Given_request_with_existing_husid_for_another_teacher_returns_error
✅ Given_slugid_does_not_return_contact_fallback_to_trn_and_dob_return_nocontent
✅ Given_teacher_has_multiple_incomplete_itt_records_return_error
✅ Given_update_pii_request_returns_nocontent
✅ Given_update_with_firstname_provided_without_lastname_return_error
✅ Given_update_with_lastname_provided_without_firstname_return_error
✅ Given_update_with_middlename_provided_without_firstname_return_error
✅ Given_update_with_middlename_provided_without_lastname_return_error
✅ Given_valid_update_with_slugid_return_nocontent
✅ Given_valid_update_with_trn_and_dob_succeeds_return_nocontent
✅ Given_valid_update_without_qualification_succeeds
✅ UpdateTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["AssignQtls"])
✅ UpdateTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["GetPerson"])
✅ UpdateTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UnlockPerson"])
✅ UpdateTeacher_ClientDoesNotHaveSecurityRoles_ReturnsForbidden(roles: ["UpdateNpq"])

✅ TeachingRecordSystem.Api.Tests.V2.SwaggerTests

✅ Get_SwaggerEndpoint_ReturnsOk

✅ TeachingRecordSystem.Api.Tests.V3.SwaggerTests

✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240101")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240307")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240412")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240416")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240606")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240814")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240912")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20240920")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "20250203")
✅ Get_SwaggerEndpoint_ReturnsOk(minorVersion: "Next")

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.CreateDateOfBirthChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: False, newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newDateOfBirthString: "1990-07-01", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newDateOfBirthString: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_TeacherWithTrnDoesNotExist_ReturnsBadRequest
✅ Post_ValidRequest_CreatesIncident
✅ PostCreateDateOfBirthChange_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ PostCreateDateOfBirthChange_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ PostCreateDateOfBirthChange_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ PostCreateDateOfBirthChange_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.CreateNameChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: False, newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newFirstName: "First", newMiddleName: "Middle", newLastName: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(includeTrn: True, newFirstName: null, newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_TeacherWithTrnDoesNotExist_ReturnsBadRequest
✅ Post_ValidRequest_CreatesIncident
✅ PostNameChanges_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ PostNameChanges_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ PostNameChanges_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ PostNameChanges_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.FindTeachersTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_InvalidFindBy_ReturnsError(findBy: "", expectedErrorMessage: "Invalid matching policy.")
✅ Get_InvalidFindBy_ReturnsError(findBy: "BadFindBy", expectedErrorMessage: "The value 'BadFindBy' is not valid for FindBy.")
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "", dateOfBirth: "1990-01-01", expectedErrorPropertyName: "lastName", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "Smith", dateOfBirth: "", expectedErrorPropertyName: "dateOfBirth", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_NonExposableSanctionCode_IsNotReturned
✅ Get_ValidRequestWithMatchesOnLastName_ReturnsMappedContacts
✅ Get_ValidRequestWithMatchOnPreviousName_ReturnsMappedContacts

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherByTrnTests

✅ Get_TrnNotFound_ReturnsNotFound
✅ Get_UnauthenticatedRequest_ReturnsUnauthorized
✅ Get_ValidRequest_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithMultiWordFirstName_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithPendingDateOfBirthChange_ReturnsPendingDateOfBirthChangeTrue
✅ Get_ValidRequestForContactWithPendingNameChange_ReturnsPendingNameChangeTrue
✅ Get_ValidRequestWithAlerts_ReturnsExpectedAlertsContent
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ Get_ValidRequestWithInductionAndPersonHasNullDqtStatus_ReturnsNullInductionContent
✅ Get_ValidRequestWithInitialTeacherTraining_ReturnsExpectedInitialTeacherTrainingContent
✅ Get_ValidRequestWithMandatoryQualifications_ReturnsExpectedMandatoryQualificationsContent
✅ Get_ValidRequestWithNpqQualifications_ReturnsExpectedNpqQualificationsContent
✅ Get_ValidRequestWithPreviousNames_ReturnsExpectedPreviousNamesContent
✅ Get_ValidRequestWithSanctions_ReturnsExpectedSanctionsContent
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherTests

✅ Get_MultipleEYTSRecords_ReturnsMostRecent
✅ Get_MultipleQTSRecords_ReturnsMostRecent
✅ Get_TeacherWithTrnDoesNotExist_ReturnsForbidden
✅ Get_ValidRequestForContactWithMultiWordFirstName_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithPendingDateOfBirthChange_ReturnsPendingDateOfBirthChangeTrue
✅ Get_ValidRequestForContactWithPendingNameChange_ReturnsPendingNameChangeTrue
✅ Get_ValidRequestWithAlerts_ReturnsExpectedAlertsContent
✅ Get_ValidRequestWithEYTSandQTS_ReturnsExpectedResponse
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ Get_ValidRequestWithInductionAndPersonHasNullDqtStatus_ReturnsNullInductionContent
✅ Get_ValidRequestWithInitialTeacherTraining_ReturnsExpectedInitialTeacherTrainingContent
✅ Get_ValidRequestWithMandatoryQualifications_ReturnsExpectedMandatoryQualificationsContent
✅ Get_ValidRequestWithNpqQualifications_ReturnsExpectedNpqQualificationsContent
✅ Get_ValidRequestWithoutEYTSorQTS_ReturnsExpectedResponse
✅ Get_ValidRequestWithPreviousNames_ReturnsExpectedPreviousNamesContent
✅ Get_ValidRequestWithSanctions_ReturnsExpectedSanctionsContent
✅ Get_ValidRequestWithSingleEYTS_ReturnsExpectedResponse(eytsStatusValue: "220", eytsStatusDescription: "Early years trainee")
✅ Get_ValidRequestWithSingleEYTS_ReturnsExpectedResponse(eytsStatusValue: "221", eytsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleEYTS_ReturnsExpectedResponse(eytsStatusValue: "222", eytsStatusDescription: "Early years professional status")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "100", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "103", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "104", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "206", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "211", qtsStatusDescription: "Trainee teacher")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "212", qtsStatusDescription: "Assessment only route candidate")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "214", qtsStatusDescription: "Partial qualified teacher status")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "28", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "50", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "67", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "68", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "69", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "71", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "87", qtsStatusDescription: "Qualified")
✅ Get_ValidRequestWithSingleQts_ReturnsExpectedResponse(qtsStatusValue: "90", qtsStatusDescription: "Qualified")

✅ TeachingRecordSystem.Api.Tests.V3.V20240307.CreateTrnRequestTests

✅ Post_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Post_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Post_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Post_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Post_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Post_DateOfBirthBefore01011940_ReturnsError(year: 1900, month: 1, day: 1)
✅ Post_DuplicateContactMatchedOnDqtNinoAndDateOfBirth_ReturnsExistingTrnAndDoesNotCreateNewContact
✅ Post_DuplicateContactMatchedOnWorkforceDataNinoAndDqtDateOfBirth_ReturnsExistingTrnAndDoesNotCreateNewContact
✅ Post_NationalInsuranceNumberExceedingMaxLength_ReturnsError
✅ Post_NotMatchedToExistingRecord_CreatesTeacherWithTrnAndReturnsCompletedStatus
✅ Post_PotentialDuplicateContactMatchedOnDqtNinoOnly_CreatesContactWithoutTrnAndReturnsPendingStatus
✅ Post_PotentialDuplicateContactMatchedOnWorkforceDataNinoOnly_CreatesContactWithoutTrnAndReturnsPendingStatus
✅ Post_PotentialDuplicateContactOnNamesAndDateOfBirth_CreatesContactWithoutTrnAndReturnsPendingStatus
✅ Post_RequestIdExceedingCharacterLimit_ReturnsError
✅ Post_RequestWithDateOfBirthEqualOrAfterToday_ReturnsError(daysAfterToday: 0)
✅ Post_RequestWithDateOfBirthEqualOrAfterToday_ReturnsError(daysAfterToday: 1)
✅ Post_RequestWithExistingRequestInCrm_ReturnsConflict
✅ Post_RequestWithExistingRequestInDb_ReturnsConflict
✅ Post_RequestWithInvalidId_ReturnsError
✅ Post_RequestWithInvalidNino_ReturnsError
✅ Post_RequestWithoutEmail_ReturnsOk
✅ Post_RequestWithoutNino_ReturnsOk

✅ TeachingRecordSystem.Api.Tests.V3.V20240307.GetTrnRequestTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_MergedRecord_ReturnsExpectedResponse
✅ Get_TrnRequestNotFound_ReturnsNotFound
✅ Get_ValidCompletedTrnRequest_ReturnsExpectedResponse
✅ Get_ValidPendingTrnRequest_ReturnsExpectedResponse

✅ TeachingRecordSystem.Api.Tests.V3.V20240412.CreateDateOfBirthChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_TeacherWithTrnDoesNotExist_ReturnsBadRequest
✅ Post_ValidRequest_CreatesIncidentAndReturnsTicketNumber

✅ TeachingRecordSystem.Api.Tests.V3.V20240412.CreateNameChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: null, newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_ValidRequest_CreatesIncidentAndReturnsTicketNumber

✅ TeachingRecordSystem.Api.Tests.V3.V20240416.GetTeacherByTrnTests

✅ Get_DateOfBirthDoesNotMatchTeachingRecord_ReturnsNotFound
✅ Get_DateOfBirthMatchesTeachingRecord_ReturnsOk
✅ Get_DateOfBirthNotProvided_ReturnsOk

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.CreateDateOfBirthChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: "1990-07-01", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newDateOfBirthString: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_TeacherWithTrnDoesNotExist_ReturnsBadRequest
✅ Post_ValidRequest_CreatesIncidentAndReturnsTicketNumber

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.CreateNameChangeTests

✅ Post_EvidenceFileDoesNotExist_ReturnsError
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: null)
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: "Last", evidenceFileName: null, evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: "First", newMiddleName: "Middle", newLastName: null, evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_InvalidRequest_ReturnsBadRequest(newFirstName: null, newMiddleName: "Middle", newLastName: "Last", evidenceFileName: "evidence.jpg", evidenceFileUrl: "https://place.com/evidence.jpg")
✅ Post_ValidRequest_CreatesIncidentAndReturnsTicketNumber

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.CreateTrnRequestTests

✅ Post_RequestWithNullEmail_ReturnsError
✅ Post_RequestWithoutEmail_ReturnsOk
✅ Post_WithMultipleEmailAddresses_MatchesByEmail

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.FindPersonByLastNameAndDateOfBirthTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_InvalidFindBy_ReturnsError(findBy: "", expectedErrorMessage: "Invalid matching policy.")
✅ Get_InvalidFindBy_ReturnsError(findBy: "BadFindBy", expectedErrorMessage: "The value 'BadFindBy' is not valid for FindBy.")
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "", dateOfBirth: "1990-01-01", expectedErrorPropertyName: "lastName", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "Smith", dateOfBirth: "", expectedErrorPropertyName: "dateOfBirth", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_NonExposableSanctionCode_IsNotReturned
✅ Get_ValidRequestWithMatchesOnLastName_ReturnsMappedContacts
✅ Get_ValidRequestWithMatchOnPreviousName_ReturnsMappedContacts

✅ TeachingRecordSystem.Api.Tests.V3.V20240814.FindPersonByLastNameAndDateOfBirthTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_InvalidFindBy_ReturnsError(findBy: "", expectedErrorMessage: "Invalid matching policy.")
✅ Get_InvalidFindBy_ReturnsError(findBy: "BadFindBy", expectedErrorMessage: "The value 'BadFindBy' is not valid for FindBy.")
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "", dateOfBirth: "1990-01-01", expectedErrorPropertyName: "lastName", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_MissingPropertiesForFindBy_ReturnsError(lastName: "Smith", dateOfBirth: "", expectedErrorPropertyName: "dateOfBirth", expectedErrorMessage: "A value is required when findBy is 'LastNameAndDat"···)
✅ Get_NonExposableSanctionCode_IsNotReturned
✅ Get_ValidRequestWithMatchesOnLastName_ReturnsExpectedResponse
✅ Get_ValidRequestWithMatchOnPreviousName_ReturnsExpectedPersons

✅ TeachingRecordSystem.Api.Tests.V3.V20240814.FindPersonsByTrnAndDateOfBirthTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_IncorrectDateOfBirth_DoesNotReturnRecord
✅ Get_NonExposableSanctionCode_IsNotReturned
✅ Get_TooManyPeopleRequested_ReturnsError
✅ Get_ValidRequest_ReturnsMatchedRecord

✅ TeachingRecordSystem.Api.Tests.V3.V20240912.GetQtlsDateRequestTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_NoQtls_ReturnsExpectedResult
✅ Get_TrnNotFound_ReturnsNotFound
✅ Get_WithQtls_ReturnsExpectedResult

✅ TeachingRecordSystem.Api.Tests.V3.V20240920.FindPersonByLastNameAndDateOfBirthTests

✅ Get_ValidRequestWithMatchOnPersonWithAlerts_ReturnsExpectedAlertsContent

✅ TeachingRecordSystem.Api.Tests.V3.V20240920.FindPersonsByTrnAndDateOfBirthTests

✅ Get_ValidRequestWithMatchOnPersonWithAlerts_ReturnsExpectedAlertsContent

✅ TeachingRecordSystem.Api.Tests.V3.V20240920.GetPersonByTrnTests

✅ Get_AsAppropriateBodyWithItt_ReturnsIttProviders
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: _AllowIdSignInWithProhibitions)
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: HigherEducationQualifications)
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: MandatoryQualifications)
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: NpqQualifications)
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: PendingDetailChanges)
✅ Get_AsAppropriateBodyWithNotPermittedInclude_ReturnsForbidden(include: PreviousNames)
✅ Get_AsAppropriateBodyWithoutDateOfBirth_ReturnsForbidden
✅ Get_AsAppropriateBodyWithPermittedInclude_ReturnsOk(include: Alerts)
✅ Get_AsAppropriateBodyWithPermittedInclude_ReturnsOk(include: Induction)
✅ Get_AsAppropriateBodyWithPermittedInclude_ReturnsOk(include: InitialTeacherTraining)
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdatePerson"])
✅ Get_ValidRequestWithAlerts_ReturnsExpectedAlertsContent
✅ Get_WithItt_ReturnsExpectedItt

✅ TeachingRecordSystem.Api.Tests.V3.V20240920.GetPersonTests

✅ Get_ValidRequestWithAlerts_ReturnsExpectedAlertsContent

✅ TeachingRecordSystem.Api.Tests.V3.V20240920.SetDeceasedTests

✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["AssignQtls"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["GetPerson"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UnlockPerson"])
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq"])
✅ Put_DateOfDeathInFuture_ReturnsErrror
✅ Put_ExistingDateOfDeath_ReturnsNoContent
✅ Put_TrnNotFound_ReturnsBadRequest
✅ Put_ValidDateOfDeath_ReturnsNoContent
✅ Put_WithoutDateOfDeath_ReturnsBadRequest

✅ TeachingRecordSystem.Api.Tests.V3.V20250203.CreateTrnRequestTests

✅ Post_CreatesOutboxMessageInCrm
✅ Post_ValidAddressFields_PopulatesContactAddressFields

✅ TeachingRecordSystem.Api.Tests.V3.V20250203.SetCpdInductionStatusTests

✅ Put_FailedWithoutCompletedDate_ReturnsError
✅ Put_FailedWithoutStartDate_ReturnsError
✅ Put_InProgressWithCompletedDate_ReturnsError
✅ Put_InProgressWithoutStartDate_ReturnsError
✅ Put_PassedWithoutCompletedDate_ReturnsError
✅ Put_PassedWithoutStartDate_ReturnsError
✅ Put_PersonDoesNotExist_ReturnsNotFound
✅ Put_PersonDoesNotHaveQts_ReturnsError
✅ Put_RequiredToCompleteWithCompletedDate_ReturnsError
✅ Put_RequiredToCompleteWithStartDate_ReturnsError
✅ Put_StatusIsInvalid_ReturnsError(status: Exempt)
✅ Put_StatusIsInvalid_ReturnsError(status: FailedInWales)
✅ Put_StatusIsInvalid_ReturnsError(status: None)
✅ Put_TimestampIsBeforePreviousUpdate_ReturnsConflict
✅ Put_UserDoesNotHavePermission_ReturnsForbidden
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: Exempt)
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: Failed)
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: FailedInWales)
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: InProgress)
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: Passed)
✅ Put_ValidRequestWithFailed_UpdatesDbAndReturnsNoContent(currentStatus: RequiredToComplete)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: Exempt)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: Failed)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: FailedInWales)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: InProgress)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: Passed)
✅ Put_ValidRequestWithInProgress_UpdatesDbAndReturnsNoContent(currentStatus: RequiredToComplete)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: Exempt)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: Failed)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: FailedInWales)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: InProgress)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: Passed)
✅ Put_ValidRequestWithPassed_UpdatesDbAndReturnsNoContent(currentStatus: RequiredToComplete)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: Exempt)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: Failed)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: FailedInWales)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: InProgress)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: Passed)
✅ Put_ValidRequestWithRequiredToComplete_UpdatesDbAndReturnsNoContent(currentStatus: RequiredToComplete)

✅ TeachingRecordSystem.Api.Tests.V3.VersionReferenceTests

✅ CheckInterVersionDependencies(minorVersion: "20240101")
✅ CheckInterVersionDependencies(minorVersion: "20240307")
✅ CheckInterVersionDependencies(minorVersion: "20240412")
✅ CheckInterVersionDependencies(minorVersion: "20240416")
✅ CheckInterVersionDependencies(minorVersion: "20240606")
✅ CheckInterVersionDependencies(minorVersion: "20240814")
✅ CheckInterVersionDependencies(minorVersion: "20240912")
✅ CheckInterVersionDependencies(minorVersion: "20240920")
✅ CheckInterVersionDependencies(minorVersion: "20250203")
✅ CheckInterVersionDependencies(minorVersion: "Next")

✅ TeachingRecordSystem.Api.Tests.V3.VNext.SetWelshInductionStatusTests

✅ Put_PersonDoesNotExist_ReturnsNotFound
✅ Put_PersonDoesNotHaveQts_ReturnsError
✅ Put_UserDoesNotHavePermission_ReturnsForbidden
✅ Put_ValidRequestWithFailedForPersonWithHighPriorityStatus_DoesNotUpdateStatusAndReturnsNoContent
✅ Put_ValidRequestWithFailedForPersonWithRequiredToCompleteStatus_UpdatesDbAndReturnsNoContent
✅ Put_ValidRequestWithPassedForPersonWithHighPriorityStatus_DoesNotUpdateStatusAndReturnsNoContent
✅ Put_ValidRequestWithPassedForPersonWithRequiredToCompleteStatus_UpdatesDbAndReturnsNoContent