From dbebdcc1452e75b35993560d5d41b9945e7bbcb9 Mon Sep 17 00:00:00 2001 From: Rachael Bontrager Date: Tue, 3 Dec 2024 09:28:42 -0600 Subject: [PATCH 1/5] bug/10289-rachael-detox-fix-overnight-failures (#10290) --- VAMobile/e2e/tests/HomeScreen.e2e.ts | 2 +- VAMobile/e2e/tests/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VAMobile/e2e/tests/HomeScreen.e2e.ts b/VAMobile/e2e/tests/HomeScreen.e2e.ts index 0c98dc00a6..06f5abbbc6 100644 --- a/VAMobile/e2e/tests/HomeScreen.e2e.ts +++ b/VAMobile/e2e/tests/HomeScreen.e2e.ts @@ -33,7 +33,7 @@ describe('Home Screen', () => { }) it(':android: should disable AF use case 3', async () => { - await disableAF(undefined, 'WG_Home', 'AllowFunction') + await disableAF(undefined, 'WG_Home', undefined, 'AllowFunction') await device.launchApp({ newInstance: true, permissions: { notifications: 'YES' } }) await loginToDemoMode() }) diff --git a/VAMobile/e2e/tests/utils.ts b/VAMobile/e2e/tests/utils.ts index 9d0d02374b..564ed27037 100644 --- a/VAMobile/e2e/tests/utils.ts +++ b/VAMobile/e2e/tests/utils.ts @@ -548,7 +548,7 @@ export async function enableAF(AFFeature, AFUseCase, AFAppUpdate = false) { * @param AFUseCaseName: Name of the AF type. * @param AFAppUpdate: Boolean value that tells the script whether to enable the update now button or not * */ -export async function disableAF(featureNavigationArray, AFFeature, AFUseCaseName) { +export async function disableAF(featureNavigationArray, AFFeature, AFFeatureName, AFUseCaseName) { if (AFUseCaseName === 'AllowFunction') { await element(by.id(CommonE2eIdConstants.HOME_TAB_BUTTON_ID)).tap() } else { From 33836a9b06759c973547c39263d57b46ea5d59ef Mon Sep 17 00:00:00 2001 From: Rachael Bontrager Date: Tue, 3 Dec 2024 10:00:38 -0600 Subject: [PATCH 2/5] spike/9918-rachael-detox-add-what-to-run-to-code (#9919) --- .github/workflows/e2e_detox_mapping.yml | 192 ++++++------ VAMobile/e2e/detoxMapping.json | 380 ++++++++++++++++++++++++ 2 files changed, 477 insertions(+), 95 deletions(-) create mode 100644 VAMobile/e2e/detoxMapping.json diff --git a/.github/workflows/e2e_detox_mapping.yml b/.github/workflows/e2e_detox_mapping.yml index 2c86b02b9a..ff3b7e0f0c 100644 --- a/.github/workflows/e2e_detox_mapping.yml +++ b/.github/workflows/e2e_detox_mapping.yml @@ -51,108 +51,110 @@ jobs: - name: Get SHA id: get-sha run: echo "sha=$(git rev-parse origin/develop)" >> $GITHUB_OUTPUT - - name: Get file difference by directory - id: changed_files_dir - uses: tj-actions/changed-files@v41 - with: - dir_names: true - json: true - base_sha: "${{ steps.get-sha.outputs.sha }}" - name: Get file difference by file name id: changed_files_file_name uses: tj-actions/changed-files@v41 with: - json: true base_sha: "${{ steps.get-sha.outputs.sha }}" + path: './VAMobile/src' + - name: Check if directory/file is in detox mapping + id: detox_mapping_check + run: | + fileNames=$(jq -r '.files' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + directoryNames=$(jq -r '.directory' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for file in ${{steps.changed_files_file_name.outputs.all_changed_and_modified_files}}; do + baseFile=$(echo $file | sed 's#.*/##') + baseFile=$(echo $baseFile | sed 's/ //g') + fileFound=$(echo $fileNames | jq --arg fileName "$baseFile" '.[$fileName]') + if [[ "$fileFound" == "null" ]]; then + fileDirectory=$(dirname $file) + baseDirectory=$(echo $fileDirectory | sed 's#.*/##') + baseDirectory=$(echo $baseDirectory | sed 's/ //g') + directoryFound=$(echo $directoryNames | jq --arg fileName "$baseDirectory" '.[$fileName]') + if [[ "$directoryFound" == "null" ]]; then + echo "Missing File: $file or missing directory: $fileDirectory" + exit 1 + fi + fi + done + - name: Check if directory/file is spelled correctly + id: detox_mapping_spell_check + run: | + directoryNames=$(jq -r '.directory' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for directory in $(echo $directoryNames | jq -r 'keys | .[]'); do + if [[ "$(find ${{ github.workspace }}/VAMobile/src -type d -name "$directory")" == "" ]]; then + directoryMisspelled="true" + echo "Directory misspelled: $directory" + exit 1 + fi + done + fileNames=$(jq -r '.files' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for file in $(echo $fileNames | jq -r 'keys | .[]'); do + if [[ "$(find ${{ github.workspace }}/VAMobile/src -type f -name "$file")" == "" ]]; then + fileMisspelled="true" + echo "File misspelled: $file" + exit 1 + fi + done + - name: Check if e2eNames is spelled correctly + id: detox_mapping_e2e_names_spell_check + run: | + directoryNames=$(jq -r '.directory' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for directory in $(echo $directoryNames | jq 'keys | .[]'); do + for e2eTest in $(echo $directoryNames | jq --argjson directory "$directory" --raw-output '.[$directory] | .[]'); do + if [[ "$(find ${{ github.workspace }}/VAMobile/e2e/tests -type f -name "${e2eTest}.e2e.ts")" == "" ]]; then + echo "e2eTests in $directory are not spelled correctly" + echo "$e2eTests misspelled: $e2eTest" + exit 1 + fi + done + done + fileNames=$(jq -r '.files' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for file in $(echo $fileNames | jq 'keys | .[]'); do + for e2eTest in $(echo $fileNames | jq --argjson file "$file" --raw-output '.[$file] | .[]'); do + if [[ "$(find ${{ github.workspace }}/VAMobile/e2e/tests -type f -name "${e2eTest}.e2e.ts")" == "" ]]; then + echo "e2eTests in $file are not spelled correctly" + echo "$e2eTests misspelled: $e2eTest" + exit 1 + fi + done + done - name: Get testing matrix array id: testing_matrix run: | - resp=$(echo ${{steps.changed_files_dir.outputs.all_changed_and_modified_files}} | - jq 'select(contains(["LoginScreen"])) += ["LoginScreen"] | - select(contains(["AppealDetailsScreen"])) += ["Appeals", "AppealsExpanded"] | - select(contains(["NeedHelpData"]) or contains(["NoClaimsAndAppeals"]) or contains(["NoClaimsAndAppealsAccess"]) or contains(["ClaimsAndAppealsListView"]) or contains(["claimsAndAppeals"])) += ["Appeals", "AppealsExpanded", "Claims"] | - select(contains(["ClaimDetailsScreen"]) or contains(["ClaimLettersScreen"]) or contains(["SubmitEvidence"]) or contains(["ClaimsHistoryScreen"])) += ["Claims"] | - select(contains(["ClaimLettersScreen"]) or contains(["decisionLetters"])) += ["DecisionLetters"] | - select(contains(["DisabilityRatingsScreen"]) or contains(["disabilityRating"])) += ["DisabilityRatings", "VeteranStatusCard"] | - select(contains(["Letters"]) or contains(["letters"])) += ["VALetters"] | - select(contains(["Appointments"]) or contains(["appointments"])) += ["Appointments", "AppointmentsExpanded"] | - select(contains(["CernerAlert"]) or contains(["Facilities"])) += ["Cerner"] | - select(contains(["Pharmacy"]) or contains(["prescriptions"])) += ["Prescriptions"] | - select(contains(["SecureMessaging"]) or contains(["secureMessaging"])) += ["Messages"] | - select(contains(["Vaccines"]) or contains(["vaccines"])) += ["VaccineRecords"] | - select(contains(["ContactVAScreen"])) += ["HomeScreen"] | - select(contains(["MilitaryInformationScreen"]) or contains(["militaryService"]) or contains(["Nametag"])) += ["MilitaryInformation", "VeteranStatusCard"] | - select(contains(["PersonalInformationScreen"]) or contains(["demographics"]) or contains(["personalInformation"])) += ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"] | - select(contains(["SettingsScreen"])) += ["SettingsScreen"] | - select(contains(["VeteransCrisisLineScreen"])) += ["VeteransCrisisLine", "SignIn"] | - select(contains(["VeteranStatusScreen"])) += ["VeteranStatusCard"] | - select(contains(["OnboardingCarousel"])) += ["Onboarding"] | - select(contains(["PaymentHistory"]) or contains(["payments"])) += ["Payments"] | - select(contains(["DirectDepositScreen"]) or contains(["directDeposit"])) += ["DirectDeposit"] | - select(contains(["SplashScreen"])) += ["Onboarding", "LoginScreen"] | - select(contains(["auth"])) += ["SignIn"] | - select(contains(["authorizedServices"])) += ["Appeals", "AppealsExpanded", "Appointments", "AppointmentsExpanded", "Claims", "DirectDeposit", "DisabilityRatings", "PersonalInformationScreen", "VALetters", "MilitaryInformation", "Payments", "Prescriptions", "Messages", "VeteranStatusCard"] | - select(contains(["contactInformation"]) or contains(["ContactInformationScreen"])) += ["ContactInformation", "VALetters"] | - select(contains(["NotificationManager"])) += ["SettingsScreen", "PushNotifications", "Onboarding"] | - select(contains(["Types"]) or contains(["VAImage"])) += - ["AvailabilityFramework", "Cerner", "ContactInformation", "VALetters", "LoginScreen", "Onboarding", "ProfileScreen", "PushNotifications", "SettingsScreen", "SignIn", "VaccineRecords", "Claims", "Appeals", "AppealsExpanded", "DisabilityRatings", "Appointments", "AppointmentsExpanded", "Prescriptions", "Messages", "MilitaryInformation", "HomeScreen", "VeteransCrisisLine", "VeteranStatusCard", "DirectDeposit", "Payments", "PersonalInformationScreen"] - | unique') - resp_file=$(echo ${{steps.changed_files_file_name.outputs.all_changed_and_modified_files}} | - jq 'select(contains(["appealData.tsx"])) += ["Appeals", "AppealsExpanded"] | - select(contains(["claimData.tsx"]) or contains(["ClaimsScreen.tsx"]) or contains(["Claims.json"]) or contains(["Claims.ts"]) or contains(["ClaimsAndAppealsSlice"]) - or contains(["ClaimsAndAppealsData"]) or contains(["claims.ts"]) or contains(["claims.tsx"])) += ["Claims", "Appeals", "AppealsExpanded", "DecisionLetters"] | - select(contains(["DisabilityRatingData"]) or contains(["disabilityRating.json"]) or contains(["disabilityRating.ts"])) += ["DisabilityRatings", "VeteranStatusCard"] | - select(contains(["letters.json"]) or contains(["letters.ts"]) or contains(["Letters.ts"]) or contains(["LettersData"]) or contains(["LetterBeneficiaryData"]) or contains(["BasicError"])) += ["VALetters"] | - select(contains(["HealthScreen.tsx"]) or contains(["HealthStackScreens.tsx"])) += ["Appointments", "AppointmentsExpanded", "Cerner", "Prescriptions", "Messages", "VaccineRecords"] | - select(contains(["BenefitsScreen.tsx"]) or contains(["BenefitsStackScreens.tsx"])) += ["DisabilityRating", "Claims", "Appeals", "VALetters"] | - select(contains(["Appointments.json"]) or contains(["Appointments.ts"]) or contains(["AppointmentsSlice.ts"]) or contains(["appointments.ts"]) or contains(["canclAppointment.tsx"]) or contains(["getAppointments.tsx"]) or contains(["appointments.tsx"])) += ["Appointments", "AppointmentsExpanded"] | - select(contains(["getFacilitiesInfo"]) or contains(["FacilityData"])) += ["Cerner"] | - select(contains(["Prescriptions.json"]) or contains(["Prescriptions.ts"]) or contains(["SelectionList"]) or contains(["MultiTouchCard"]) or contains(["RadioGroupModal"])) += ["Prescriptions"] | - select(contains(["SecureMessaging.json"]) or contains(["SecureMessaging.ts"]) or contains(["InLineTextWithIcons"]) - or contains(["MessageAlert"]) or contains(["MessageList"]) or contains(["MessagesCountTag"]) or contains(["secureMessaging.ts"]) or contains(["TextLineWithIcon"])) += ["Messages"] | - select(contains(["vaccine"])) += ["VaccineRecords"] | - select(contains(["EncourageUpdate.tsx"]) or contains(["WhatsNew.tsx"])) += ["HomeScreen"] | - select(contains(["countries"]) or contains(["militaryPostOffices"]) or contains(["militaryStates"]) or contains(["states.ts"]) or contains(["PhoneData"]) or contains(["EmailData"])) += ["ContactInformation"] | - select(contains(["ServiceHistoryData"])) += ["MilitaryInformation", "VeteranStatusCard"] | - select(contains(["demographics"]) or contains(["PersonalInformation"]) or contains(["UserData"]) or contains(["Demographics"])) += ["PeronalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"] | - select(contains(["settingsSlice.ts"])) += ["SettingsScreen"] | - select(contains(["ProfileScreen.tsx"]) or contains(["profile.json"]) or contains(["profile.ts"])) += ["ProfileScreen", "ContactInformation", "MilitaryInformation", "PersonalInformationScreen", "SettingsScreen", "VALetters", "Payments"] | - select(contains(["HomeScreen.tsx"]) or contains(["HomeStackScreens.tsx"])) += ["ContactVAScreen", "ProfileScreen", "VeteranStatusCard"] | - select(contains(["carousel"])) += ["Onboarding"] | - select(contains(["payments.json"]) or contains(["payments.ts"])) += ["Payments"] | - select(contains(["accounts.ts"])) += ["DirectDeposit"] | - select(contains(["PaymentsScreen.tsx"]) or contains(["PaymentsStackScreens.tsx"])) += ["Payments", "DirectDeposit"] | - select(contains(["decisionLetters.ts"]) or contains(["decisionLetters.json"]) or contains(["claimData.tsx"])) += ["Claims"] | - select(contains(["getAuthorizedServices.json"])) += ["Appeals", "AppealsExpanded", "Appointments", "AppointmentsExpanded", "Claims", "DirectDeposit", "DisabilityRatings", "PersonalInformationScreen", "VALetters", "MilitaryInformation", "Payments", "Prescriptions", "Messages", "VeteranStatusCard"] | - select(contains(["notifications.json"]) or contains(["notifications.ts"]) or contains(["Notifications.ts"])) += ["SettingsScreen", "PushNotifications"] | - select(contains(["ErrorComponent"])) += ["Appeals", "AppealsExpanded", "DisabilityRatings", "VALetters", "Appointments", "AppointmentsExpanded", "Prescriptions", "Messages", "VaccineRecords", "ProfileScreen", "ContactInformation", "MilitaryInformation", "PersonalInformationScreen", "SettingsScreen", "Payments"] | - select(contains(["VAModalPicker"])) += ["Appointments", "Messages", "Payments"] | - select(contains(["RadioGroup"])) += ["PersonalInformationScreen", "ContactInformation"] | - select(contains(["VATextInput"]) or contains(["WaygateWrapper"])) += ["AvailabilityFramework"] | - select(contains(["AccordionCollapsible"])) += ["Claims", "Messages"] | - select(contains(["AlertWithHaptics"])) += ["AvailabilityFramework", "VALetters", "Appointments", "Prescriptions", "Messages", "ContactInformation", "DirectDeposit", "Cerner", "Prescriptions", "ContactInformation"] | - select(contains(["AppVersionAndBuild"])) += ["LoginScreen", "SettingsScreen"] | - select(contains(["ClickForActionLink"]) or contains(["ClickToCallPhoneNumber"])) += ["AvailabilityFramework", "Claims", "Appeals", "DisabilityRatings", "Appointments", "Prescriptions", "Messages", "MilitaryInformation", "HomeScreen", "VeteransCrisisLine", "VeteranStatusCard", "DirectDeposit", "Payments", "PersonalInformationScreen"] | - select(contains(["CollapsibleView"])) += ["Appeals", "AppealsExpanded", "Messages", "DirectDeposit"] | - select(contains(["DefaultList"])) += ["Claims", "DisabilityRattings", "VALetters", "ContactInformation", "Appointments", "VaccineRecords", "MilitaryInformation", "PersonalInformationScreen", "DirectDeposit", "Prescriptions", "Payments", "SettingsScreen"] | - select(contains(["LabelTag"])) += ["Prescriptions", "Messages"] | - select(contains(["SimpleList"])) += ["Messages", "Claims", "Appeals", "VALetters", "Apppointments", "Prescriptions", "VaccineRecords"] | - select(contains(["Pagination"])) += ["Appointments", "Claims", "Appeals", "AppealsExpanded", "Prescriptions", "Messages", "Payments", "VaccinesScreen"] | - select(contains(["SnackBar"])) += ["Claims", "Messages", "ContactInformation", "PersonalInformationScreen", "DirectDeposit"] | - select(contains(["VABulletList"])) += ["Appeals", "AppealsExpanded", "Claims", "Prescriptions", "Cerner", "Messages", "Onboarding", "SignIn", "SettingsScreen"] | - select(contains(["CrisisLineButton"])) += ["HomeScreen", "SignIn", "LoginScreen", "VeteransCrisisLine"] | - select(contains(["ActivityButton.tsx"])) += ["HomeScreen", "Prescriptions", "Appointments", "Claims", "Appeals", "DecisionLetters"] | - select(contains(["LinkRow.tsx"])) += ["HomeScreen"] | - select(contains(["Screens.ts"]) or contains(["BasicError"]) or contains(["LoadingComponent"]) or contains(["Box"]) or contains(["HeaderTitle"]) or contains(["LargeNavButton"]) - or contains(["TextArea"]) or contains(["TextLines"]) or contains(["TextView"]) or contains(["backButtonLabels"]) or contains(["common.ts"])) += - ["AvailabilityFramework", "Cerner", "ContactInformation", "VALetters", "LoginScreen", "Onboarding", "ProfileScreen", "PushNotifications", "SettingsScreen", "SignIn", "VaccineRecords", "Claims", "Appeals", "AppealsExpanded", "DisabilityRatings", "Appointments", "AppointmentsExpanded", "Prescriptions", "Messages", "MilitaryInformation", "HomeScreen", "VeteransCrisisLine", "VeteranStatusCard", "DirectDeposit", "Payments", "PersonalInformationScreen"] - | unique ') - - test_matrix=$(echo "$resp" | jq --argjson a "${resp_file}" --argjson b "${resp}" --compact-output '$a + $b | unique') - echo "$test_matrix" - test_matrix=$(echo $test_matrix | jq --compact-output 'map(select(. == ("Appeals", "AppealsExpanded", "Appointments", "AppointmentExpanded", "AvailabilityFramework", "Cerner", "Claims", - "ContactInformation", "DirectDeposit", "DisabilityRatings", "HomeScreen", "VALetters", "LoginScreen", "Messages", "MilitaryInformation", "Navigation", "Onboarding", "Payments", - "PersonalInformationScreen", "Prescriptions", "ProfileScreen", "PushNotifications", "SettingsScreen", "SignIn", "VaccineRecords", - "VeteransCrisisLine", "VeteranStatusCard")))') + firstInstanceFile="true" + directoryNames=$(jq -r '.directory' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + fileNames=$(jq -r '.files' ${{ github.workspace }}/VAMobile/e2e/detoxMapping.json) + for file in ${{steps.changed_files_file_name.outputs.all_changed_and_modified_files}}; do + baseFile=$(echo $file | sed 's#.*/##') + baseFile=$(echo $baseFile | sed 's/ //g') + fileFound=$(echo $fileNames | jq --arg fileName "$baseFile" '.[$fileName]') + if [[ "$fileFound" == "null" ]]; then + fileDirectory=$(dirname $file) + baseDirectory=$(echo $fileDirectory | sed 's#.*/##') + baseDirectory=$(echo $baseDirectory | sed 's/ //g') + directoryFound=$(echo $directoryNames | jq --arg fileName "$baseDirectory" '.[$fileName]') + if [[ "$firstInstanceFile" == "true" ]]; then + test_matrix=$directoryFound + test_matrix=$(echo $test_matrix | jq -c '.') + firstInstanceFile="false" + else + test_matrix=$(echo $test_matrix | jq -c '.') + test_matrix=$(echo $test_matrix | jq --argjson matrix "$directoryFound" '. += $matrix') + fi + else + if [[ "$firstInstanceFile" == "true" ]]; then + test_matrix=$fileFound + test_matrix=$(echo $test_matrix | jq -c '.') + firstInstanceFile="false" + else + test_matrix=$(echo $test_matrix | jq -c '.') + test_matrix=$(echo $test_matrix | jq --argjson matrix "$fileFound" '. += $matrix') + fi + fi + done + test_matrix=$(echo $test_matrix | jq -c 'unique') echo "TESTING_MATRIX=$test_matrix" >> $GITHUB_OUTPUT echo "TEST_RUN=true" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/VAMobile/e2e/detoxMapping.json b/VAMobile/e2e/detoxMapping.json new file mode 100644 index 0000000000..44ea6ce829 --- /dev/null +++ b/VAMobile/e2e/detoxMapping.json @@ -0,0 +1,380 @@ +{ + "directory": { + "appointments": ["Appointments", "AppointmentsExpanded"], + "authorizedServices": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "Claims", + "DirectDeposit", + "DisabilityRatings", + "PersonalInformationScreen", + "VALetters", + "MilitaryInformation", + "Payments", + "Prescriptions", + "Messages", + "VeteranStatusCard" + ], + "claimsAndAppeals": ["Appeals", "AppealsExpanded", "Claims"], + "contactInformation": ["ContactInformation", "VALetters"], + "decisionLetters": ["DecisionLetters"], + "demographics": ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"], + "directDeposit": ["DirectDeposit"], + "disabilityRating": ["DisabilityRatings", "VeteranStatusCard"], + "facilities": ["Cerner"], + "letters": ["VALetters"], + "militaryService": ["MilitaryInformation", "VeteranStatusCard"], + "notifications": ["SettingsScreen", "PushNotifications"], + "payments": ["Payments"], + "personalInformation": ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"], + "prescriptions": ["Prescriptions"], + "secureMessaging": ["Messages"], + "types": [ + "AvailabilityFramework", + "Cerner", + "ContactInformation", + "VALetters", + "LoginScreen", + "Onboarding", + "ProfileScreen", + "PushNotifications", + "SettingsScreen", + "SignIn", + "VaccineRecords", + "Claims", + "Appeals", + "AppealsExpanded", + "DisabilityRatings", + "Appointments", + "AppointmentsExpanded", + "Prescriptions", + "Messages", + "MilitaryInformation", + "HomeScreen", + "VeteransCrisisLine", + "VeteranStatusCard", + "DirectDeposit", + "Payments", + "PersonalInformationScreen" + ], + "vaccines": ["VaccineRecords"], + "components": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "LoginScreen": ["LoginScreen"], + "AppealDetailsScreen": ["Appeals", "AppealsExpanded"], + "ClaimDetailsScreen": ["Claims"], + "ClaimLettersScreen": ["Claims"], + "ClaimsAndAppealsListView": ["Appeals", "AppealsExpanded", "Claims"], + "ClaimsHistoryScreen": ["Claims"], + "NeedHelpData": ["Appeals", "AppealsExpanded", "Claims"], + "NoClaimsAndAppeals": ["Appeals", "AppealsExpanded", "Claims"], + "NoClaimsAndAppealsAccess": ["Appeals", "AppealsExpanded", "Claims"], + "ClaimsScreen": ["Appeals", "AppealsExpanded", "Claims"], + "DisabilityRatingsScreen": ["DisabilityRatings", "VeteranStatusCard"], + "Letters": ["VALetters"], + "BenefitsScreen": ["DisabilityRatings", "Claims", "Appeals", "VALetters"], + "HealthScreen": ["Appointments", "AppointmentsExpanded", "Cerner", "Prescriptions", "Messages", "VaccineRecords"], + "Appointments": ["Appointments", "AppointmentsExpanded"], + "CernerAlert": ["Cerner"], + "HealthHelp": ["Cerner"], + "Pharmacy": ["Prescriptions"], + "SecureMessaging": ["Messages"], + "Vaccines": ["VaccineRecords"], + "HomeScreen": ["HomeScreen", "ProfileScreen", "VeteranStatusCard"], + "ContactVAScreen": ["HomeScreen"], + "ProfileScreen": [ + "ProfileScreen", + "ContactInformation", + "MilitaryInformation", + "PersonalInformationScreen", + "SettingsScreen", + "VALetters", + "Payments" + ], + "ContactInformationScreen": ["ContactInformation", "VALetters"], + "MilitaryInformationScreen": ["MilitaryInformation", "VeteranStatusCard"], + "PersonalInformationScreen": ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"], + "SettingsScreen": ["SettingsScreen"], + "VeteransCrisisLineScreen": ["VeteransCrisisLine", "SignIn"], + "VeteranStatusScreen": ["VeteranStatusCard"], + "OnboardingCarousel": ["Onboarding"], + "PaymentsScreen": ["Payments", "DirectDeposit"], + "DirectDepositScreen": ["DirectDeposit"], + "PaymentHistory": ["Payments"], + "SplashScreen": ["Onboarding", "LoginScreen"], + "slices": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "translations": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "utils": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "device": [], + "BiometricsPreferenceScreen": [], + "SyncScreen": [], + "WebviewScreen": [], + "styles": [] + }, + "files": { + "accounts.ts": ["DirectDeposit"], + "appointments.ts": ["Appointments", "AppointmentsExpanded"], + "claims.ts": ["Claims", "Appeals", "AppealsExpanded"], + "common.ts": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "countries.ts": ["ContactInformation"], + "militaryPostOffices.ts": ["ContactInformation"], + "militaryStates.ts": ["ContactInformation"], + "screens.ts": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "secureMessaging.ts": ["Messages"], + "states.ts": ["ContactInformation"], + "appointments.json": ["Appointments", "AppointmentsExpanded"], + "claims.json": ["Claims", "Appeals", "AppealsExpanded"], + "contactInformation.json": ["ContactInformation", "VALetters"], + "decisionLetters.json": ["DecisionLetters"], + "disablityRating.json": ["DisabilityRatings"], + "getAuthorizedServices.json": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "Claims", + "DirectDeposit", + "DisabilityRatings", + "PersonalInformationScreen", + "VALetters", + "MilitaryInformation", + "Payments", + "Prescriptions", + "Messages", + "VeteranStatusCard" + ], + "getFacilitiesInfo.json": ["Cerner"], + "getFacilitiesInfoCerner.json": ["Cerner"], + "letters.json": ["VALetters"], + "notifications.json": ["SettingsScreen", "PushNotifications"], + "payments.json": ["Payments"], + "personalInformation.json": ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"], + "prescriptions.json": ["Prescriptions"], + "profile.json": [ + "ProfileScreen", + "ContactInformation", + "MilitaryInformation", + "PersonalInformationScreen", + "SettingsScreen", + "VALetters", + "Payments" + ], + "secureMessaging.json": ["Messages"], + "vaccine.json": ["VaccineRecords"], + "decisionLetters.ts": ["DecisionLetters"], + "demographics.ts": ["PersonalInformationScreen", "VeteranStatusCard", "HomeScreen", "ProfileScreen"], + "disabilityRating.ts": ["DisabilityRatings"], + "letters.ts": ["VALetters"], + "notifications.ts": ["SettingsScreen", "PushNotifications"], + "payments.ts": ["Payments"], + "profile.ts": [ + "ProfileScreen", + "ContactInformation", + "MilitaryInformation", + "PersonalInformationScreen", + "SettingsScreen", + "VALetters", + "Payments" + ], + "vaccine.ts": ["VaccineRecords"], + "api.ts": [ + "Appeals", + "AppealsExpanded", + "Appointments", + "AppointmentsExpanded", + "AvailabilityFramework", + "Cerner", + "Claims", + "ContactInformation", + "DecisionLetters", + "DirectDeposit", + "DisabilityRatings", + "HomeScreen", + "LoginScreen", + "Messages", + "MilitaryInformation", + "Navigation", + "Onboarding", + "Payments", + "PersonalInformationScreen", + "Prescriptions", + "ProfileScreen", + "SettingsScreen", + "VaccineRecords", + "VALetters", + "VeteransCrisisLine", + "VeteranStatusCard" + ], + "analytics.ts": [], + "backButtonLabels.ts": [], + "documentTypes.ts": [], + "errors.ts": [], + "linking.tsx": [], + "namespaces.ts": [], + "store.ts": [], + "utils.ts": [] + } +} From 45d3f876e95d7c3f1788e3b554a758b044df170b Mon Sep 17 00:00:00 2001 From: Rachael Bontrager Date: Tue, 3 Dec 2024 10:08:26 -0600 Subject: [PATCH 3/5] bug/10285-rachael-detox-fix-workflow-failing-after-retry-passes (#10287) --- .github/workflows/e2e_android.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e_android.yml b/.github/workflows/e2e_android.yml index f849764fc0..e97c3c8f9d 100644 --- a/.github/workflows/e2e_android.yml +++ b/.github/workflows/e2e_android.yml @@ -226,9 +226,11 @@ jobs: arch: x86_64 avd-name: Pixel_4_XL_API_28 script: yarn e2e:android-test /e2e/tests/Navigation.e2e AvailabilityFramework.e2e ${{matrix.testsuite}}.e2e --updateSnapshot + continue-on-error: true - name: Run e2e tests for Android on failure - if: failure() && steps.run_e2e_tests_nav_AF.outcome == 'failure' + if: steps.run_e2e_tests_nav_AF.outcome == 'failure' + id: run_e2e_tests_retry uses: reactivecircus/android-emulator-runner@v2 with: working-directory: VAMobile @@ -239,7 +241,7 @@ jobs: arch: x86_64 avd-name: Pixel_4_XL_API_28 script: yarn e2e:android-test /e2e/tests/Navigation.e2e AvailabilityFramework.e2e ${{matrix.testsuite}}.e2e --updateSnapshot - + - name: Upload e2e-junit if: failure() || success() uses: actions/upload-artifact@v4 From 3aba6479ffcf16219b0945eda52ae0384fcd9b9a Mon Sep 17 00:00:00 2001 From: Tim Wright <459581+timwright12@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:09:18 -0500 Subject: [PATCH 4/5] Update feature-request.yml --- .github/ISSUE_TEMPLATE/feature-request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index 927030a135..aaca9bc038 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -92,9 +92,9 @@ body: - type: input id: duedate attributes: - label: 12.) What is your ideal due date for this change request? + label: 12.) Is there a hard deadline associated with this request? description: - placeholder: MM/DD/YYYY or Quarter + placeholder: MM/DD/YYYY validations: required: true From a940b781fce206e5bb51f717dae22122d2e867ba Mon Sep 17 00:00:00 2001 From: Chikaodi Adibemma <53785439+cadibemma@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:17:51 -0500 Subject: [PATCH 5/5] feature/9661-Chika-AddDODToProofOfVeteranStatus (#10266) --- VAMobile/e2e/tests/VeteranStatusCard.e2e.ts | 1 + VAMobile/src/api/types/PersonalInformationData.ts | 1 + .../VeteranStatusScreen/VeteranStatusScreen.tsx | 14 ++++++++++++-- .../store/api/demo/mocks/personalInformation.json | 3 ++- VAMobile/src/translations/en/common.json | 1 + 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/VAMobile/e2e/tests/VeteranStatusCard.e2e.ts b/VAMobile/e2e/tests/VeteranStatusCard.e2e.ts index 5b1b6fd4b4..6339b541a7 100644 --- a/VAMobile/e2e/tests/VeteranStatusCard.e2e.ts +++ b/VAMobile/e2e/tests/VeteranStatusCard.e2e.ts @@ -48,6 +48,7 @@ export async function validateVeteranStatusDesign() { await expect(element(by.id('veteranStatusBranchTestID'))).toExist() await expect(element(by.id('veteranStatusDisabilityRatingTestID'))).toExist() await expect(element(by.id('veteranStatusMilitaryServiceTestID')).atIndex(0)).toExist() + await expect(element(by.id('veteranStatusDODTestID'))).toExist() await expect(element(by.text(VeteranStatusCardConstants.VETERAN_STATUS_DISCLAIMER_TEXT))).toExist() await expect(element(by.text(VeteranStatusCardConstants.VETERAN_STATUS_DOB_DISABILITY_ERROR_PHONE_TEXT))).toExist() await expect(element(by.id(CommonE2eIdConstants.CALL_VA_TTY_PHONE_NUMBER_ID)).atIndex(0)).toExist() diff --git a/VAMobile/src/api/types/PersonalInformationData.ts b/VAMobile/src/api/types/PersonalInformationData.ts index 7b849b3926..45f276a256 100644 --- a/VAMobile/src/api/types/PersonalInformationData.ts +++ b/VAMobile/src/api/types/PersonalInformationData.ts @@ -10,6 +10,7 @@ export type PersonalInformationPayload = { signinService: string birthDate: string | null hasFacilityTransitioningToCerner: boolean + edipi: string | null } } } diff --git a/VAMobile/src/screens/HomeScreen/VeteranStatusScreen/VeteranStatusScreen.tsx b/VAMobile/src/screens/HomeScreen/VeteranStatusScreen/VeteranStatusScreen.tsx index d917054cb5..2fcaacdae2 100644 --- a/VAMobile/src/screens/HomeScreen/VeteranStatusScreen/VeteranStatusScreen.tsx +++ b/VAMobile/src/screens/HomeScreen/VeteranStatusScreen/VeteranStatusScreen.tsx @@ -142,13 +142,23 @@ function VeteranStatusScreen({ navigation }: VeteranStatusScreenProps) { )} - + {t('veteranStatus.periodOfService')} {getPeriodOfService} - + {personalInfo?.edipi && ( + + + {t('veteranStatus.dodIdNumber')} + + + {personalInfo?.edipi} + + + )} + {t('veteranStatus.uniformedServices')} diff --git a/VAMobile/src/store/api/demo/mocks/personalInformation.json b/VAMobile/src/store/api/demo/mocks/personalInformation.json index e1aeb64c9c..04492944da 100644 --- a/VAMobile/src/store/api/demo/mocks/personalInformation.json +++ b/VAMobile/src/store/api/demo/mocks/personalInformation.json @@ -10,7 +10,8 @@ "signinEmail": "vets.gov.user+228@gmail.com", "signinService": "IDME", "birthDate": "1950-01-01", - "hasFacilityTransitioningToCerner": false + "hasFacilityTransitioningToCerner": false, + "edipi": "1235981947" } } } diff --git a/VAMobile/src/translations/en/common.json b/VAMobile/src/translations/en/common.json index d5100f5ca5..cc7ce1f4c0 100644 --- a/VAMobile/src/translations/en/common.json +++ b/VAMobile/src/translations/en/common.json @@ -1479,6 +1479,7 @@ "veteransCrisisLine.urlDisplayed": "VeteransCrisisLine.net", "veteransCrisisLine.weAreHereForYou": "We’re here anytime, day or night – 24/7", "veteransCrisisLine.weAreHereForYou.a11yLabel": "We’re here anytime, day or night – 24 7", + "veteranStatus.dodIdNumber": "DoD ID number", "veteranStatus.editPhoto": "Edit photo", "veteranStatus.fixAnError": "Need to fix an error?", "veteranStatus.fixAnError.2": "To fix an error in your disability benefits, call us.",