Skip to content

Add local maestro runner - Run cart control-link on kotlin/swift - #558

Merged
kieran-osgood-shopify merged 1 commit into
mainfrom
kieran-osgood/e2e-cart-from-control-link
Aug 14, 2026
Merged

Add local maestro runner - Run cart control-link on kotlin/swift#558
kieran-osgood-shopify merged 1 commit into
mainfrom
kieran-osgood/e2e-cart-from-control-link

Conversation

@kieran-osgood-shopify

@kieran-osgood-shopify kieran-osgood-shopify commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

What changes are you making?

bootstrap-cart-from-link only ran on react-native
Adds support for this to run on swift/kotlin too

How

Adds a smoke test for 558 to exercise this path on CI, as of 559 it'll be removed in favour of opting in the shared tests and moving swift/kotlin tags

There was some flakiness observed on iOS where the clearState would cause the test to fail
It would uninstall the app (which is how maestro handles clearing the state) but it would seemingly report success, move on to our next assertion (the ready marker appears), which held the app for its timeout, before eventually the app successfully launched but we already passed the assertion.

The workaround was to add a retry, which essentially works like this:

Before

 - clearState
 - the 60-second ready-marker assertion.

After

 - clearState
 - retry:
     - a normal launch without clearing state;
     - the 60-second ready-marker assertion.

Refactors to use a singular script e2e/scripts/run_maestro which is a single entry point for all e2e tests to start from

Testing

Running the local wrapper we can see that it picks up the tests only for that suite

dev swift e2e
 - Swift unfiltered: 2/2, shared tests only
dev android e2e
 - Kotlin unfiltered: 2/2, shared tests only
dev rn e2e ios
 - RN iOS discovery: 4/4 expected flows discovered
dev rn e2e android
 - RN android discovery: 4/4 expected flows discovered

Swift
image.png
Android

image.png


Before you merge

Important

  • I've added tests to support my implementation
  • I have read and agree with the Contribution Guidelines
  • I have read and agree with the Code of Conduct
  • I've updated the relevant platform README (platforms/swift/README.md and/or platforms/android/README.md)

Releasing a new Swift version?
  • I have bumped the version in ShopifyCheckoutKit.podspec
  • I have bumped the version in platforms/swift/Sources/ShopifyCheckoutKit/ShopifyCheckoutKit.swift
  • I have updated the SwiftPM/CocoaPods version snippets in platforms/swift/README.md (major version only)
Releasing a new Embedded Checkout Protocol version?
  • I have bumped embeddedCheckoutProtocolAndroid in platforms/android/gradle/libs.versions.toml
  • I have updated protocol/languages/kotlin/embedded-checkout-protocol/api/embedded-checkout-protocol.api if the public API changed
Releasing a new Android version?
  • I have bumped checkoutKitAndroid in platforms/android/gradle/libs.versions.toml
  • I have updated the Gradle/Maven version snippets in platforms/android/README.md

Tip

See the Contributing documentation for the full release process per platform.

@tiagocandido
tiagocandido force-pushed the kieran-osgood/e2e-matrix-tags branch from 8947b3c to 05b95c0 Compare August 3, 2026 12:12
@tiagocandido
tiagocandido force-pushed the kieran-osgood/e2e-cart-from-control-link branch 2 times, most recently from 893721f to ecc30cc Compare August 3, 2026 14:42
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from ecc30cc to f3d5bf1 Compare August 4, 2026 17:04
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-matrix-tags branch from 275339e to 69fc2dd Compare August 5, 2026 11:06
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from f3d5bf1 to 3cb7142 Compare August 5, 2026 11:06
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from 68a47a1 to a599103 Compare August 12, 2026 13:50
@kieran-osgood-shopify
kieran-osgood-shopify changed the base branch from kieran-osgood/e2e-matrix-tags to graphite-base/558 August 12, 2026 13:57
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from a599103 to 04a053e Compare August 12, 2026 13:58
@kieran-osgood-shopify
kieran-osgood-shopify changed the base branch from graphite-base/558 to kieran-osgood/e2e-matrix-tags August 12, 2026 13:58
@kieran-osgood-shopify kieran-osgood-shopify changed the title feat(e2e): add the cart-from-control-link test on all four targets Add local maestro runner - Run cart control-link on kotlin/swift Aug 12, 2026
Comment thread e2e/scripts/parse_maestro_tag_args Outdated
@kieran-osgood-shopify
kieran-osgood-shopify changed the base branch from kieran-osgood/e2e-matrix-tags to graphite-base/558 August 12, 2026 14:33
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from 04a053e to 436c2f9 Compare August 12, 2026 14:34
@graphite-app
graphite-app Bot changed the base branch from graphite-base/558 to main August 12, 2026 14:34
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch 2 times, most recently from fd81530 to 36073ce Compare August 12, 2026 14:37
@kieran-osgood-shopify
kieran-osgood-shopify marked this pull request as ready for review August 12, 2026 14:42
@kieran-osgood-shopify
kieran-osgood-shopify requested a review from a team as a code owner August 12, 2026 14:42
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown

React Native — Coverage Report

Lines Statements Branches Functions
Coverage: 92%
91.64% (307/335) 88.88% (176/198) 100% (81/81)

@github-actions

Copy link
Copy Markdown

Package Size

