From a482dae9367bfd5380d272f3c5e037db15d77f92 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 16 Oct 2025 17:31:11 +0300 Subject: [PATCH] [Release prep] 1.109.0 E2E fixes (#9216) * list tests * fix create account * get onboarding e2e tests working * get curate list test working * Update thread-muting.yml --- __e2e__/flows/create-account.yml | 9 ++-- __e2e__/flows/curate-lists.yml | 52 +++++++------------ __e2e__/flows/mod-lists.yml | 8 +-- __e2e__/flows/onboarding-avatar-creator.yml | 9 +++- __e2e__/flows/onboarding.yml | 12 ++++- __e2e__/flows/thread-muting.yml | 4 ++ __e2e__/setupApp.yml | 12 ++--- docs/build.md | 2 +- docs/testing.md | 2 +- package.json | 5 +- .../dialogs/lists/CreateOrEditListDialog.tsx | 2 +- src/screens/Onboarding/StepFinished/index.tsx | 1 + .../StepSuggestedAccounts/index.tsx | 13 ++--- .../StepSuggestedStarterpacks/index.tsx | 17 ++---- 14 files changed, 69 insertions(+), 79 deletions(-) diff --git a/__e2e__/flows/create-account.yml b/__e2e__/flows/create-account.yml index 1290c94bf0..eb2f05ca1e 100644 --- a/__e2e__/flows/create-account.yml +++ b/__e2e__/flows/create-account.yml @@ -3,7 +3,7 @@ appId: xyz.blueskyweb.app - runScript: file: ../setupServer.js env: - SERVER_PATH: "" + SERVER_PATH: "" - runFlow: file: ../setupApp.yml - tapOn: @@ -25,7 +25,10 @@ appId: xyz.blueskyweb.app - tapOn: id: "passwordInput" - inputText: "hunter22" -- hideKeyboard +- tapOn: + # hideKeyboard on ios is borked + # https://docs.maestro.dev/troubleshooting/known-issues#hidekeyboard-command-is-flaky + text: "Your account" - tapOn: id: "nextBtn" - tapOn: @@ -34,7 +37,7 @@ appId: xyz.blueskyweb.app - inputText: "e2e-test" - extendedWaitUntil: visible: - id: "handleAvailableCheck" + id: "handleAvailableCheck" - tapOn: id: "nextBtn" - assertVisible: "Give your profile a face" diff --git a/__e2e__/flows/curate-lists.yml b/__e2e__/flows/curate-lists.yml index 8fe6a2c44c..ece9a7ce87 100644 --- a/__e2e__/flows/curate-lists.yml +++ b/__e2e__/flows/curate-lists.yml @@ -17,63 +17,52 @@ appId: xyz.blueskyweb.app id: "e2eGotoLists" - tapOn: id: "newUserListBtn" -- assertVisible: - id: "createOrEditListModal" +- waitForAnimationToEnd +- assertVisible: "Create user list" - tapOn: - id: "editNameInput" + id: "editListNameInput" - inputText: "Good Ppl" - tapOn: - id: "editDescriptionInput" + id: "editListDescriptionInput" - inputText: "They good" - tapOn: "Save" -- tapOn: "Save" -- assertNotVisible: - id: "createOrEditListModal" +- assertNotVisible: "Create user list" - tapOn: "People" - assertVisible: "Good Ppl" - assertVisible: "They good" - tapOn: - label: "Edit display name and description via the edit curatelist modal" - point: "90%,9%" + id: "moreOptionsBtn" - tapOn: "Edit list details" -- assertVisible: - id: "createOrEditListModal" +- assertVisible: "Edit user list" - tapOn: - id: "editNameInput" + id: "editListNameInput" - eraseText - inputText: "Bad Ppl" - hideKeyboard - tapOn: - id: "editDescriptionInput" + id: "editListDescriptionInput" - eraseText - inputText: "They bad" - tapOn: "Save" -- tapOn: "Save" -- assertNotVisible: - id: "createOrEditListModal" +- assertNotVisible: "Edit user list" - assertVisible: Bad Ppl - assertVisible: They bad - tapOn: - label: "Remove description via the edit curatelist modal" - point: "90%,9%" + id: "moreOptionsBtn" - tapOn: "Edit list details" -- assertVisible: - id: "createOrEditListModal" +- assertVisible: "Edit user list" - tapOn: - id: "editDescriptionInput" + id: "editListDescriptionInput" - eraseText - tapOn: "Save" -- tapOn: "Save" -- assertNotVisible: - id: "createOrEditListModal" +- assertNotVisible: "Edit user list" - assertNotVisible: id: "listDescription" - tapOn: - label: "Delete the curatelist" - point: "90%,9%" + id: "moreOptionsBtn" - tapOn: "Delete List" - tapOn: id: "confirmBtn" @@ -82,18 +71,15 @@ appId: xyz.blueskyweb.app id: "newUserListBtn" - tapOn: id: "newUserListBtn" -- assertVisible: - id: "createOrEditListModal" +- assertVisible: "Create user list" - tapOn: - id: "editNameInput" + id: "editListNameInput" - inputText: "Good Ppl" - tapOn: - id: "editDescriptionInput" + id: "editListDescriptionInput" - inputText: "They good" - tapOn: "Save" -- tapOn: "Save" -- assertNotVisible: - id: "createOrEditListModal" +- assertNotVisible: "Create user list" - tapOn: "People" - assertVisible: "Good Ppl" - assertVisible: "They good" diff --git a/__e2e__/flows/mod-lists.yml b/__e2e__/flows/mod-lists.yml index 02d76b83ed..3a3f5fe9cb 100644 --- a/__e2e__/flows/mod-lists.yml +++ b/__e2e__/flows/mod-lists.yml @@ -19,21 +19,17 @@ appId: xyz.blueskyweb.app id: "moderationlistsBtn" - tapOn: "New list" - tapOn: - id: "editNameInput" + id: "editListNameInput" - inputText: "Muted Users" - tapOn: - id: "editDescriptionInput" + id: "editListDescriptionInput" - inputText: "Shhh" - tapOn: "Save" -- tapOn: "Save" # view modlist - assertVisible: "Muted Users" - assertVisible: "Shhh" -# DOES NOT WORK - THE BUTTON IS NOT ACCESSIBLE -# IGNORING FOR NOW, FIX THE COMPONENTS IN THE NEXT RELEASE -# BECAUSE THIS IS A LEGIT A11Y PROBLEM -sfn - tapOn: "Subscribe to this list" - tapOn: "Mute accounts" - tapOn: "Mute list" diff --git a/__e2e__/flows/onboarding-avatar-creator.yml b/__e2e__/flows/onboarding-avatar-creator.yml index 399177e510..2204abb9df 100644 --- a/__e2e__/flows/onboarding-avatar-creator.yml +++ b/__e2e__/flows/onboarding-avatar-creator.yml @@ -30,7 +30,14 @@ appId: xyz.blueskyweb.app - assertVisible: "What are your interests?" - tapOn: id: "onboardingContinue" -- assertVisible: "You're ready to go!" +- assertVisible: "Suggested for you" +# mock server doesn't have suggestions api +- tapOn: "Skip to next step" +- swipe: + direction: "LEFT" +- swipe: + direction: "LEFT" +- assertVisible: "Complete onboarding and start using your account" - tapOn: id: "onboardingFinish" - tapOn: diff --git a/__e2e__/flows/onboarding.yml b/__e2e__/flows/onboarding.yml index 518a2edd8c..a5f4217455 100644 --- a/__e2e__/flows/onboarding.yml +++ b/__e2e__/flows/onboarding.yml @@ -16,7 +16,8 @@ appId: xyz.blueskyweb.app id: "e2eStartOnboarding" - tapOn: "Select an avatar" - waitForAnimationToEnd -- assertVisible: "Search your library…" +- assertVisible: "Photos" +- assertVisible: "Collections" - tapOn: point: "50%,22%" - waitForAnimationToEnd @@ -27,7 +28,14 @@ appId: xyz.blueskyweb.app - assertVisible: "What are your interests?" - tapOn: id: "onboardingContinue" -- assertVisible: "You're ready to go!" +- assertVisible: "Suggested for you" +# mock server doesn't have suggestions api +- tapOn: "Skip to next step" +- swipe: + direction: "LEFT" +- swipe: + direction: "LEFT" +- assertVisible: "Complete onboarding and start using your account" - tapOn: id: "onboardingFinish" - tapOn: diff --git a/__e2e__/flows/thread-muting.yml b/__e2e__/flows/thread-muting.yml index 2724833feb..fcc4868bf2 100644 --- a/__e2e__/flows/thread-muting.yml +++ b/__e2e__/flows/thread-muting.yml @@ -31,6 +31,8 @@ appId: xyz.blueskyweb.app id: "viewHeaderHomeFeedPrefsBtn" - tapOn: id: "replyBtn" +- tapOn: + id: "replyBtn" - inputText: "Reply 1" - tapOn: id: "composerPublishBtn" @@ -69,6 +71,8 @@ appId: xyz.blueskyweb.app id: "profilePager-selector-1" - tapOn: id: "replyBtn" +- tapOn: + id: "replyBtn" - inputText: "Reply 2" - tapOn: id: "composerPublishBtn" diff --git a/__e2e__/setupApp.yml b/__e2e__/setupApp.yml index 728d548fb3..00f53c526e 100644 --- a/__e2e__/setupApp.yml +++ b/__e2e__/setupApp.yml @@ -1,18 +1,18 @@ appId: xyz.blueskyweb.app --- - launchApp: - appId: "xyz.blueskyweb.app" - clearState: true + appId: "xyz.blueskyweb.app" + clearState: true - waitForAnimationToEnd - tapOn: "http://localhost:8081" - waitForAnimationToEnd - extendedWaitUntil: visible: "Continue" - swipe: - from: "Bluesky" - direction: DOWN + from: "Bluesky" + direction: DOWN + duration: 100 - tapOn: - id: e2eProxyHeaderInput + id: e2eProxyHeaderInput - inputText: ${output.result} - pressKey: Enter -- hideKeyboard diff --git a/docs/build.md b/docs/build.md index f84e76f806..fe95bb989a 100644 --- a/docs/build.md +++ b/docs/build.md @@ -75,7 +75,7 @@ After you do `yarn ios` and `yarn android` once, you can later just run `yarn we - Start in various console tabs: - `yarn e2e:mock-server` - - `yarn e2e:metro` + - `yarn e2e:start` - Run once: `yarn e2e:build` - Each test run: `yarn e2e:run` diff --git a/docs/testing.md b/docs/testing.md index ae0a424fbd..bba63e44c7 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -12,7 +12,7 @@ values. ### Running Maestro tests - In one tab, run `yarn e2e:mock-server` -- In a second tab, run `yarn e2e:metro` +- In a second tab, run `yarn e2e:build` - In a third tab, run `yarn e2e:run` ## Using Flashlight for Performance Testing diff --git a/package.json b/package.json index c6f7ad43ea..938b7da721 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,9 @@ "lint-native:fix": "swiftlint --fix ./modules && ktlint --format ./modules", "typecheck": "tsc --project ./tsconfig.check.json", "e2e:mock-server": "NODE_ENV=development ./jest/dev-infra/with-test-redis-and-db.sh ts-node --project tsconfig.e2e.json __e2e__/mock-server.ts", - "e2e:metro": "EXPO_PUBLIC_ENV=e2e NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo run:ios", - "e2e:metro-android": "EXPO_PUBLIC_ENV=e2e NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo run:android", + "e2e:build": "EXPO_PUBLIC_ENV=e2e NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo run:ios", + "e2e:build-android": "EXPO_PUBLIC_ENV=e2e NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo run:android", + "e2e:start": "EXPO_PUBLIC_ENV=e2e NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo start", "e2e:run": "maestro test __e2e__", "perf:test": "NODE_ENV=test maestro test", "perf:test:run": "NODE_ENV=test maestro test __e2e__/perf-test.yml", diff --git a/src/components/dialogs/lists/CreateOrEditListDialog.tsx b/src/components/dialogs/lists/CreateOrEditListDialog.tsx index c3d044cf91..203882d809 100644 --- a/src/components/dialogs/lists/CreateOrEditListDialog.tsx +++ b/src/components/dialogs/lists/CreateOrEditListDialog.tsx @@ -435,7 +435,7 @@ function DialogInner({ multiline label={_(msg`Description`)} placeholder={descriptionPlaceholder} - testID="editProfileDescriptionInput" + testID="editListDescriptionInput" /> {descriptionTooLong && ( diff --git a/src/screens/Onboarding/StepFinished/index.tsx b/src/screens/Onboarding/StepFinished/index.tsx index d2ccb9db91..c1cb3f02f0 100644 --- a/src/screens/Onboarding/StepFinished/index.tsx +++ b/src/screens/Onboarding/StepFinished/index.tsx @@ -330,6 +330,7 @@ function ValueProposition({ )}