freshyo/tests/e2e/README.md
2026-09-15 23:59:59 +05:30

2.4 KiB

Admin E2E tests (Maestro)

Maestro flows that drive the admin-ui Expo app on an Android emulator.

Layout

tests/e2e/
  config.yaml            # workspace config (entry flows = *.yaml at the root)
  add-product.yaml       # first flow: create a product with 2 SKUs (one flash)
  subflows/
    login.yaml           # reusable login
    pick-image.yaml      # OS photo-picker adapter (Android)
  assets/test-product.png  # seeded into the emulator gallery via `addMedia`
  run.sh                 # sources .env and runs `maestro test`
  .env.example           # copy to .env and fill in

Prerequisites

  • Maestro CLI installed (curl -Ls "https://get.maestro.mobile.dev" | bash).
  • A booted Android emulator (maestro start-device --platform android, or Android Studio).
  • The admin-ui dev build installed on the emulator (bun run --filter admin-ui android, appId in.freshyo.adminui).
  • The build must be able to reach the backend (login + image upload hit the API/R2).

Setup

cp tests/e2e/.env.example tests/e2e/.env
# edit tests/e2e/.env — at minimum STAFF_NAME, STAFF_PASSWORD, STORE_ID

Run

bash tests/e2e/run.sh                 # every entry flow in tests/e2e/
bash tests/e2e/run.sh add-product.yaml

run.sh appends a timestamp to PRODUCT_NAME (the backend rejects duplicate names).

What add-product.yaml does

  1. addMedia seeds assets/test-product.png into the emulator gallery.
  2. launchApp with clearState: true (forces login) and gallery permission.
  3. Logs in (subflow) and taps the add-product-menu-item quick action.
  4. Fills the product name and selects Store + Product Type.
  5. Variant 1: quantity, price, MRP, attaches an image.
  6. Adds Variant 2, fills quantity/prices, toggles Flash Available, sets flash price, attaches an image.
  7. Submits and asserts Product created successfully!.

All in-app interactions use testID selectors (id:). The only exception is the OS photo picker, which is system UI and is targeted by its platform IDs in subflows/pick-image.yaml.

Notes / gotchas

  • The image picker flow is the most version-sensitive part; thumbs are targeted by the Android 13/14 Photo Picker id with a DocumentsUI fallback, and the confirm button by text regex Add|Done|Select.
  • On a reused emulator, addMedia images accumulate in the gallery (harmless).
  • Tests create real data on the connected backend.