Skip to content

test(mobile): add core field flow e2e harness - #1077

Open
p4uld4vid016-code wants to merge 22 commits into
Pulsefy:mainfrom
p4uld4vid016-code:feature/932-mobile-e2e-harness
Open

test(mobile): add core field flow e2e harness#1077
p4uld4vid016-code wants to merge 22 commits into
Pulsefy:mainfrom
p4uld4vid016-code:feature/932-mobile-e2e-harness

Conversation

@p4uld4vid016-code

Copy link
Copy Markdown
Contributor

Closes #932

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@drips-wave

drips-wave Bot commented Aug 27, 2026

Copy link
Copy Markdown

@p4uld4vid016-code Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

p4uld4vid016-code and others added 8 commits August 27, 2026 13:08
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Fix generated Gradle wrapper execution and align paths with the workflow working directory so the Android build and Maestro artifacts complete reliably.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
The emulator runner executes its script with /usr/bin/sh, so avoid bash-only pipefail syntax that aborts the job before the Android build starts.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Expo prebuild creates the Android project but this repository does not track the generated Gradle wrapper. Set up Gradle in CI and generate the wrapper before assembling the debug APK.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
The emulator runner passes multiline script entries to sh in a way that truncates the conditional body. Keep the fallback POSIX shell conditional on one line so the script parses correctly.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@Cedarich

Copy link
Copy Markdown
Contributor

Kindly fix CI

p4uld4vid016-code and others added 13 commits August 30, 2026 02:51
The android-emulator-runner action splits `script` on newlines and
executes each line as a separate `sh -c` from its working directory,
ignoring the workflow's `defaults.run.working-directory`. This made
`cd android` and the Gradle build run from the repo root, failing with
"Directory ... does not contain a Gradle build".

Set the action's `working-directory` input to app/mobile and fold the
prebuild + gradlew steps into one line so the directory change persists.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
The expo-notifications plugin references ./assets/notification-icon.png,
which was never committed, so expo prebuild fails during the E2E build.
Add the missing asset so native project generation succeeds.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
The app's expo modules were pinned to the SDK 55 line (camera 55.x,
notifications 55.x, etc.) while the core was still SDK 54, so `expo
prebuild` + Gradle could not build the debug APK (e.g. expo-battery 7.x
lacked compileSdk). Move the whole app to Expo SDK 55 coherently:

- expo ~55, react 19.2, react-native 0.83.10 and SDK 55 versions for
  every expo/bundled module; regenerate the app/mobile lockfile
- replace deprecated expo-barcode-scanner with expo-camera CameraView
- adapt expo-battery state listener (BatteryStateEvent no longer carries
  batteryLevel)

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…e2e-harness

# Conflicts:
#	app/mobile/package-lock.json
#	app/mobile/package.json
Maestro matches rendered text, not accessibility labels, so the icon-only
scanner FAB was never found by `tapOn: text: "Scan QR Code"`. Convert the
FAB to an extended FAB with a visible "Scan QR Code" label and add a
scan-qr-fab testID.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…e2e-harness

# Conflicts:
#	app/mobile/package.json
#	app/mobile/src/__tests__/AppNavigator.test.tsx
#	app/mobile/src/screens/BulkScannerScreen.tsx
#	app/mobile/src/screens/HomeScreen.tsx
#	app/mobile/src/screens/ScannerScreen.tsx
The merge pulled in upstream's i18n + lockfile conventions, breaking three
checks:

- i18n: the scan FAB's visible label was hardcoded JSX; use
  t('home.scanQrCode') now that catalogs are the source of truth.
- frozen-lockfile: pnpm-lock.yaml still pinned upstream's expo-54 mobile
  specs; regenerate it against the merged SDK-55 package.json.
- e2e: Maestro could not see the FAB label because the button's
  accessibility node merges/hides child Text; match the stable testID
  (scan-qr-fab) instead, and optionally dismiss the release-notes modal
  that a fresh install can show over Home at launch.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Maestro rejects `timeout` on tapOn; waiting with a deadline belongs on
extendedWaitUntil. Keep the optional tap separate so the modal is only
dismissed when it actually renders.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add an End-to-End Test Harness for Core Field Flows

2 participants