This commit is contained in:
2026-03-10 14:59:31 +05:30
parent 52bb1d1af4
commit b9574eb96a
94 changed files with 1119 additions and 407 deletions

View File

@@ -1,6 +1,6 @@
# --- Mobile App Development ---
.PHONY: mobile-install mobile-info mobile-analyze mobile-client-dev-android mobile-staff-dev-android mobile-client-build mobile-staff-build mobile-hot-reload mobile-hot-restart test-e2e test-e2e-setup test-e2e-client test-e2e-staff test-e2e-client-smoke test-e2e-staff-smoke test-e2e-client-hubs-e2e test-e2e-client-billing-smoke test-e2e-client-reports-smoke test-e2e-client-settings-e2e test-e2e-client-orders-smoke test-e2e-client-orders-data test-e2e-staff-profile-smoke test-e2e-staff-payments-smoke test-e2e-staff-shifts-smoke test-e2e-staff-compliance-e2e test-e2e-client-happy-path test-e2e-staff-happy-path test-e2e-staff-auth test-e2e-staff-navigation test-e2e-staff-profile test-e2e-staff-profile-extended test-e2e-staff-shifts test-e2e-staff-compliance test-e2e-staff-home test-e2e-staff-sign-out test-e2e-client-auth test-e2e-client-navigation test-e2e-client-orders test-e2e-client-settings test-e2e-client-sign-out
.PHONY: mobile-install mobile-info mobile-analyze mobile-client-dev-android mobile-staff-dev-android mobile-client-build mobile-staff-build mobile-hot-reload mobile-hot-restart test-e2e test-e2e-setup test-e2e-client test-e2e-staff test-e2e-client-smoke test-e2e-staff-smoke test-e2e-client-hubs-e2e test-e2e-client-billing-smoke test-e2e-client-reports-smoke test-e2e-client-settings-e2e test-e2e-client-orders-smoke test-e2e-client-orders-data test-e2e-staff-profile-smoke test-e2e-staff-payments-smoke test-e2e-staff-shifts-smoke test-e2e-staff-compliance-e2e test-e2e-client-happy-path test-e2e-staff-happy-path test-e2e-staff-auth test-e2e-staff-navigation test-e2e-staff-profile test-e2e-staff-profile-extended test-e2e-staff-shifts test-e2e-staff-compliance test-e2e-staff-home test-e2e-staff-sign-out test-e2e-client-auth test-e2e-client-navigation test-e2e-client-orders test-e2e-client-settings test-e2e-client-sign-out test-e2e-client-coverage test-e2e-client-orders-negative test-e2e-client-billing-extended test-e2e-client-reports-extended test-e2e-client-settings-negative test-e2e-client-hubs-extended test-e2e-staff-shifts-extended test-e2e-staff-compliance-full test-e2e-staff-profile-save test-e2e-staff-payments-extended test-e2e-staff-home-extended
MOBILE_DIR := apps/mobile
@@ -85,301 +85,405 @@ MAESTRO_SHARDS ?= --shard-split=1
test-e2e: test-e2e-setup
@echo "--> Running full E2E suite (Client + Staff auth + negative auth flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml apps/mobile/apps/client/maestro/auth/sign_up.yaml apps/mobile/apps/client/maestro/auth/sign_in_invalid_password.yaml \
apps/mobile/apps/staff/maestro/auth/sign_in.yaml apps/mobile/apps/staff/maestro/auth/sign_up.yaml apps/mobile/apps/staff/maestro/auth/sign_in_invalid_otp.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/client/maestro/auth/happy_path/sign_up.yaml apps/mobile/apps/client/maestro/auth/negative/sign_in_invalid_password.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/staff/maestro/auth/happy_path/sign_up.yaml apps/mobile/apps/staff/maestro/auth/negative/sign_in_invalid_otp.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}" -e TEST_CLIENT_INVALID_PASSWORD="$${TEST_CLIENT_INVALID_PASSWORD:-wrongpass}" \
-e TEST_CLIENT_COMPANY="$${TEST_CLIENT_COMPANY}" -e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" \
-e TEST_STAFF_OTP="$${TEST_STAFF_OTP}" -e TEST_STAFF_INVALID_OTP="$${TEST_STAFF_INVALID_OTP:-000000}" -e TEST_STAFF_SIGNUP_PHONE="$${TEST_STAFF_SIGNUP_PHONE}"
test-e2e-client: test-e2e-setup
@echo "--> Running Client E2E (sign_in, sign_up)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml apps/mobile/apps/client/maestro/auth/sign_up.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/client/maestro/auth/happy_path/sign_up.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}" \
-e TEST_CLIENT_COMPANY="$${TEST_CLIENT_COMPANY}"
test-e2e-staff: test-e2e-setup
@echo "--> Running Staff E2E (sign_in, sign_up)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml apps/mobile/apps/staff/maestro/auth/sign_up.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/staff/maestro/auth/happy_path/sign_up.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}" \
-e TEST_STAFF_SIGNUP_PHONE="$${TEST_STAFF_SIGNUP_PHONE}"
# Client E2E by folder (run folder-by-folder)
test-e2e-client-auth: test-e2e-setup
@echo "--> Running Client E2E auth flows (sign_in, sign_up, sign_in_invalid_password)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml apps/mobile/apps/client/maestro/auth/sign_up.yaml apps/mobile/apps/client/maestro/auth/sign_in_invalid_password.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/client/maestro/auth/happy_path/sign_up.yaml apps/mobile/apps/client/maestro/auth/negative/sign_in_invalid_password.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}" -e TEST_CLIENT_INVALID_PASSWORD="$${TEST_CLIENT_INVALID_PASSWORD:-wrongpass}" \
-e TEST_CLIENT_COMPANY="$${TEST_CLIENT_COMPANY}"
test-e2e-client-navigation: test-e2e-setup
@echo "--> Running Client E2E navigation (sign_in first, then nav flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/navigation/home.yaml \
apps/mobile/apps/client/maestro/navigation/orders.yaml \
apps/mobile/apps/client/maestro/navigation/billing.yaml \
apps/mobile/apps/client/maestro/navigation/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/reports.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/home.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/orders.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/billing.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/reports.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
test-e2e-client-orders: test-e2e-setup
@echo "--> Running Client E2E orders (sign_in first, then order flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/completed_no_edit_icon.yaml \
apps/mobile/apps/client/maestro/orders/create_order_entry.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/happy_path/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/edge_cases/completed_no_edit_icon.yaml \
apps/mobile/apps/client/maestro/orders/smoke/create_order_entry.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
test-e2e-client-settings: test-e2e-setup
@echo "--> Running Client E2E settings (sign_in first, then settings + edit_profile)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/settings/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/edit_profile.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/edit_profile.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
test-e2e-client-sign-out: test-e2e-setup
@echo "--> Running Client E2E sign out..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/auth/sign_out.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/auth/happy_path/sign_out.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client smoke (deterministic, minimal data dependencies)
test-e2e-client-smoke: test-e2e-setup
@echo "--> Running Client E2E smoke suite (deterministic)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/home/tab_bar_roundtrip.yaml \
apps/mobile/apps/client/maestro/home/home_dashboard_widgets.yaml \
apps/mobile/apps/client/maestro/orders/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/logout_flow.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/home/smoke/tab_bar_roundtrip.yaml \
apps/mobile/apps/client/maestro/home/smoke/home_dashboard_widgets.yaml \
apps/mobile/apps/client/maestro/orders/smoke/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/logout_flow.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Hubs E2E (manage + create/edit/delete)
test-e2e-client-hubs-e2e: test-e2e-setup
@echo "--> Running Client E2E hubs suite (manage, edit, delete)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/hubs/manage_hubs_from_settings.yaml \
apps/mobile/apps/client/maestro/hubs/edit_hub_e2e.yaml \
apps/mobile/apps/client/maestro/hubs/delete_hub_e2e.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/manage_hubs_from_settings.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/edit_hub_e2e.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/delete_hub_e2e.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Billing smoke (overview + invoice details/empty state)
test-e2e-client-billing-smoke: test-e2e-setup
@echo "--> Running Client E2E billing smoke suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/billing/billing_overview.yaml \
apps/mobile/apps/client/maestro/billing/invoice_details_smoke.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/billing/happy_path/billing_overview.yaml \
apps/mobile/apps/client/maestro/billing/smoke/invoice_details_smoke.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Reports smoke (dashboard + export placeholder)
test-e2e-client-reports-smoke: test-e2e-setup
@echo "--> Running Client E2E reports smoke suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/reports/reports_dashboard.yaml \
apps/mobile/apps/client/maestro/reports/spend_report_export_smoke.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/reports/happy_path/reports_dashboard.yaml \
apps/mobile/apps/client/maestro/reports/smoke/spend_report_export_smoke.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Settings E2E (settings + edit profile save + logout)
test-e2e-client-settings-e2e: test-e2e-setup
@echo "--> Running Client E2E settings suite (edit profile + logout)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/settings/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/edit_profile_save_e2e.yaml \
apps/mobile/apps/client/maestro/settings/logout_flow.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/settings_page.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/edit_profile_save_e2e.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/logout_flow.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Orders (smoke): Rapid + parsed draft navigation
test-e2e-client-orders-smoke: test-e2e-setup
@echo "--> Running Client E2E orders smoke suite (RAPID → One-Time draft)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/create_order_entry.yaml \
apps/mobile/apps/client/maestro/orders/create_order_rapid.yaml \
apps/mobile/apps/client/maestro/orders/rapid_to_one_time_draft_submit_e2e.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/smoke/create_order_entry.yaml \
apps/mobile/apps/client/maestro/orders/smoke/create_order_rapid.yaml \
apps/mobile/apps/client/maestro/orders/happy_path/rapid_to_one_time_draft_submit_e2e.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Orders (data-dependent): requires an active order
test-e2e-client-orders-data: test-e2e-setup
@echo "--> Running Client E2E orders data-dependent suite (edit active order)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/edit_active_order_verify_updated_e2e.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/happy_path/edit_active_order_verify_updated_e2e.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client happy path (auth + hubs + create order E2E + billing + reports + logout) — #572
test-e2e-client-happy-path: test-e2e-setup
@echo "--> Running Client E2E happy path (hubs, order, billing, reports, logout)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml \
apps/mobile/apps/client/maestro/hubs/create_hub_e2e.yaml \
apps/mobile/apps/client/maestro/orders/create_order_one_time_e2e.yaml \
apps/mobile/apps/client/maestro/billing/billing_overview.yaml \
apps/mobile/apps/client/maestro/billing/invoice_approval_e2e.yaml \
apps/mobile/apps/client/maestro/reports/reports_dashboard.yaml \
apps/mobile/apps/client/maestro/settings/logout_flow.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/create_hub_e2e.yaml \
apps/mobile/apps/client/maestro/orders/happy_path/create_order_one_time_e2e.yaml \
apps/mobile/apps/client/maestro/billing/happy_path/billing_overview.yaml \
apps/mobile/apps/client/maestro/billing/happy_path/invoice_approval_e2e.yaml \
apps/mobile/apps/client/maestro/reports/happy_path/reports_dashboard.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/logout_flow.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client extended (auth + navigation + orders + settings)
test-e2e-client-extended: test-e2e-setup
@echo "--> Running Client E2E extended suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml apps/mobile/apps/client/maestro/auth/sign_up.yaml \
apps/mobile/apps/client/maestro/navigation/home.yaml apps/mobile/apps/client/maestro/navigation/orders.yaml \
apps/mobile/apps/client/maestro/navigation/billing.yaml apps/mobile/apps/client/maestro/navigation/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/reports.yaml apps/mobile/apps/client/maestro/orders/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/completed_no_edit_icon.yaml apps/mobile/apps/client/maestro/orders/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/settings_page.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/client/maestro/auth/happy_path/sign_up.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/home.yaml apps/mobile/apps/client/maestro/navigation/smoke/orders.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/billing.yaml apps/mobile/apps/client/maestro/navigation/smoke/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/reports.yaml apps/mobile/apps/client/maestro/orders/happy_path/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/edge_cases/completed_no_edit_icon.yaml apps/mobile/apps/client/maestro/orders/smoke/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/settings_page.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}" \
-e TEST_CLIENT_COMPANY="$${TEST_CLIENT_COMPANY}"
# =============================================================================
# #636 — Enhanced Coverage: Phase 1 (Client)
# =============================================================================
# Client Coverage — filter navigation + empty state (#636)
test-e2e-client-coverage: test-e2e-setup
@echo "--> Running Client E2E coverage suite (filter + empty state)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/coverage/happy_path/coverage_overview.yaml \
apps/mobile/apps/client/maestro/coverage/smoke/coverage_filter_smoke.yaml \
apps/mobile/apps/client/maestro/coverage/edge_cases/coverage_empty_state.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Orders — negative / edge cases: validation errors + empty state (#636)
test-e2e-client-orders-negative: test-e2e-setup
@echo "--> Running Client E2E orders negative suite (validation errors + empty state)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/orders/edge_cases/orders_empty_state.yaml \
apps/mobile/apps/client/maestro/orders/negative/create_order_validation_errors.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Billing — extended: overview + empty state (#636)
test-e2e-client-billing-extended: test-e2e-setup
@echo "--> Running Client E2E billing extended suite (overview + empty state)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/billing/happy_path/billing_overview.yaml \
apps/mobile/apps/client/maestro/billing/edge_cases/billing_empty_state.yaml \
apps/mobile/apps/client/maestro/billing/smoke/invoice_details_smoke.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Reports — extended: dashboard + spend export + no-show (#636)
test-e2e-client-reports-extended: test-e2e-setup
@echo "--> Running Client E2E reports extended suite (dashboard + spend + no-show)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/reports/happy_path/reports_dashboard.yaml \
apps/mobile/apps/client/maestro/reports/smoke/spend_report_export_smoke.yaml \
apps/mobile/apps/client/maestro/reports/smoke/no_show_report_smoke.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Settings — negative: edit profile validation errors (#636)
test-e2e-client-settings-negative: test-e2e-setup
@echo "--> Running Client E2E settings negative suite (profile validation errors)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/settings/negative/edit_profile_validation.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Client Hubs — extended: manage + create/edit/delete + empty state (#636)
test-e2e-client-hubs-extended: test-e2e-setup
@echo "--> Running Client E2E hubs extended suite (manage + CRUD + empty state)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/client/maestro/hubs/edge_cases/hub_empty_state.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/manage_hubs_from_settings.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/edit_hub_e2e.yaml \
apps/mobile/apps/client/maestro/hubs/happy_path/delete_hub_e2e.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}"
# Staff E2E by folder (run folder-by-folder)
test-e2e-staff-auth: test-e2e-setup
@echo "--> Running Staff E2E auth flows (sign_in, sign_up, sign_in_invalid_otp)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml apps/mobile/apps/staff/maestro/auth/sign_up.yaml apps/mobile/apps/staff/maestro/auth/sign_in_invalid_otp.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/staff/maestro/auth/happy_path/sign_up.yaml apps/mobile/apps/staff/maestro/auth/negative/sign_in_invalid_otp.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}" -e TEST_STAFF_INVALID_OTP="$${TEST_STAFF_INVALID_OTP:-000000}" \
-e TEST_STAFF_SIGNUP_PHONE="$${TEST_STAFF_SIGNUP_PHONE}"
test-e2e-staff-navigation: test-e2e-setup
@echo "--> Running Staff E2E navigation (sign_in first, then navigation flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/navigation/home.yaml \
apps/mobile/apps/staff/maestro/navigation/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/profile.yaml \
apps/mobile/apps/staff/maestro/navigation/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/clock_in.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/home.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/profile.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/clock_in.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-profile: test-e2e-setup
@echo "--> Running Staff E2E profile (sign_in first, then profile flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/documents_list.yaml \
apps/mobile/apps/staff/maestro/profile/certificates_list.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/documents_list.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/certificates_list.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-profile-extended: test-e2e-setup
@echo "--> Running Staff E2E profile extended (personal_info, documents, certificates, timecard, bank_account, faqs, privacy, emergency_contact)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/documents_list.yaml \
apps/mobile/apps/staff/maestro/profile/certificates_list.yaml \
apps/mobile/apps/staff/maestro/profile/time_card.yaml \
apps/mobile/apps/staff/maestro/profile/bank_account.yaml \
apps/mobile/apps/staff/maestro/profile/faqs.yaml \
apps/mobile/apps/staff/maestro/profile/privacy_security.yaml \
apps/mobile/apps/staff/maestro/profile/emergency_contact.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/documents_list.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/certificates_list.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/time_card.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/bank_account.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/faqs.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/privacy_security.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/emergency_contact.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-sign-out: test-e2e-setup
@echo "--> Running Staff E2E sign out..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/auth/sign_out.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_out.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff smoke (deterministic, avoids shift/time/location and upload dependencies)
test-e2e-staff-smoke: test-e2e-setup
@echo "--> Running Staff E2E smoke suite (deterministic)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/navigation/home.yaml \
apps/mobile/apps/staff/maestro/navigation/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/profile.yaml \
apps/mobile/apps/staff/maestro/profile/personal_info.yaml \
apps/mobile/apps/staff/maestro/home/benefits.yaml \
apps/mobile/apps/staff/maestro/auth/sign_out.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/home.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/profile.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/personal_info.yaml \
apps/mobile/apps/staff/maestro/home/happy_path/benefits.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_out.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Profile smoke (details pages)
test-e2e-staff-profile-smoke: test-e2e-setup
@echo "--> Running Staff E2E profile smoke suite (timecard, bank, tax forms, attire validation)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/time_card_detail_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/bank_account_fields_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/tax_forms_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/attire_validation_e2e.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/time_card_detail_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/bank_account_fields_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/tax_forms_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/attire_validation_e2e.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Payments smoke (earnings history)
test-e2e-staff-payments-smoke: test-e2e-setup
@echo "--> Running Staff E2E payments smoke suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/payments/payment_history_smoke.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/payments/smoke/payment_history_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Shifts smoke (open Find Shifts; optionally apply)
test-e2e-staff-shifts-smoke: test-e2e-setup
@echo "--> Running Staff E2E shifts smoke suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/find_shifts_apply_smoke.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/smoke/find_shifts_apply_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Compliance E2E (document + certificate uploads)
test-e2e-staff-compliance-e2e: test-e2e-setup
@echo "--> Running Staff E2E compliance suite (document + certificate upload)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/compliance/document_upload_e2e.yaml \
apps/mobile/apps/staff/maestro/compliance/certificate_upload_e2e.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/compliance/happy_path/document_upload_e2e.yaml \
apps/mobile/apps/staff/maestro/compliance/happy_path/certificate_upload_e2e.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-shifts: test-e2e-setup
@echo "--> Running Staff E2E shifts (sign_in first, then shifts flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/find_shifts.yaml \
apps/mobile/apps/staff/maestro/shifts/incomplete_profile_banner.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/find_shifts.yaml \
apps/mobile/apps/staff/maestro/shifts/edge_cases/incomplete_profile_banner.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-compliance: test-e2e-setup
@echo "--> Running Staff E2E compliance (sign_in first, then compliance flows)..."
@maestro test $(MAESTRO_SHARDS) \
apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/compliance/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/certificate_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/certificate_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/attire_upload_banner.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
test-e2e-staff-home: test-e2e-setup
@echo "--> Running Staff E2E home (sign_in first, then home flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/home/benefits.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/home/happy_path/benefits.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff happy path (auth + clock in/out + availability + document upload + payments + sign out) — #572
test-e2e-staff-happy-path: test-e2e-setup
@echo "--> Running Staff E2E happy path (clock in/out, availability, document upload, payments, sign out)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/clock_in_e2e.yaml \
apps/mobile/apps/staff/maestro/shifts/clock_out_e2e.yaml \
apps/mobile/apps/staff/maestro/availability/set_availability_e2e.yaml \
apps/mobile/apps/staff/maestro/compliance/document_upload_e2e.yaml \
apps/mobile/apps/staff/maestro/payments/payments_view_e2e.yaml \
apps/mobile/apps/staff/maestro/auth/sign_out.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/clock_in_e2e.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/clock_out_e2e.yaml \
apps/mobile/apps/staff/maestro/availability/happy_path/set_availability_e2e.yaml \
apps/mobile/apps/staff/maestro/compliance/happy_path/document_upload_e2e.yaml \
apps/mobile/apps/staff/maestro/payments/happy_path/payments_view_e2e.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_out.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff extended (auth + navigation + profile + compliance + shifts + benefits)
test-e2e-staff-extended: test-e2e-setup
@echo "--> Running Staff E2E extended suite..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/sign_in.yaml apps/mobile/apps/staff/maestro/auth/sign_up.yaml \
apps/mobile/apps/staff/maestro/navigation/home.yaml apps/mobile/apps/staff/maestro/navigation/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/profile.yaml apps/mobile/apps/staff/maestro/navigation/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/clock_in.yaml apps/mobile/apps/staff/maestro/profile/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/documents_list.yaml apps/mobile/apps/staff/maestro/profile/certificates_list.yaml \
apps/mobile/apps/staff/maestro/shifts/find_shifts.yaml apps/mobile/apps/staff/maestro/compliance/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/certificate_upload_banner.yaml apps/mobile/apps/staff/maestro/compliance/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/shifts/incomplete_profile_banner.yaml apps/mobile/apps/staff/maestro/home/benefits.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/staff/maestro/auth/happy_path/sign_up.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/home.yaml apps/mobile/apps/staff/maestro/navigation/smoke/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/profile.yaml apps/mobile/apps/staff/maestro/navigation/smoke/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/clock_in.yaml apps/mobile/apps/staff/maestro/profile/happy_path/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/documents_list.yaml apps/mobile/apps/staff/maestro/profile/happy_path/certificates_list.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/find_shifts.yaml apps/mobile/apps/staff/maestro/compliance/smoke/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/certificate_upload_banner.yaml apps/mobile/apps/staff/maestro/compliance/smoke/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/shifts/edge_cases/incomplete_profile_banner.yaml apps/mobile/apps/staff/maestro/home/happy_path/benefits.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}" \
-e TEST_STAFF_SIGNUP_PHONE="$${TEST_STAFF_SIGNUP_PHONE}"
# Extended E2E: auth + navigation + compliance + feature flows (both apps)
test-e2e-extended: test-e2e-setup
@echo "--> Running extended E2E suite (auth, navigation, compliance, feature flows)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/sign_in.yaml apps/mobile/apps/client/maestro/auth/sign_up.yaml \
apps/mobile/apps/client/maestro/navigation/home.yaml apps/mobile/apps/client/maestro/navigation/orders.yaml \
apps/mobile/apps/client/maestro/navigation/billing.yaml apps/mobile/apps/client/maestro/navigation/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/reports.yaml apps/mobile/apps/client/maestro/orders/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/completed_no_edit_icon.yaml apps/mobile/apps/client/maestro/orders/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/settings_page.yaml \
apps/mobile/apps/staff/maestro/auth/sign_in.yaml apps/mobile/apps/staff/maestro/auth/sign_up.yaml \
apps/mobile/apps/staff/maestro/navigation/home.yaml apps/mobile/apps/staff/maestro/navigation/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/profile.yaml apps/mobile/apps/staff/maestro/navigation/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/clock_in.yaml apps/mobile/apps/staff/maestro/profile/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/documents_list.yaml apps/mobile/apps/staff/maestro/profile/certificates_list.yaml \
apps/mobile/apps/staff/maestro/shifts/find_shifts.yaml apps/mobile/apps/staff/maestro/compliance/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/certificate_upload_banner.yaml apps/mobile/apps/staff/maestro/compliance/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/shifts/incomplete_profile_banner.yaml apps/mobile/apps/staff/maestro/home/benefits.yaml \
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/client/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/client/maestro/auth/happy_path/sign_up.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/home.yaml apps/mobile/apps/client/maestro/navigation/smoke/orders.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/billing.yaml apps/mobile/apps/client/maestro/navigation/smoke/coverage.yaml \
apps/mobile/apps/client/maestro/navigation/smoke/reports.yaml apps/mobile/apps/client/maestro/orders/happy_path/view_orders.yaml \
apps/mobile/apps/client/maestro/orders/edge_cases/completed_no_edit_icon.yaml apps/mobile/apps/client/maestro/orders/smoke/create_order_entry.yaml \
apps/mobile/apps/client/maestro/settings/happy_path/settings_page.yaml \
apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml apps/mobile/apps/staff/maestro/auth/happy_path/sign_up.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/home.yaml apps/mobile/apps/staff/maestro/navigation/smoke/shifts.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/profile.yaml apps/mobile/apps/staff/maestro/navigation/smoke/payments.yaml \
apps/mobile/apps/staff/maestro/navigation/smoke/clock_in.yaml apps/mobile/apps/staff/maestro/profile/happy_path/personal_info.yaml \
apps/mobile/apps/staff/maestro/profile/happy_path/documents_list.yaml apps/mobile/apps/staff/maestro/profile/happy_path/certificates_list.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/find_shifts.yaml apps/mobile/apps/staff/maestro/compliance/smoke/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/certificate_upload_banner.yaml apps/mobile/apps/staff/maestro/compliance/smoke/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/shifts/edge_cases/incomplete_profile_banner.yaml apps/mobile/apps/staff/maestro/home/happy_path/benefits.yaml \
-e TEST_CLIENT_EMAIL="$${TEST_CLIENT_EMAIL}" -e TEST_CLIENT_PASSWORD="$${TEST_CLIENT_PASSWORD}" \
-e TEST_CLIENT_COMPANY="$${TEST_CLIENT_COMPANY}" -e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" \
-e TEST_STAFF_OTP="$${TEST_STAFF_OTP}" -e TEST_STAFF_SIGNUP_PHONE="$${TEST_STAFF_SIGNUP_PHONE}"
# =============================================================================
# #636 — Enhanced Coverage: Phase 2 (Staff)
# =============================================================================
# Staff Shifts — extended: find shifts + empty state (#636)
test-e2e-staff-shifts-extended: test-e2e-setup
@echo "--> Running Staff E2E shifts extended suite (find shifts + empty state)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/shifts/happy_path/find_shifts.yaml \
apps/mobile/apps/staff/maestro/shifts/edge_cases/shifts_empty_state.yaml \
apps/mobile/apps/staff/maestro/shifts/smoke/find_shifts_apply_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Compliance — full: banners + document + certificate + attire upload E2E (#636)
test-e2e-staff-compliance-full: test-e2e-setup
@echo "--> Running Staff E2E compliance full suite (banners + all upload E2E)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/document_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/certificate_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/smoke/attire_upload_banner.yaml \
apps/mobile/apps/staff/maestro/compliance/happy_path/attire_upload_e2e.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Profile — save flows: personal info + emergency contact save (#636)
test-e2e-staff-profile-save: test-e2e-setup
@echo "--> Running Staff E2E profile save suite (personal info + emergency contact)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/personal_info_save_smoke.yaml \
apps/mobile/apps/staff/maestro/profile/smoke/emergency_contact_save_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Payments — extended: payments view + payment detail (#636)
test-e2e-staff-payments-extended: test-e2e-setup
@echo "--> Running Staff E2E payments extended suite (view + detail)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/payments/happy_path/payments_view_e2e.yaml \
apps/mobile/apps/staff/maestro/payments/smoke/payment_history_smoke.yaml \
apps/mobile/apps/staff/maestro/payments/smoke/payment_detail_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"
# Staff Home — extended: benefits + incomplete profile banner (#636)
test-e2e-staff-home-extended: test-e2e-setup
@echo "--> Running Staff E2E home extended suite (benefits + incomplete profile banner)..."
@maestro test $(MAESTRO_SHARDS) apps/mobile/apps/staff/maestro/auth/happy_path/sign_in.yaml \
apps/mobile/apps/staff/maestro/home/happy_path/benefits.yaml \
apps/mobile/apps/staff/maestro/home/smoke/incomplete_profile_banner_smoke.yaml \
-e TEST_STAFF_PHONE="$${TEST_STAFF_PHONE}" -e TEST_STAFF_OTP="$${TEST_STAFF_OTP}"