Skip to content

Bump Serilog from 3.1.1 to 4.0.1 in /TeachingRecordSystem #2941

Bump Serilog from 3.1.1 to 4.0.1 in /TeachingRecordSystem

Bump Serilog from 3.1.1 to 4.0.1 in /TeachingRecordSystem #2941

GitHub Actions / API test results succeeded Aug 8, 2024 in 0s

454 passed, 0 failed and 0 skipped

Tests passed successfully

✅ TeachingRecordSystem/tests/TeachingRecordSystem.Api.Tests/TestResults/_fv-az1442-714_2024-08-08_14_36_45.trx

454 tests were completed in 246s with 454 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
TeachingRecordSystem.Api.Tests.Endpoints.IdentityWebHooks.GetAnIdentityEndpointsTests 11✅ 12s
TeachingRecordSystem.Api.Tests.Filters.CrmServiceProtectionFaultExceptionFilterTests 3✅ 3s
TeachingRecordSystem.Api.Tests.V1.Operations.GetTeacherTests 7✅ 6s
TeachingRecordSystem.Api.Tests.V1.SwaggerTests 1✅ 1s
TeachingRecordSystem.Api.Tests.V1.UnitTests.GetTeacherHandlerTests 7✅ 65ms
TeachingRecordSystem.Api.Tests.V2.Operations.FindTeachersTests 10✅ 8s
TeachingRecordSystem.Api.Tests.V2.Operations.GetIttProvidersTests 1✅ 561ms
TeachingRecordSystem.Api.Tests.V2.Operations.GetOrCreateTrnRequestTests 36✅ 36s
TeachingRecordSystem.Api.Tests.V2.Operations.GetTeacherTests 10✅ 13s
TeachingRecordSystem.Api.Tests.V2.Operations.GetTrnRequestTests 9✅ 23s
TeachingRecordSystem.Api.Tests.V2.Operations.SetIttOutcomeTests 21✅ 13s
TeachingRecordSystem.Api.Tests.V2.Operations.SetNpqQualificationTests 7✅ 7s
TeachingRecordSystem.Api.Tests.V2.Operations.UnlockTeacherTests 8✅ 8s
TeachingRecordSystem.Api.Tests.V2.Operations.UpdateTeacherTests 59✅ 11s
TeachingRecordSystem.Api.Tests.V2.SwaggerTests 1✅ 1s
TeachingRecordSystem.Api.Tests.V3.SwaggerTests 6✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240101.CreateDateOfBirthChangeTests 9✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240101.CreateNameChangeTests 9✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240101.FindTeachersTests 8✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetEytsCertificateTests 3✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetInductionCertificateTests 5✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetNpqCertificateTests 7✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetQtsCertificateTests 4✅ 5s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherByTrnTests 15✅ 67s
TeachingRecordSystem.Api.Tests.V3.V20240101.GetTeacherTests 34✅ 118s
TeachingRecordSystem.Api.Tests.V3.V20240307.CreateTrnRequestTests 14✅ 3s
TeachingRecordSystem.Api.Tests.V3.V20240307.GetTrnRequestTests 5✅ 23s
TeachingRecordSystem.Api.Tests.V3.V20240412.CreateDateOfBirthChangeTests 7✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240412.CreateNameChangeTests 6✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240416.GetTeacherByTrnTests 3✅ 13s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateDateOfBirthChangeTests 7✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateNameChangeTests 6✅ 4s
TeachingRecordSystem.Api.Tests.V3.V20240606.CreateTrnRequestTests 2✅ 1s
TeachingRecordSystem.Api.Tests.V3.V20240606.FindTeachersTests 8✅ 7s
TeachingRecordSystem.Api.Tests.V3.V20240606.GetPersonByTrnTests 18✅ 72s
TeachingRecordSystem.Api.Tests.V3.V20240606.GetPersonTests 34✅ 120s
TeachingRecordSystem.Api.Tests.V3.VNext.GetQtlsDateRequestTests 4✅ 15s
TeachingRecordSystem.Api.Tests.V3.VNext.SetQtlsDateRequestTests 49✅ 77s

✅ 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.V1.UnitTests.GetTeacherHandlerTests