Platform Artifact Base Head Delta
React Native npm tarball 101.6 KiB 101.6 KiB 0 B
Android release AAR 281.8 KiB 281.8 KiB 0 B
React Native file breakdown
File Base Head Delta
node_modules/@shopify/checkout-kit-protocol/src/generated/Models.ts 85.4 KiB 85.4 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/Models.d.ts 53.0 KiB 53.0 KiB 0 B
ios/AcceleratedCheckoutButtons.swift 14.1 KiB 14.1 KiB 0 B
ios/ShopifyCheckoutKit.swift 13.5 KiB 13.5 KiB 0 B
src/components/AcceleratedCheckoutButtons.tsx 13.0 KiB 13.0 KiB 0 B
android/src/main/java/com/shopify/reactnative/checkoutkit/ShopifyCheckoutKitModule.java 12.8 KiB 12.8 KiB 0 B
lib/commonjs/index.js 12.3 KiB 12.3 KiB 0 B
src/index.ts 12.2 KiB 12.2 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js 11.4 KiB 11.4 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js.map 10.4 KiB 10.4 KiB 0 B
lib/module/components/AcceleratedCheckoutButtons.js 10.2 KiB 10.2 KiB 0 B
lib/module/index.js 10.2 KiB 10.2 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolNotifications.ts 9.5 KiB 9.5 KiB 0 B
src/index.d.ts 9.1 KiB 9.1 KiB 0 B
lib/module/components/AcceleratedCheckoutButtons.js.map 9.1 KiB 9.1 KiB 0 B
src/present-dispatcher.ts 8.0 KiB 8.0 KiB 0 B
lib/module/index.js.map 7.9 KiB 7.9 KiB 0 B
lib/commonjs/index.js.map 7.7 KiB 7.7 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolNotifications.d.ts 7.6 KiB 7.6 KiB 0 B
node_modules/@shopify/checkout-kit-protocol/src/generated/ProtocolRenameMap.ts 7.2 KiB 7.2 KiB 0 B
…and 110 smaller files
Android file breakdown
File Base Head Delta
classes.jar 297.7 KiB 297.7 KiB 0 B
res/layout/checkout_view_content.xml 2.6 KiB 2.6 KiB 0 B
res/layout/checkout_sheet_content.xml 2.0 KiB 2.0 KiB 0 B
res/values/values.xml 1.3 KiB 1.3 KiB 0 B
R.txt 1.2 KiB 1.2 KiB 0 B
AndroidManifest.xml 922 B 922 B 0 B
proguard.txt 798 B 798 B 0 B
res/drawable/close.xml 431 B 431 B 0 B
res/menu/checkout_menu.xml 354 B 354 B 0 B
META-INF/com/android/build/gradle/aar-metadata.properties 157 B 157 B 0 B

Measured from the PR base SHA and PR head SHA. The file breakdown shows uncompressed sizes within each package artifact, so individual files do not sum to the compressed artifact total. This comment reports package artifact sizes only; it is not a final app binary-size report.

@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from 36073ce to 0ef90cb Compare August 12, 2026 14:45
@bitrise

bitrise Bot commented Aug 12, 2026

Copy link
Copy Markdown

Install this build

Open Tophat, select your target device, then click Install. Links open on the Mac running Tophat.

SDK Install
React Native Install with Tophat
Swift Install with Tophat
Kotlin Install with Tophat

Checkout Kit E2E results

Status Suite Target Platform OS version tag Device
react-native-ios react-native ios latest iPhone 15
iOS 27 Beta
react-native-android react-native android latest Google Pixel 9
Android 17.0
kotlin-android kotlin android latest Google Pixel 9
Android 17.0
swift-ios swift ios latest iPhone 15
iOS 27 Beta

@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch 4 times, most recently from f606716 to 7848c02 Compare August 13, 2026 13:41
Comment thread e2e/flows/app/bootstrap-cart-from-link.yaml
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from 7848c02 to 7ee2368 Compare August 14, 2026 09:34
The first shared test that runs on Swift iOS, Kotlin Android, React Native iOS
and React Native Android. It drives the `cart` control link and asserts the
`cart-checkout-ready` marker, which appears only after the app parsed the link,
resolved a variant, created a cart, added the line, and navigated.

Adds `e2e/scripts/run_maestro`, the single Maestro invocation every local runner
calls, plus `dev swift e2e` and `dev android e2e` so all four targets run locally.

Verified locally: React Native iOS 23s, Swift iOS 23s, Kotlin Android 15s,
React Native Android 19s.

Three deliberate deviations from the plan:

- `E2E_CONTROL_LINK` is derived as `<app_id>://e2e` rather than configured per
  application. The scheme equals the app id on all four targets, so a second copy
  would drift from `app_id`.
- Maestro runs the workspace root, not `tests`. Maestro resolves the `flows:` glob
  in `config.yaml` relative to the path on the command line, so `tests` would look
  for `tests/tests/**` and match nothing. `tests_path` remains for tag discovery.
- The flow no longer stops the app before the link. `SceneDelegate` discards a
  cold-start URL and Android would need launch-intent handling, so one flow line
  replaces native work on two platforms. The account journey needs a running app
  anyway.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/62deda35-c064-4e16-99eb-02b2792eaf51
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-cart-from-control-link branch from 7ee2368 to 477a242 Compare August 14, 2026 12:01
@kieran-osgood-shopify
kieran-osgood-shopify merged commit 53cb318 into main Aug 14, 2026
37 checks passed
@kieran-osgood-shopify
kieran-osgood-shopify deleted the kieran-osgood/e2e-cart-from-control-link branch August 14, 2026 14:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

#gsd:50662 Rebase Checkout Kit on UCP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants