Skip test cases list in maestro tests using launch arguments#1714
Merged
Conversation
Made-with: Cursor
The default Flutter widget test references MyApp which doesn't exist in this project (the app class is MaestroTestApp). Made-with: Cursor
- Lower Gradle JVM from 8G/4G to 4G/2G (sufficient for a minimal test app) - Simplify README setup: flutter pub get is all that's needed Made-with: Cursor
This was referenced Apr 8, 2026
Merged
Merged
Skip test cases list in maestro tests using launch arguments
RevenueCat/cordova-plugin-purchases#919
Merged
- Add `mounted` guard before every setState after an async gap - Remove unused Widget Key identifiers (Maestro uses text selectors) - Add flutter_lints to dev_dependencies (analysis_options.yaml referenced it) - Remove leftover flutter create TODO comments from build.gradle.kts - Remove CocoaPods from README prerequisites (flutter build handles it) Made-with: Cursor
Made-with: Cursor
These steps were only used for debugging CI failures and add unnecessary clutter to the CI report. Made-with: Cursor
Both iOS and Android Test Store dialogs use the same text, so the regex patterns are unnecessary. Use exact strings like the native iOS SDK's maestro tests do. Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Replace manual flutter precache + pod install + xcodebuild with the idiomatic `flutter build ios --debug --simulator`, which handles all intermediate steps automatically. Made-with: Cursor
Fail fast with a clear error if RC_E2E_TEST_API_KEY_PRODUCTION_TEST_STORE is not set, instead of silently replacing the placeholder with an empty string and crashing at runtime. Made-with: Cursor
028102c to
0fe57e2
Compare
Pass e2e_test_flow as a launchApp argument so the app navigates directly to the target test case screen, making tests faster. The Test Cases list is preserved for manual/local usage. Made-with: Cursor
802197e to
7c3d105
Compare
The map values were never used — only .containsKey() was called, then the routing hardcoded the same string comparison anyway. Also catch MissingPluginException specifically with a debugPrint for diagnosability. Made-with: Cursor
ajpallares
added a commit
to RevenueCat/react-native-purchases
that referenced
this pull request
Apr 13, 2026
## Summary - Pass `e2e_test_flow` as a Maestro `launchApp` argument so the app navigates directly to the target test case screen, bypassing the Test Cases list - Reads the argument via `initialProps` on iOS (UserDefaults) and Android (intent extras) - Makes maestro tests faster by skipping the list navigation step - The Test Cases list is preserved for manual/local usage ## Related PRs - RevenueCat/purchases-kmp#796 - RevenueCat/purchases-flutter#1714 - RevenueCat/purchases-capacitor#757 - RevenueCat/cordova-plugin-purchases#919 - RevenueCat/purchases-unity#897 Follows the same pattern as the iOS SDK's maestro app (`purchases-ios/Examples/rc-maestro`). --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The test app no longer uses CocoaPods (removed in PR1), so there's no need to install it for the Maestro E2E tests. Made-with: Cursor
Extract test case definitions to test_cases.dart and use them for both the TestCasesScreen list and the launch-arg routing. Adding a new test case is now a single entry in test_cases.dart. Made-with: Cursor
- Remove Podfile and Podfile.lock (project already uses SPM via FlutterGeneratedPluginSwiftPackage; zero CocoaPods refs in pbxproj) - Remove Pods #include? from Debug/Release xcconfig - Add enable-swift-package-manager: true to pubspec.yaml - Extract test case definitions to test_cases.dart for extensibility (single source of truth for title, flowKey, and screen widget) - Refactor TestCasesScreen to build from the shared list Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Avoids eagerly constructing all screen widgets upfront — the widget is only created when the user navigates to it. Made-with: Cursor
Resolve conflict in test_cases.dart: keep flowKey from PR4 and builder function from PR1, update main.dart to use builder(). Made-with: Cursor
Only e2e-tests context is needed, matching purchases-ios. Made-with: Cursor
Fail fast if the placeholder was not replaced, matching KMP. Made-with: Cursor
rickvdl
approved these changes
Apr 15, 2026
ajpallares
added a commit
that referenced
this pull request
Apr 15, 2026
## Summary Adds a Maestro E2E test app under `e2e-tests/MaestroTestApp/` — a minimal Flutter app with two screens used by automated Maestro flows to verify the RevenueCat purchase integration. - Two screens: "Test Cases" list and "Purchase through paywall" (presents a RevenueCat V2 paywall and displays entitlement status) - Bundle ID `com.revenuecat.automatedsdktests` - API key placeholder (`MAESTRO_TESTS_REVENUECAT_API_KEY`) replaced at CI time via `sed` - Local SDK resolution via `path:` references + `dependency_overrides` (same mechanism as `revenuecat_examples/purchase_tester`) - iOS plugins resolved via Swift Package Manager (`FlutterGeneratedPluginSwiftPackage`); CocoaPods only carries the Flutter engine - Errors from `getCustomerInfo` and `presentPaywall` are surfaced in the UI for debugging failed Maestro flows Counterpart PRs: [react-native-purchases#1635](RevenueCat/react-native-purchases#1635), [purchases-capacitor#699](RevenueCat/purchases-capacitor#699), [cordova-plugin-purchases#857](RevenueCat/cordova-plugin-purchases#857), [purchases-unity#836](RevenueCat/purchases-unity#836), [purchases-kmp#708](RevenueCat/purchases-kmp#708) ### Follow-up PRs (stacked) - [#1698](#1698) — Maestro test flows (YAML) - [#1699](#1699) — CircleCI jobs to run the tests - [#1714](#1714) — Launch argument routing to skip test list <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Adds a new, isolated test-only Flutter project with standard iOS/Android scaffolding and a simple paywall purchase flow; it does not modify the SDK runtime code paths. > > **Overview** > Introduces a new Flutter app in `e2e-tests/MaestroTestApp` intended for Maestro E2E automation, including a test-case list screen and a purchase flow that calls `RevenueCatUI.presentPaywall()` and displays active `pro` entitlement state. > > Adds full iOS/Android project scaffolding (manifests, Gradle/Xcode configs, app IDs) plus local `path:` dependencies on `purchases_flutter`/`purchases_ui_flutter`, and documents CI-time API key injection via the `MAESTRO_TESTS_REVENUECAT_API_KEY` placeholder. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit cb1f2f4. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Resolve conflicts keeping launch-args feature additions (MethodChannel bridges, flowKey routing, direct launchApp arguments). Made-with: Cursor
This was referenced Apr 15, 2026
RCGitBot
added a commit
that referenced
this pull request
Apr 17, 2026
**This is an automatic release.** ## RevenueCat SDK ### 🐞 Bugfixes * [EXTERNAL] Fix Wasm incompatibility in web error processing (#1684) contributed by @brunovsiqueira (#1722) via Toni Rico (@tonidero) ### 📦 Dependency Updates * [AUTOMATIC BUMP] Updates purchases-hybrid-common to 18.1.0 (#1726) via RevenueCat Git Bot (@RCGitBot) * [Android 10.2.0](https://github.com/RevenueCat/purchases-android/releases/tag/10.2.0) * [iOS 5.68.0](https://github.com/RevenueCat/purchases-ios/releases/tag/5.68.0) ### 🔄 Other Changes * Add retry mechanism to Maestro e2e tests (#1723) via Antonio Pallares (@ajpallares) * Bump fastlane-plugin-revenuecat_internal from `20911d1` to `a1eed48` (#1725) via dependabot[bot] (@dependabot[bot]) * Skip test cases list in maestro tests using launch arguments (#1714) via Antonio Pallares (@ajpallares) * Add CircleCI job for maestro E2E tests (#1699) via Antonio Pallares (@ajpallares) * Add maestro E2E test for purchase through paywall (#1698) via Antonio Pallares (@ajpallares) * Add maestro E2E test app (#1654) via Antonio Pallares (@ajpallares) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Low risk release bookkeeping: primarily version bumps and changelog/version-matrix updates, with no functional logic changes in the plugin code beyond reporting the new version string. > > **Overview** > Updates the SDKs to **v`10.0.1`** by bumping version identifiers across `pubspec.yaml`, Android Gradle configs, and iOS/macOS podspecs (including the runtime-reported plugin version strings). > > Refreshes release documentation (`CHANGELOG.md`, `CHANGELOG-LATEST.md`, `VERSIONS.md`) to include the `10.0.1` notes (Wasm web error-processing fix) and the dependency bump to `purchases-hybrid-common` `18.1.0` (Android `10.2.0`, iOS `5.68.0`). > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit ff0bb5e. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
ajpallares
added a commit
to RevenueCat/cordova-plugin-purchases
that referenced
this pull request
Apr 20, 2026
## Summary Passes `e2e_test_flow` as a Maestro `launchApp` argument so the app navigates directly to the target test case screen, bypassing the Test Cases list. ### Changes: - Adds a local `cordova-plugin-launch-args` Cordova plugin with iOS (reads UserDefaults) and Android (reads intent extras) implementations to bridge the argument to the JS layer - Updates `app.js` to use `LaunchArgs.getTestFlow()` with the `TEST_CASES` registry for routing (same pattern as Flutter's `testCases` list and KMP's `testFlowScreenMap`) - When no `e2e_test_flow` is set, falls back to showing the Test Cases list screen - Makes maestro tests faster by skipping the list navigation step ## Related PRs - RevenueCat/react-native-purchases#1722 - RevenueCat/purchases-kmp#796 - RevenueCat/purchases-flutter#1714 - RevenueCat/purchases-capacitor#757 - RevenueCat/purchases-unity#897 Follows the same pattern as the iOS SDK's maestro app (`purchases-ios/Examples/rc-maestro`). --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
ajpallares
added a commit
to RevenueCat/purchases-capacitor
that referenced
this pull request
Apr 27, 2026
## Summary - Pass `e2e_test_flow` as a Maestro `launchApp` argument so the app navigates directly to the target test case screen, bypassing the Test Cases list - Adds a local `LaunchArgsPlugin` Capacitor plugin on both iOS (reads UserDefaults) and Android (reads intent extras) to bridge the argument to the web layer - Makes maestro tests faster by skipping the list navigation step - The Test Cases list is preserved for manual/local usage ## Related PRs - RevenueCat/react-native-purchases#1722 - RevenueCat/purchases-kmp#796 - RevenueCat/purchases-flutter#1714 - RevenueCat/cordova-plugin-purchases#919 - RevenueCat/purchases-unity#897 Follows the same pattern as the iOS SDK's maestro app (`purchases-ios/Examples/rc-maestro`).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
e2e_test_flowas a MaestrolaunchAppargument so the app navigates directly to the target test case screen, bypassing the Test Cases listMethodChannelto bridge the launch argument from native (iOS UserDefaults / Android intent extras) to DartRelated PRs
Follows the same pattern as the iOS SDK's maestro app (
purchases-ios/Examples/rc-maestro).Note
Low Risk
Changes are limited to the Maestro E2E test harness app and its test flow YAML, adding a small native↔Dart MethodChannel bridge and startup routing logic; low impact outside automated tests.
Overview
Adds support for passing an
e2e_test_flowlaunch argument from Maestro into the Flutter MaestroTestApp via a new nativeMethodChannel(com.revenuecat.maestro/launch_args) on both Android (intent extra) and iOS (UserDefaults).On startup, the app now looks up the matching
testCasesentry by a newflowKeyand navigates directly to that test case screen, otherwise falling back to the existing Test Cases list for manual runs. The Maestropurchase_through_paywall.yamlflow is updated to launch the app with the new argument and skip list navigation.Reviewed by Cursor Bugbot for commit 8e21103. Bugbot is set up for automated code reviews on this repo. Configure here.