Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
f8ce9f7
feat: add maestro E2E test app
ajpallares Feb 27, 2026
5cda4d6
fix: add iOS native project files for MaestroTestApp
ajpallares Feb 27, 2026
218eefe
fix: add empty yarn.lock for standalone MaestroTestApp project
ajpallares Feb 27, 2026
18d9a41
fix: pin react-native-screens to ~4.4.0 for RN 0.76 compat
ajpallares Feb 27, 2026
ef166de
fix: update MaestroTestApp .gitignore to match repo conventions
ajpallares Feb 27, 2026
0102aa8
fix: convert MaestroTestApp iOS to Swift AppDelegate
ajpallares Feb 27, 2026
73da28c
feat: add StoreKit configuration for iOS maestro E2E tests
ajpallares Mar 25, 2026
2a5d507
fix: add StoreKit config to Xcode project file references
ajpallares Mar 25, 2026
22530ca
fix: restore correct scheme identifier path for StoreKit config
ajpallares Mar 25, 2026
a231be2
fix: update bundle identifier to com.revenuecat.automatedsdktests
ajpallares Mar 25, 2026
5547354
fix: use correct StoreKit configuration from purchases-ios maestro app
ajpallares Mar 25, 2026
7d5ac03
fix: use removeCustomerInfoUpdateListener instead of listener.remove()
ajpallares Mar 30, 2026
f5276e7
fix: commit resolved yarn.lock for MaestroTestApp
ajpallares Mar 30, 2026
8234eb8
feat: add Android project for MaestroTestApp
ajpallares Mar 30, 2026
9c43d51
chore: remove StoreKit configuration file (using test store instead)
ajpallares Mar 30, 2026
75986fa
Improve Maestro test app: local deps, error handling, types, README
ajpallares Mar 30, 2026
57b3bf3
Use workspace + module-resolver for local deps, surface errors in UI,…
ajpallares Mar 30, 2026
e9d206f
Add error handling to getCustomerInfo, use blockList, regenerate Podf…
ajpallares Mar 30, 2026
86a3b0b
Refresh Podfile.lock (hermes-engine 0.76.6 → 0.76.9)
ajpallares Mar 30, 2026
dd68b80
Add react-native.config.js for native module auto-linking
ajpallares Mar 30, 2026
666833f
Add native module includes to Android settings.gradle
ajpallares Mar 30, 2026
e078ea8
Upgrade MaestroTestApp to React Native 0.78 and align Android toolchain
ajpallares Mar 30, 2026
501ef9f
Pin react-native-screens to ~4.11.0 and refresh lockfiles
ajpallares Mar 30, 2026
d61badc
Update root yarn.lock for react-native-screens ~4.11.0 pin
ajpallares Mar 30, 2026
cf0ccbc
Add @react-native-community/cli to MaestroTestApp devDependencies
ajpallares Mar 30, 2026
1a554ee
fix: make MaestroTestApp CI-ready with embedded JS bundle
ajpallares Apr 6, 2026
c91d3d7
fix: add fatalError for missing jsbundle and document SDK resolution
ajpallares Apr 6, 2026
87e8ba3
fix: don't commit Podfile.lock for MaestroTestApp
ajpallares Apr 6, 2026
82fa025
fix: re-commit Podfile.lock for MaestroTestApp
ajpallares Apr 6, 2026
79ca5af
fix: remove stale MaestroTestApp/yarn.lock
ajpallares Apr 6, 2026
795e8a7
fix: pin react-native to 0.78.3 for Xcode 26.4 compatibility
ajpallares Apr 6, 2026
6fc2caa
fix: bump react-native to 0.78.3 for Xcode 26.4 compatibility
ajpallares Apr 6, 2026
2bd0cb0
revert: undo Podfile.lock re-commitment and react-native version bumps
ajpallares Apr 6, 2026
8867ce7
chore: add MaestroTestApp pod install to bootstrap script
ajpallares Apr 8, 2026
2f04c19
fix: regenerate yarn.lock from main with MaestroTestApp workspace
ajpallares Apr 8, 2026
6a07bb5
feat: add maestro E2E test for purchase through paywall
ajpallares Feb 27, 2026
bc7a053
feat: update maestro tests to match iOS V2 paywall flow and add confi…
ajpallares Mar 25, 2026
8ce936b
refactor: simplify maestro tests to always use test store
ajpallares Mar 30, 2026
5cb2ea8
refactor: remove takeScreenshot steps from maestro tests
ajpallares Mar 30, 2026
d92bf51
fix: use regex in confirm_purchase.yaml to match both iOS and Android…
ajpallares Mar 30, 2026
454a543
fix: tighten confirm_purchase regex to match Test.*Purchase
ajpallares Mar 30, 2026
dcbdeea
refactor: use implicit Maestro timeouts for test store flow
ajpallares Apr 6, 2026
b19bac4
Merge branch 'main' into e2e-tests-app
ajpallares Apr 9, 2026
403c2bb
Merge branch 'e2e-tests-app' into add-maestro-e2e-test
ajpallares Apr 9, 2026
e1d8921
Merge branch 'main' into add-maestro-e2e-test
ajpallares Apr 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions e2e-tests/maestro/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# config.yaml

executionOrder:
continueOnFailure: false

flows:
- e2e_tests/*
26 changes: 26 additions & 0 deletions e2e-tests/maestro/e2e_tests/purchase_through_paywall.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# This flow tests the purchase through paywall flow.
# It navigates to the purchase screen, verifies initial entitlements,
# presents the paywall, makes a purchase, and verifies entitlements update.

appId: com.revenuecat.automatedsdktests
name: Purchase through paywall

---
- clearState
- pressKey: home
- launchApp
- assertVisible: "Test Cases"
- tapOn:
text: "Purchase through paywall"
- assertVisible: "Entitlements: none"
- assertVisible: "Present Paywall"
- tapOn:
text: "Present Paywall"
- assertVisible: "Paywall V2"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could be worth to add snapshots of this paywall + The screen after a purchase is completed and perform some verification on those snapshots, so we're aware of unintended changes? Of course, this can come in follow-up PRs

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right. Will take a note to add it to a follow-up PR. Thanks for the suggestion!

- tapOn:
text: "Yearly"
- tapOn:
text: "Continue"
- runFlow:
file: ../utils/confirm_purchase.yaml
- assertVisible: "Entitlements: pro"
9 changes: 9 additions & 0 deletions e2e-tests/maestro/utils/confirm_purchase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# This flow handles the Test Store purchase confirmation.

appId: com.revenuecat.automatedsdktests
name: Confirm purchase - Test Store Purchase Alert

---
- assertVisible: "Test.*Purchase"
- tapOn:
text: "(?i)test valid purchase"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at this issue, maybe we could do something like this instead:

- runFlow:
    when:
      platform: Android
    commands:
      - tapOn:
          text: "Android text"

- runFlow:
    when:
      platform: iOS
    commands:
      - tapOn:
          text: "iOS Text"

This way we tap on the exact string. But not a blocker I would say. I think what you have also works!

Copy link
Copy Markdown
Member Author

@ajpallares ajpallares Apr 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice suggestion! My idea was to keep it case insensitive with the purpose of changing the texts in the natives to have them match.

So I've created RevenueCat/purchases-android#3314 which makes the texts the same (which I think is desirable regardless 😄). And also #1724 for the same alert in this repo