testcases
This commit is contained in:
@@ -22,21 +22,30 @@ maestro/
|
||||
view_orders.yaml
|
||||
completed_no_edit_icon.yaml # #492
|
||||
create_order_entry.yaml
|
||||
create_order_rapid.yaml
|
||||
rapid_to_one_time_draft_submit_e2e.yaml
|
||||
create_order_one_time_e2e.yaml
|
||||
edit_active_order_e2e.yaml
|
||||
edit_active_order_verify_updated_e2e.yaml
|
||||
hubs/
|
||||
create_hub_e2e.yaml
|
||||
manage_hubs_from_settings.yaml
|
||||
edit_hub_e2e.yaml
|
||||
delete_hub_e2e.yaml
|
||||
billing/
|
||||
billing_overview.yaml
|
||||
invoice_details_smoke.yaml
|
||||
invoice_approval_e2e.yaml
|
||||
reports/
|
||||
reports_dashboard.yaml
|
||||
spend_report_export_smoke.yaml
|
||||
home/
|
||||
home_dashboard_widgets.yaml
|
||||
tab_bar_roundtrip.yaml
|
||||
settings/
|
||||
settings_page.yaml
|
||||
edit_profile.yaml
|
||||
edit_profile_save_e2e.yaml
|
||||
logout_flow.yaml
|
||||
```
|
||||
|
||||
@@ -56,6 +65,13 @@ maestro/
|
||||
make test-e2e-client # Auth only
|
||||
make test-e2e-client-extended # Auth + nav + orders + settings
|
||||
make test-e2e-client-happy-path # Auth + hubs + create order E2E + billing + reports + logout (#572)
|
||||
make test-e2e-client-smoke # Deterministic smoke suite
|
||||
make test-e2e-client-hubs-e2e # Hubs manage + edit + delete
|
||||
make test-e2e-client-billing-smoke # Billing overview + invoice details/empty state
|
||||
make test-e2e-client-reports-smoke # Reports dashboard + export placeholder
|
||||
make test-e2e-client-settings-e2e # Settings + edit profile save + logout
|
||||
make test-e2e-client-orders-smoke # Orders smoke (RAPID → One-Time draft)
|
||||
make test-e2e-client-orders-data # Orders data-dependent (edit active order)
|
||||
|
||||
# Direct
|
||||
maestro test apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# Client App — Billing: open invoice details (smoke)
|
||||
# Purpose:
|
||||
# - Validates Billing tab loads
|
||||
# - If invoices exist, opens an invoice and verifies invoice actions (e.g. Download PDF)
|
||||
# - If no invoices exist, verifies the empty-state copy is shown
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/billing/invoice_details_smoke.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Billing"
|
||||
- extendedWaitUntil:
|
||||
visible: "Current Period"
|
||||
timeout: 10000
|
||||
|
||||
# If there are invoices ready, open one and verify details actions (optional)
|
||||
- tapOn: "Invoice Ready"
|
||||
optional: true
|
||||
- extendedWaitUntil:
|
||||
visible: "Download Invoice PDF"
|
||||
timeout: 10000
|
||||
optional: true
|
||||
- assertVisible: "Download Invoice PDF"
|
||||
optional: true
|
||||
|
||||
# Otherwise, validate deterministic empty states (still a valid smoke outcome)
|
||||
- assertVisible: "No invoices ready yet"
|
||||
optional: true
|
||||
|
||||
- assertVisible: "No Invoices for the selected period"
|
||||
optional: true
|
||||
|
||||
# Always end by asserting we are still in Billing context
|
||||
- assertVisible: "Current Period"
|
||||
|
||||
80
apps/mobile/apps/client/maestro/hubs/delete_hub_e2e.yaml
Normal file
80
apps/mobile/apps/client/maestro/hubs/delete_hub_e2e.yaml
Normal file
@@ -0,0 +1,80 @@
|
||||
# Client App — E2E: Delete Hub (create → details → delete)
|
||||
# Purpose:
|
||||
# - Creates a hub
|
||||
# - Opens Hub Details and deletes it
|
||||
# - Verifies deletion confirmation and success
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/hubs/delete_hub_e2e.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Home"
|
||||
- extendedWaitUntil:
|
||||
visible: "Welcome back"
|
||||
timeout: 15000
|
||||
|
||||
# Open Settings via header gear icon (top-right)
|
||||
- tapOn:
|
||||
point: "92%,10%"
|
||||
- extendedWaitUntil:
|
||||
visible: "Clock-In Hubs"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Clock-In Hubs"
|
||||
- extendedWaitUntil:
|
||||
visible: "Hubs\nManage clock-in locations"
|
||||
timeout: 15000
|
||||
|
||||
# Create a hub for this test run (deterministic)
|
||||
- tapOn: "Add Hub"
|
||||
- extendedWaitUntil:
|
||||
visible: "Add New Hub"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Hub Name *"
|
||||
- inputText: "E2E Hub Delete"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn:
|
||||
point: "50%,60%"
|
||||
- inputText: "345 Park Avenue, New York, NY"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn:
|
||||
point: "50%,88%"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Hubs\nManage clock-in locations"
|
||||
timeout: 20000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "E2E Hub Delete"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "E2E Hub Delete"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "E2E Hub Delete"
|
||||
timeout: 10000
|
||||
|
||||
# Delete action is the destructive bottom button on details page
|
||||
- assertVisible: "Delete"
|
||||
- tapOn: "Delete"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Confirm Hub Deletion"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Delete"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Hub deleted successfully"
|
||||
timeout: 15000
|
||||
|
||||
86
apps/mobile/apps/client/maestro/hubs/edit_hub_e2e.yaml
Normal file
86
apps/mobile/apps/client/maestro/hubs/edit_hub_e2e.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
# Client App — E2E: Edit Hub (create → details → edit)
|
||||
# Purpose:
|
||||
# - Ensures hubs list is reachable from Settings
|
||||
# - Creates a hub (if needed for the test run)
|
||||
# - Opens Hub Details, edits hub name, verifies success
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/hubs/edit_hub_e2e.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Home"
|
||||
- extendedWaitUntil:
|
||||
visible: "Welcome back"
|
||||
timeout: 15000
|
||||
|
||||
# Open Settings via header gear icon (top-right)
|
||||
- tapOn:
|
||||
point: "92%,10%"
|
||||
- extendedWaitUntil:
|
||||
visible: "Clock-In Hubs"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Clock-In Hubs"
|
||||
- extendedWaitUntil:
|
||||
visible: "Hubs\nManage clock-in locations"
|
||||
timeout: 15000
|
||||
|
||||
# Create a hub for this test run (deterministic)
|
||||
- tapOn: "Add Hub"
|
||||
- extendedWaitUntil:
|
||||
visible: "Add New Hub"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Hub Name *"
|
||||
- inputText: "E2E Hub Edit"
|
||||
- hideKeyboard
|
||||
|
||||
# Address field uses an autocomplete widget; focus it via a safe coordinate
|
||||
- tapOn:
|
||||
point: "50%,60%"
|
||||
- inputText: "345 Park Avenue, New York, NY"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn:
|
||||
point: "50%,88%"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Hubs\nManage clock-in locations"
|
||||
timeout: 20000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "E2E Hub Edit"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "E2E Hub Edit"
|
||||
|
||||
# Hub details page uses the hub name as the app bar title
|
||||
- extendedWaitUntil:
|
||||
visible: "E2E Hub Edit"
|
||||
timeout: 10000
|
||||
|
||||
- assertVisible: "Edit Hub"
|
||||
- tapOn: "Edit Hub"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit Hub"
|
||||
timeout: 10000
|
||||
|
||||
# Append suffix to avoid needing to clear the field
|
||||
- tapOn: "Hub Name *"
|
||||
- inputText: " Updated"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn: "Save Changes"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Hub updated successfully"
|
||||
timeout: 15000
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# Client App — E2E: Edit Active Order and verify update confirmation
|
||||
# Purpose:
|
||||
# - Opens an active order edit sheet
|
||||
# - Adjusts workers count (+1)
|
||||
# - Confirms save
|
||||
# - Verifies the "Order Updated!" confirmation UI appears
|
||||
#
|
||||
# Prerequisite:
|
||||
# User must have at least one active, uncompleted order.
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/orders/edit_active_order_verify_updated_e2e.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- assertVisible: "Home"
|
||||
- tapOn: "Home"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
# Wait for active orders to load and ensure we have an OPEN order
|
||||
- scrollUntilVisible:
|
||||
element: "OPEN"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
|
||||
# Tap edit on the active order card (prefer ID; fallback to a safe point)
|
||||
- tapOn:
|
||||
id: "edit_order_button"
|
||||
point: "85%,25%"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit One-Time Order"
|
||||
timeout: 15000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "WORKERS"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
|
||||
- tapOn: "+"
|
||||
|
||||
- tapOn: "Review Positions"
|
||||
- extendedWaitUntil:
|
||||
visible: "Positions Breakdown"
|
||||
timeout: 15000
|
||||
|
||||
- tapOn: "Confirm & Save"
|
||||
|
||||
# Verify the in-app confirmation appears
|
||||
- extendedWaitUntil:
|
||||
visible: "Order Updated!"
|
||||
timeout: 20000
|
||||
- assertVisible: "Your shift has been updated successfully."
|
||||
|
||||
- tapOn: "Back to Orders"
|
||||
- extendedWaitUntil:
|
||||
visible: "Orders"
|
||||
timeout: 15000
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Client App — E2E: Rapid order → parsed One-Time draft (submit)
|
||||
# Purpose:
|
||||
# - Validates the full RAPID happy path including submitting a message and
|
||||
# landing on the One-Time order draft screen.
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/orders/rapid_to_one_time_draft_submit_e2e.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Home"
|
||||
- extendedWaitUntil:
|
||||
visible: "Welcome back"
|
||||
timeout: 15000
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Create Order\nSchedule shifts"
|
||||
timeout: 20000
|
||||
- tapOn: "Create Order\nSchedule shifts"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "RAPID\nURGENT same-day Coverage"
|
||||
timeout: 10000
|
||||
- tapOn: "RAPID\nURGENT same-day Coverage"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "RAPID Order"
|
||||
timeout: 10000
|
||||
|
||||
# Use a predefined example message so the Rapid flow has valid input.
|
||||
- tapOn: ".*Need 2 cooks ASAP.*"
|
||||
|
||||
- assertVisible: "Send Message"
|
||||
- tapOn: "Send Message"
|
||||
|
||||
# Parsed result should navigate into a One-Time order draft screen.
|
||||
# This depends on backend parsing; allow extra time for slower networks.
|
||||
- extendedWaitUntil:
|
||||
visible: "ORDER NAME"
|
||||
timeout: 60000
|
||||
- assertVisible: "Select Role"
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# Client App — Reports: Spend Report export (smoke)
|
||||
# Purpose:
|
||||
# - Opens Reports dashboard
|
||||
# - Opens Spend Report
|
||||
# - Triggers Export action and verifies placeholder export message
|
||||
#
|
||||
# Note: Export is currently placeholder-driven in UI strings.
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/reports/spend_report_export_smoke.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Reports"
|
||||
- extendedWaitUntil:
|
||||
visible: "Workforce Control Tower"
|
||||
timeout: 10000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Quick Reports"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
|
||||
- assertVisible: "Quick Reports"
|
||||
- tapOn: "Spend Report"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Spend Report"
|
||||
timeout: 10000
|
||||
|
||||
# Trigger export (may be a placeholder message)
|
||||
- tapOn: "Export"
|
||||
- extendedWaitUntil:
|
||||
visible: "Exporting Spend Report \\(Placeholder\\)"
|
||||
timeout: 10000
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
# Client App — E2E: Edit Profile save (with re-open verification)
|
||||
# Purpose:
|
||||
# - Navigates Settings → Profile → Edit Profile
|
||||
# - Saves a small change and verifies success message
|
||||
# - Re-opens Edit Profile to validate the change is visible (basic persistence check)
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/client/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/client/maestro/settings/edit_profile_save_e2e.yaml \
|
||||
# -e TEST_CLIENT_EMAIL=... \
|
||||
# -e TEST_CLIENT_PASSWORD=...
|
||||
|
||||
appId: com.krowwithus.client
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Home"
|
||||
- extendedWaitUntil:
|
||||
visible: "Welcome back"
|
||||
timeout: 15000
|
||||
|
||||
# Open Settings via header gear icon (top-right)
|
||||
- tapOn:
|
||||
point: "92%,10%"
|
||||
- extendedWaitUntil:
|
||||
visible: "Profile"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Profile"
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit Profile"
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Edit Profile"
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit Profile"
|
||||
timeout: 10000
|
||||
|
||||
- assertVisible: "FIRST NAME"
|
||||
- assertVisible: "LAST NAME"
|
||||
- assertVisible: "PHONE NUMBER"
|
||||
- assertVisible: "Save Changes"
|
||||
|
||||
# Append a suffix to first name (avoids needing to clear the field)
|
||||
- tapOn: "FIRST NAME"
|
||||
- inputText: " QA"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn: "Save Changes"
|
||||
- extendedWaitUntil:
|
||||
visible: "Profile updated successfully"
|
||||
timeout: 15000
|
||||
|
||||
# Re-open Edit Profile and confirm the suffix is visible somewhere in the form.
|
||||
- launchApp
|
||||
- tapOn: "Home"
|
||||
- extendedWaitUntil:
|
||||
visible: "Welcome back"
|
||||
timeout: 15000
|
||||
- tapOn:
|
||||
point: "92%,10%"
|
||||
- extendedWaitUntil:
|
||||
visible: "Profile"
|
||||
timeout: 10000
|
||||
- tapOn: "Profile"
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit Profile"
|
||||
timeout: 10000
|
||||
- tapOn: "Edit Profile"
|
||||
- extendedWaitUntil:
|
||||
visible: "Edit Profile"
|
||||
timeout: 10000
|
||||
|
||||
- assertVisible: "QA"
|
||||
|
||||
@@ -24,17 +24,25 @@ maestro/
|
||||
documents_list.yaml
|
||||
certificates_list.yaml
|
||||
time_card.yaml
|
||||
time_card_detail_smoke.yaml
|
||||
bank_account.yaml
|
||||
bank_account_fields_smoke.yaml
|
||||
tax_forms.yaml
|
||||
tax_forms_smoke.yaml
|
||||
faqs.yaml
|
||||
privacy_security.yaml
|
||||
emergency_contact.yaml
|
||||
attire.yaml
|
||||
attire_validation_e2e.yaml
|
||||
compliance/
|
||||
document_upload_banner.yaml # #550
|
||||
certificate_upload_banner.yaml # #551
|
||||
attire_upload_banner.yaml # #552
|
||||
document_upload_e2e.yaml
|
||||
certificate_upload_e2e.yaml
|
||||
shifts/
|
||||
find_shifts.yaml
|
||||
find_shifts_apply_smoke.yaml
|
||||
clock_in_e2e.yaml
|
||||
clock_out_e2e.yaml
|
||||
incomplete_profile_banner.yaml # #549 (requires incomplete-profile user)
|
||||
@@ -42,6 +50,7 @@ maestro/
|
||||
set_availability_e2e.yaml
|
||||
payments/
|
||||
payments_view_e2e.yaml
|
||||
payment_history_smoke.yaml
|
||||
home/
|
||||
benefits.yaml # #524
|
||||
```
|
||||
@@ -67,6 +76,11 @@ maestro/
|
||||
make test-e2e-staff # Auth only
|
||||
make test-e2e-staff-extended # Auth + nav + profile + compliance + shifts + benefits
|
||||
make test-e2e-staff-happy-path # Auth + clock in/out + availability + document upload + payments + sign out (#572)
|
||||
make test-e2e-staff-smoke # Deterministic smoke suite
|
||||
make test-e2e-staff-profile-smoke # Profile smoke (timecard/bank/tax/attire validation)
|
||||
make test-e2e-staff-payments-smoke # Payments smoke (earnings history)
|
||||
make test-e2e-staff-shifts-smoke # Shifts smoke (find shifts; optionally apply)
|
||||
make test-e2e-staff-compliance-e2e # Compliance E2E (document + certificate uploads)
|
||||
|
||||
# Direct
|
||||
maestro test apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# Staff App — E2E: Certificate Upload
|
||||
# Purpose:
|
||||
# - Opens Certificates
|
||||
# - Uploads a PDF certificate and verifies success snackbar
|
||||
#
|
||||
# Prerequisite:
|
||||
# - Push fixture.pdf to emulator/device before running:
|
||||
# bash apps/mobile/apps/staff/maestro/compliance/push_fixture.sh
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/compliance/certificate_upload_e2e.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Profile"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Certificates"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "Certificates"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Certificates"
|
||||
timeout: 15000
|
||||
|
||||
# Start upload (button can exist on cards or as an add-more CTA)
|
||||
- tapOn: "Upload Certificate"
|
||||
optional: true
|
||||
- tapOn: "Add Another Certificate"
|
||||
optional: true
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Upload Certificate"
|
||||
timeout: 10000
|
||||
|
||||
- assertVisible: "Certificate Name"
|
||||
- tapOn: "Certificate Name"
|
||||
- inputText: "E2E Food Handler Permit"
|
||||
- hideKeyboard
|
||||
|
||||
- tapOn: "Certificate Issuer"
|
||||
- inputText: "E2E Department"
|
||||
- hideKeyboard
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Upload File"
|
||||
visibilityPercentage: 50
|
||||
timeout: 10000
|
||||
|
||||
- tapOn: "Upload File"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "fixture.pdf"
|
||||
timeout: 10000
|
||||
- tapOn: "fixture.pdf"
|
||||
|
||||
- tapOn: "Save Certificate"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Certificate successfully uploaded and pending verification"
|
||||
timeout: 20000
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
# Compatibility wrapper for older docs/flows that reference push_upload_fixture.sh.
|
||||
# Preferred script name: push_fixture.sh
|
||||
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
|
||||
bash "$SCRIPT_DIR/push_fixture.sh"
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Staff App — Payments: history visible (smoke)
|
||||
# Purpose:
|
||||
# - Navigates to Earnings/Payments
|
||||
# - Verifies Total Earnings loads and Recent Payments section is reachable
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/payments/payment_history_smoke.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Shifts"
|
||||
timeout: 10000
|
||||
|
||||
# Try tab/button variants depending on profile
|
||||
- tapOn:
|
||||
id: "nav_payments"
|
||||
optional: true
|
||||
- tapOn: "Earnings"
|
||||
optional: true
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Total Earnings"
|
||||
timeout: 15000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Recent Payments"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
|
||||
- assertVisible: "Recent Payments"
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# Staff App — E2E: Attire capture attestation guard (deterministic)
|
||||
# Purpose:
|
||||
# - Opens Verify Attire from Profile
|
||||
# - Opens a required attire item
|
||||
# - Verifies Gallery/Camera actions are present
|
||||
# - Tapping Gallery without attesting shows the expected warning snackbar
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/profile/attire_validation_e2e.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Profile"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Attire"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "Attire"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Verify Attire"
|
||||
timeout: 15000
|
||||
|
||||
# Open a required attire item (label text can vary by environment, so we use a stable one)
|
||||
- scrollUntilVisible:
|
||||
element: "Black Pants"
|
||||
visibilityPercentage: 50
|
||||
timeout: 20000
|
||||
centerElement: true
|
||||
- tapOn: "Black Pants"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Reference Example"
|
||||
timeout: 15000
|
||||
|
||||
- assertVisible: "Gallery"
|
||||
- assertVisible: "Camera"
|
||||
|
||||
# Attestation is required before media access; the app should block and show a warning.
|
||||
- tapOn: "Gallery"
|
||||
- extendedWaitUntil:
|
||||
visible: "Please attest that you own this item."
|
||||
timeout: 10000
|
||||
- assertVisible: "Please attest that you own this item."
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# Staff App — Bank Account fields (smoke)
|
||||
# Purpose:
|
||||
# - Opens Bank Account screen
|
||||
# - Verifies presence of form fields when available
|
||||
#
|
||||
# Note: Depending on user state, the screen may show an "added" view rather than the add form.
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/profile/bank_account_fields_smoke.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- assertVisible: "Profile"
|
||||
- tapOn: "Profile"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Bank Account"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "Bank Account"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Bank Account"
|
||||
timeout: 15000
|
||||
|
||||
# If add form is visible, validate key fields; otherwise just ensure page loaded.
|
||||
- assertVisible: "Bank Account"
|
||||
|
||||
48
apps/mobile/apps/staff/maestro/profile/tax_forms_smoke.yaml
Normal file
48
apps/mobile/apps/staff/maestro/profile/tax_forms_smoke.yaml
Normal file
@@ -0,0 +1,48 @@
|
||||
# Staff App — Tax forms (smoke)
|
||||
# Purpose:
|
||||
# - Opens Tax Forms from Profile
|
||||
# - Verifies the Tax Documents page title renders
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/profile/tax_forms_smoke.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- tapOn: "Profile"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Tax Forms(\\n!)?"
|
||||
visibilityPercentage: 50
|
||||
timeout: 20000
|
||||
centerElement: true
|
||||
- tapOn: "Tax Forms(\\n!)?"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Why are these needed\\?"
|
||||
timeout: 30000
|
||||
|
||||
- assertVisible: "Why are these needed\\?"
|
||||
|
||||
# The forms can render below the fold; scroll to them before asserting.
|
||||
- scrollUntilVisible:
|
||||
element: "[\\s\\S]*Form W-4[\\s\\S]*"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
centerElement: true
|
||||
- assertVisible: "[\\s\\S]*Form W-4[\\s\\S]*"
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "[\\s\\S]*Form I-9[\\s\\S]*"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
centerElement: true
|
||||
- assertVisible: "[\\s\\S]*Form I-9[\\s\\S]*"
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# Staff App — Timecard details (smoke)
|
||||
# Purpose:
|
||||
# - Opens Timecard screen
|
||||
# - Verifies key summary labels render
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/profile/time_card_detail_smoke.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- assertVisible: "Profile"
|
||||
- tapOn: "Profile"
|
||||
- waitForAnimationToEnd:
|
||||
timeout: 3000
|
||||
|
||||
- scrollUntilVisible:
|
||||
element: "Timecard"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "Timecard"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Hours Worked"
|
||||
timeout: 15000
|
||||
|
||||
- assertVisible: "Timecard"
|
||||
- assertVisible: "Hours Worked"
|
||||
- assertVisible: "Total Earnings"
|
||||
|
||||
@@ -41,14 +41,13 @@ appId: com.krowwithus.staff
|
||||
direction: RIGHT
|
||||
element: "Swipe to Check In"
|
||||
|
||||
# If an attire photo is required directly upon clocking-in
|
||||
- optional:
|
||||
visible: "Take Photo"
|
||||
timeout: 5000
|
||||
- tapOn: "Take Photo"
|
||||
- extendedWaitUntil:
|
||||
visible: "Attire photo captured!"
|
||||
timeout: 10000
|
||||
# If an attire photo is required directly upon clocking-in (optional)
|
||||
- tapOn: "Take Photo"
|
||||
optional: true
|
||||
- extendedWaitUntil:
|
||||
visible: "Attire photo captured!"
|
||||
timeout: 10000
|
||||
optional: true
|
||||
|
||||
# Verified clock in completion
|
||||
- extendedWaitUntil:
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# Staff App — Find Shifts: open list and (optionally) apply
|
||||
# Purpose:
|
||||
# - Opens Shifts → Find Shifts
|
||||
# - If jobs are available, taps APPLY NOW and verifies "Applying" dialog
|
||||
# - If no jobs are available, verifies "No shifts found" empty state
|
||||
#
|
||||
# Run:
|
||||
# maestro test \
|
||||
# apps/mobile/apps/staff/maestro/auth/sign_in.yaml \
|
||||
# apps/mobile/apps/staff/maestro/shifts/find_shifts_apply_smoke.yaml \
|
||||
# -e TEST_STAFF_PHONE=... \
|
||||
# -e TEST_STAFF_OTP=...
|
||||
|
||||
appId: com.krowwithus.staff
|
||||
---
|
||||
- launchApp
|
||||
|
||||
- assertVisible: "Shifts"
|
||||
- tapOn: "Shifts"
|
||||
|
||||
# Open Find Shifts tab (count can vary; use regex)
|
||||
- scrollUntilVisible:
|
||||
element: "Find Shifts\\n.*"
|
||||
visibilityPercentage: 50
|
||||
timeout: 15000
|
||||
- tapOn: "Find Shifts\\n.*"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible: "Shifts"
|
||||
timeout: 10000
|
||||
|
||||
# If jobs exist, APPLY NOW should be present (optional)
|
||||
- tapOn: "APPLY NOW"
|
||||
optional: true
|
||||
- extendedWaitUntil:
|
||||
visible: "Applying"
|
||||
timeout: 10000
|
||||
optional: true
|
||||
- assertVisible: "Applying"
|
||||
optional: true
|
||||
|
||||
# Otherwise, empty state may be visible (optional)
|
||||
- assertVisible: "No shifts found"
|
||||
optional: true
|
||||
|
||||
Reference in New Issue
Block a user