✅ Given_a_contact_the_details_are_mapped
✅ Given_a_contact_with_induction_the_details_are_mapped
✅ Given_a_contact_with_initial_teacher_training_the_details_are_mapped
✅ Given_a_contact_with_qualifications_the_details_are_mapped
✅ Given_a_contact_with_qualified_teacher_status_the_details_are_mapped
✅ Given_contact_has_induction_the_details_are_mapped(inductionStatus: Exempt, expectedInductionStatus: Exempt)
✅ Given_contact_has_induction_the_details_are_mapped(inductionStatus: Pass, expectedInductionStatus: Pass)

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

✅ FindTeachers_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UnlockPerson", "AssignQtls"])
✅ 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: ["UpdateNpq", "GetPerson", "UnlockPerson", "AssignQtls"])
✅ 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: ["UpdateNpq", "UnlockPerson", "AssignQtls"])
✅ 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: ["UpdateNpq", "GetPerson", "UnlockPerson", "AssignQtls"])
✅ 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: ["UpdateNpq", "GetPerson", "UnlockPerson", "AssignQtls"])

✅ 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: ["UpdatePerson", "GetPerson", "UnlockPerson", "AssignQtls"])

✅ 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: ["UpdateNpq", "UpdatePerson", "GetPerson", "AssignQtls"])

✅ 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: ["UpdateNpq", "GetPerson", "UnlockPerson", "AssignQtls"])

✅ 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: "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: ["UpdateNpq", "GetPerson", "UnlockPerson", "AssignQtls"])

✅ 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: ["UpdateNpq", "UnlockPerson", "AssignQtls"])

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

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UnlockPerson", "AssignQtls"])
✅ 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.GetEytsCertificateTests

✅ Get_EytsCertificateWithEytsDateDoesNotExist_ReturnsNotFound
✅ Get_EytsCertificateWithTrnDoesNotExist_ReturnsNotFound
✅ Get_ValidRequest_ReturnsExpectedResponse

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.GetInductionCertificateTests

✅ Get_InductionCertificateWhenInductionDoesNotExist_ReturnsNotFound
✅ Get_InductionCertificateWhenInductionHasNoCompletionDate_ReturnsNotFound
✅ Get_InductionCertificateWhenInductionNotPassed_ReturnsNotFound
✅ Get_InductionCertificateWhenNoTeacherAssociatedWithTrn_ReturnsNotFound
✅ Get_ValidRequest_ReturnsExpectedResponse

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.GetNpqCertificateTests

✅ Get_NpqCertificateWhenAssociatedTeacherIsNotTheAuthenticatedUser_ReturnsNotFound
✅ Get_NpqCertificateWhenNoAssociatedTeacher_ReturnsNotFound
✅ Get_NpqCertificateWhenQualificationDoesNotExist_ReturnsNotFound
✅ Get_NpqCertificateWhenQualificationHasNoAwardDate_ReturnsNotFound
✅ Get_NpqCertificateWhenQualificationIsNotActive_ReturnsNotFound
✅ Get_NpqCertificateWhenQualificationIsNotNpq_ReturnsNotFound
✅ Get_ValidRequest_ReturnsExpectedResponse

✅ TeachingRecordSystem.Api.Tests.V3.V20240101.GetQtsCertificateTests

✅ Get_QtsCertificateWithQtsDateDoesNotExist_ReturnsNotFound
✅ Get_QtsCertificateWithTrnDoesNotExist_ReturnsNotFound
✅ Get_ValidRequest_ReturnsExpectedResponse(exemptFromInduction: False)
✅ Get_ValidRequest_ReturnsExpectedResponse(exemptFromInduction: True)

✅ 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_ReturnsExpectedSanctionsContent
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ Get_ValidRequestWithInitialTeacherTraining_ReturnsExpectedInitialTeacherTrainingContent
✅ Get_ValidRequestWithMandatoryQualifications_ReturnsExpectedMandatoryQualificationsContent
✅ Get_ValidRequestWithNpqQualifications_ReturnsExpectedNpqQualificationsContent
✅ Get_ValidRequestWithPreviousNames_ReturnsExpectedPreviousNamesContent
✅ Get_ValidRequestWithSanctions_ReturnsExpectedSanctionsContent
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UnlockPerson", "AssignQtls"])

