Skip to content

feat(e2e): add the customer account checkout test on all four targets - #562

Draft
kieran-osgood-shopify wants to merge 6 commits into
kieran-osgood/e2e-checkout-guestfrom
kieran-osgood/e2e-checkout-customer-account
Draft

feat(e2e): add the customer account checkout test on all four targets#562
kieran-osgood-shopify wants to merge 6 commits into
kieran-osgood/e2e-checkout-guestfrom
kieran-osgood/e2e-checkout-customer-account

Conversation

@kieran-osgood-shopify

Copy link
Copy Markdown
Contributor

What changes are you making?

How to test


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.

@kieran-osgood-shopify
kieran-osgood-shopify requested a review from a team as a code owner July 31, 2026 14:59
@github-actions github-actions Bot added the #gsd:50662 Rebase Checkout Kit on UCP label Jul 31, 2026
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

React Native — Coverage Report

Lines Statements Branches Functions
Coverage: 92%
91.85% (327/356) 87.98% (183/208) 100% (86/86)

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

Package Size

Platform Artifact Base Head Delta
React Native npm tarball 103.1 KiB 103.1 KiB 0 B
Android release AAR 255.4 KiB 255.4 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/ShopifyCheckoutKit.swift 15.0 KiB 15.0 KiB 0 B
ios/AcceleratedCheckoutButtons.swift 14.0 KiB 14.0 KiB 0 B
lib/commonjs/index.js 13.1 KiB 13.1 KiB 0 B
src/components/AcceleratedCheckoutButtons.tsx 12.9 KiB 12.9 KiB 0 B
src/index.ts 12.5 KiB 12.5 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js 11.4 KiB 11.4 KiB 0 B
android/src/main/java/com/shopify/reactnative/checkoutkit/ShopifyCheckoutKitModule.java 11.1 KiB 11.1 KiB 0 B
lib/module/index.js 10.4 KiB 10.4 KiB 0 B
lib/commonjs/components/AcceleratedCheckoutButtons.js.map 10.3 KiB 10.3 KiB 0 B
lib/module/components/AcceleratedCheckoutButtons.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
lib/module/components/AcceleratedCheckoutButtons.js.map 9.1 KiB 9.1 KiB 0 B
src/index.d.ts 8.9 KiB 8.9 KiB 0 B
lib/module/index.js.map 8.2 KiB 8.2 KiB 0 B
src/present-dispatcher.ts 8.0 KiB 8.0 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 270.1 KiB 270.1 KiB 0 B
res/layout/checkout_view_content.xml 2.2 KiB 2.2 KiB 0 B
res/layout/checkout_sheet_content.xml 2.0 KiB 2.0 KiB 0 B
res/values/values.xml 1.2 KiB 1.2 KiB 0 B
R.txt 1.1 KiB 1.1 KiB 0 B
proguard.txt 798 B 798 B 0 B
AndroidManifest.xml 578 B 578 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.

@bitrise

bitrise Bot commented Jul 31, 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 Tags Target Platform OS version tag Device
launch, cart, checkout, account react-native ios latest iPhone 15
iOS 27 Beta
launch, cart, checkout, account react-native android latest Google Pixel 9
Android 17.0
launch, cart, checkout, account kotlin android latest Google Pixel 9
Android 17.0
launch, cart, checkout, account swift ios latest iPhone 15
iOS 27 Beta

Failures

Caution

These E2E checks are not yet required, so they do not block merging — but a failure may still indicate a real issue to resolve before merging.
If you believe an assertion is flaky, please raise a ticket in the #checkout-kit-devs channel so it can be addressed.

BrowserStack artifacts require BrowserStack access. Sign in to BrowserStack App Automate before opening artifact links.

iOS — react-native

Test Status Artifacts
./tests/shared/checkout-guest BrowserStack · Video · Screenshot · Maestro commands · Maestro log

Android — react-native

Test Status Artifacts
./tests/shared/checkout-guest BrowserStack · Video · Screenshot · Maestro commands · Maestro log

Android — kotlin

Test Status Artifacts
./tests/shared/checkout-guest BrowserStack · Video · Screenshot · Maestro commands · Maestro log

iOS — swift

Test Status Artifacts
./tests/shared/checkout-hardcoded-buyer-identity BrowserStack · Video · Screenshot · Maestro commands · Maestro log
./tests/shared/checkout-guest BrowserStack · Video · Screenshot · Maestro commands · Maestro log

kieran-osgood-shopify added a commit that referenced this pull request Jul 31, 2026
Six tests pass locally on all four targets and fail on BrowserStack. PR #561
and PR #562 show the same two patterns, so no sample change causes them. Both
patterns need the Maestro logs, which need BrowserStack access.

Separate them from the flake register, because a flake gives a different result
from the same code and these give the same result every run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch 2 times, most recently from 6f86347 to 7a16bc3 Compare August 4, 2026 17:04
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-guest branch from 0b5e09e to 260aa4a Compare August 4, 2026 17:04
@kieran-osgood-shopify
kieran-osgood-shopify marked this pull request as draft August 5, 2026 09:20
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch from 7a16bc3 to d854029 Compare August 5, 2026 09:22
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch from d854029 to 5dfb0bb Compare August 5, 2026 11:06
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch from 5dfb0bb to b16294b Compare August 5, 2026 11:35
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-guest branch 2 times, most recently from 6437e1a to 0c65d8f Compare August 5, 2026 11:45
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch from b16294b to 0075a38 Compare August 5, 2026 11:45
kieran-osgood-shopify and others added 6 commits August 5, 2026 13:32
The test signs a test customer in through the hosted login page, seeds a cart
with the customer buyer identity, and orders. Checkout reads the contact and
the saved delivery address from the account, so the test asserts the prefill
instead of typing an address.

Three sample repairs fall out of running it:

- The Swift E2E build signed nothing, so the app carried no
  application-identifier and every keychain write returned -34018. The cart
  then dropped the customer and checkout opened as a guest. The build now
  signs ad hoc.
- generate_android_env wrote only EMAIL and PHONE, so the Android sample used
  its Canadian fallbacks and the billing labels never matched. It now writes
  the same eleven keys as the Swift and React Native generators, and
  test_setup_storefront_env asserts all three.
- The React Native sign-in link opened Login with no AccountHome beneath it,
  so goBack() left the tab and the sample landed on the catalog. The link now
  passes initial: false.

The account credentials and the login web view user agent stay out of the
repository. A run without them skips the account tag instead of failing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
BrowserStack answers HTTP 422 BROWSERSTACK_DUPLICATE_TAGS when one tag appears
in both includeTags and excludeTags. The account skip added `account` to the
exclude list and left it in the include list, so every CI row failed before it
started a build.

`resolve_tags` now removes the tag from the include list at the same moment it
adds it to the exclude list. `run_maestro` applies the same rule locally, and it
exits early when the requested tags need account credentials, because an empty
include list makes Maestro run the whole suite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
Two columns carried no information. `execute` is the tests folder on every row
now that tags select the flows, so the Suite column read `.` four times. The
column now names the include tags, and reads `all` when a row carries none. The
failure heading and the missing-run label used the same value, so both change too.

A row that fails before it starts a build reports no test cases. `result.json`
already holds `error` and `error_class`, but the report dropped both, so a reader
saw an empty row and had to open Bitrise. The report now names the class and the
message above the table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
Six tests pass locally on all four targets and fail on BrowserStack. PR #561
and PR #562 show the same two patterns, so no sample change causes them. Both
patterns need the Maestro logs, which need BrowserStack access.

Separate them from the flake register, because a flake gives a different result
from the same code and these give the same result every run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
Bitrise holds no address secrets, so a CI clone had no root .env, no React Native
.env and no xcconfig. Every address key fell through to the Canadian default, and
the generated cart carried a Toronto address into a US shop. That shop offers no
delivery method for Canada, so checkout-hardcoded-buyer-identity died deep inside
checkout on both Android targets.

The address is the same public fixture the guest test already types, so it needs
no secret. The Android sample's Gradle build carried a second copy of the same
Canadian fallbacks; it now matches.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
Eight BrowserStack iOS builds carrying clearState failed on five different
units. Three builds without it passed, two of them on units that had just
failed. The fault is deterministic, so a retry cannot recover it and the
removal stands on measurement rather than on one run.

Also confirms flake B4. The Android sample gives a guest cart a Canadian
buyer identity, while Swift and React Native take the shop market, so the
Kotlin checkout renders a Canadian form against a United States fixture.

The Maestro version pin moves out of this stack. #568 adds e2e/.maestro-version
and makes the executor read it, so DEFAULT_MAESTRO_VERSION and its tests leave
here rather than sit as a second copy of the same number. The iOS control link
tests fail until #568 merges.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Assisted-By: devx/5b4b8d5b-690a-4389-841e-039723ade1da
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-guest branch from 0c65d8f to b132a3d Compare August 5, 2026 12:33
@kieran-osgood-shopify
kieran-osgood-shopify force-pushed the kieran-osgood/e2e-checkout-customer-account branch from 0075a38 to 9571f14 Compare August 5, 2026 12:33
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.

1 participant