✅ 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_ReturnsExpectedSanctionsContent
✅ Get_ValidRequestWithEYTSandQTS_ReturnsExpectedResponse
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ 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: ["UpdateNpq", "UpdatePerson", "GetPerson", "UnlockPerson", "AssignQtls"])
✅ Post_DateOfBirthBefore01011940_ReturnsError(year: 1900, month: 1, day: 1)
✅ Post_NationalInsuranceNumberExceedingMaxLength_ReturnsError
✅ Post_NotMatchedToExistingRecord_CreatesTeacherWithTrnAndReturnsCompletedStatus
✅ Post_PotentialDuplicateContact_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: ["UpdateNpq", "UpdatePerson", "GetPerson", "UnlockPerson", "AssignQtls"])
✅ 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_RequestWithoutEmail_ReturnsOk
✅ Post_WithMultipleEmailAddresses_MatchesByEmail

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.FindTeachersTests

✅ Get_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UnlockPerson", "AssignQtls"])
✅ 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.V20240606.GetPersonByTrnTests

✅ Get_DateOfBirthDoesNotMatchTeachingRecord_ReturnsNotFound
✅ Get_DateOfBirthMatchesTeachingRecord_ReturnsOk
✅ Get_DateOfBirthNotProvided_ReturnsOk
✅ Get_TrnNotFound_ReturnsNotFound
✅ Get_UnauthenticatedRequest_ReturnsUnauthorized
✅ Get_ValidRequest_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithMultiWordFirstName_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithPendingDateOfBirthChange_ReturnsPendingDateOfBirthChangeTrue
✅ Get_ValidRequestForContactWithPendingNameChange_ReturnsPendingNameChangeTrue
✅ Get_ValidRequestWithAlerts_ReturnsExpectedSanctionsContent
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ Get_ValidRequestWithInitialTeacherTraining_ReturnsExpectedInitialTeacherTrainingContent
✅ Get_ValidRequestWithMandatoryQualifications_ReturnsExpectedMandatoryQualificationsContent
✅ Get_ValidRequestWithNpqQualifications_ReturnsExpectedNpqQualificationsContent
✅ Get_ValidRequestWithPreviousNames_ReturnsExpectedPreviousNamesContent
✅ Get_ValidRequestWithSanctions_ReturnsExpectedSanctionsContent
✅ GetTeacher_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UnlockPerson", "AssignQtls"])

✅ TeachingRecordSystem.Api.Tests.V3.V20240606.GetPersonTests

✅ Get_MultipleEYTSRecords_ReturnsMostRecent
✅ Get_MultipleQTSRecords_ReturnsMostRecent
✅ Get_TeacherWithTrnDoesNotExist_ReturnsForbidden
✅ Get_ValidRequestForContactWithMultiWordFirstName_ReturnsExpectedResponse
✅ Get_ValidRequestForContactWithPendingDateOfBirthChange_ReturnsPendingDateOfBirthChangeTrue
✅ Get_ValidRequestForContactWithPendingNameChange_ReturnsPendingNameChangeTrue
✅ Get_ValidRequestWithAlerts_ReturnsExpectedSanctionsContent
✅ Get_ValidRequestWithEYTSandQTS_ReturnsExpectedResponse
✅ Get_ValidRequestWithHigherEducationQualifications_ReturnsExpectedHigherEducationQualificationsContent
✅ Get_ValidRequestWithInduction_ReturnsExpectedInductionContent
✅ 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.VNext.GetQtlsDateRequestTests

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

✅ TeachingRecordSystem.Api.Tests.V3.VNext.SetQtlsDateRequestTests

✅ Put_ClearExistingQtlsDateWithNoQts_UpdatesContactAndReturnsOk
✅ Put_ClearQtlsWhenInductionStatusFail_ReturnsAccepted
✅ Put_ClearQtlsWhenInductionStatusFailedInWales_ReturnsAccepted
✅ Put_ClearQtlsWhenInductionStatusIsExempt_SetsInductionStatusExempt
✅ Put_ClearQtlsWhenInductionStatusIsInductionExtendedWithAB_SetsInductionStatusInductionExtended
✅ Put_ClearQtlsWhenInductionStatusIsInductionExtendedWithAppropriateBody_SetsInductionStatusBackToInductionExtended
✅ Put_ClearQtlsWhenInductionStatusIsNotYetCompleted_SetsInductionStatusNotYetCompleted
✅ Put_ClearQtlsWhenInductionStatusIsRequiredToComplete_SetsInductionStatusRequiredToComplete
✅ Put_ClearQtlsWhenInductionStatusPass_SetsInductionStatusPass
✅ Put_ClearQtlsWhenInductionStatusPassedInWales_SetsInductionStatusPassedInWales
✅ Put_ClearQtlsWithActiveAlert_ClearsQtlsAndCreatesReviewTask
✅ Put_ClientDoesNotHavePermission_ReturnsForbidden(roles: ["UpdateNpq", "UpdatePerson", "GetPerson", "UnlockPerson"])
✅ Put_InductionExtendedForAppropriateBodyWithoutActiveInductionPeriod_SetsInductionStatusExempt
✅ Put_InductionExtendedWithoutActiveInductionPeriod_SetsInductionStatusExempt
✅ Put_QtlsDateAfterAllQtsDates_SetsQtsDate
✅ Put_QtlsDateBeforeAllQtsDates_SetsQtsDate
✅ Put_QtlsDateInFuture_ReturnsErrror
✅ Put_RemoveQTLS_SetsQTSDateToEarliestQTSRegistrationDate(qtls: "01/01/1999", qts1: "02/02/2023", qts2: "02/02/2022", expectedQTS: "02/02/2022")
✅ Put_RemoveQTLS_SetsQTSDateToEarliestQTSRegistrationDate(qtls: "01/01/2024", qts1: "02/02/2001", qts2: "02/02/2004", expectedQTS: "02/02/2001")
✅ Put_RemoveQtlsDate_RevertsQtsDate
✅ Put_SetQtlsSWithSameQtlsDate_ReturnsAcceptedAndCreatesReviewTask
✅ Put_SetQtlsWhenInductionStatusFail_ReturnsAccepted
✅ Put_SetQtlsWhenInductionStatusFailedInWales_ReturnsAccepted
✅ Put_SetQtlsWhenInductionStatusIsExempt_SetsInductionStatusExempt
✅ Put_SetQtlsWhenInductionStatusIsInProgress_ReturnsStatusAcceptedWithTask
✅ Put_SetQtlsWhenInductionStatusIsNotYetCompleted_SetsInductionStatusExempt
✅ Put_SetQtlsWhenInductionStatusIsPass_SetsInductionStatusPass
✅ Put_SetQtlsWhenInductionStatusIsPassedInWales_SetsInductionStatusPassedInWales
✅ Put_SetQtlsWhenInductionStatusIsRequiredToComplete_SetsInductionStatusExempt
✅ Put_SetQtlsWithActiveAlert_SetsQtlsAndCreatesReviewTask
✅ Put_TrnNotFound_ReturnsNotFound
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Exempt, existingInductionExemptionReason: Exempt, incomingQtls: "01/01/2021", expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Exempt, existingInductionExemptionReason: Exempt, incomingQtls: null, expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Fail, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Fail, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Fail, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: Fail, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: InductionExtended, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: InductionExtended, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: InductionExtended, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: InProgress, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: InProgress, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: InProgress, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: NotYetCompleted, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: NotYetCompleted, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: NotYetCompleted, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Pass, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Pass, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: Pass, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: Pass, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: PassedinWales, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: PassedinWales, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: PassedinWales, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: PassedinWales, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: RequiredtoComplete, existingInductionExemptionReason: null, incomingQtls: "01/01/2021", expectetInductionStatus: Exempt, expectedHttpStatus: OK)
✅ Put_ValidQtlsDateWithNoQts_SetsInductionStatus(existingInductionStatus: RequiredtoComplete, existingInductionExemptionReason: null, incomingQtls: null, expectetInductionStatus: RequiredtoComplete, expectedHttpStatus: OK)
✅ Put_ValidQtlsWithNoQts_SetsQtsDate
✅ Put_ValidQtsDateWithNoExistingQtsDate_ReturnsExpectedResult