Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .changeset/verify-expo-auth-view-host-back.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
---
2 changes: 1 addition & 1 deletion .claude/skills/verify-clerk-expo/features/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,6 @@ Each feature file starts with an H1 title and one paragraph describing the user-
- [Native modules](./native-modules.md) covers `useSignInWithGoogle` opening the native Google sign-in, a cancel of it on iOS, and on Android when back closes Google's page, and `useBiometricCredentials` reporting what its native module found on the device.
- [Update required](./update-required.md) covers the update screen for a signed-in and a signed-out user on a build below the minimum, the same session returning once the minimum is lowered, and a build at the minimum, on both platforms, and it lists the states no spec reaches.

Not mapped yet: SSO through `useSSO` (no real OAuth on simulators), sign-in and sign-up in Account Portal through `useHostedAuth` from `@clerk/expo/hosted-auth`, which opens a browser that no spec drives and the test app has no button for (`packages/expo/src/hooks/useHostedAuth.ts`), a Google or Apple native sign-in with a real account, passkeys, enrolling or using a biometric (no associated domains or Secure Enclave on the simulator), session tasks in the native views.
Not mapped yet: SSO through `useSSO` (no real OAuth on simulators), sign-in and sign-up in Account Portal through `useHostedAuth` from `@clerk/expo/hosted-auth`, which opens a browser that no spec drives and the test app has no button for (`packages/expo/src/hooks/useHostedAuth.ts`), a Google or Apple native sign-in with a real account, passkeys, enrolling or using a biometric (no associated domains or Secure Enclave on the simulator), session tasks in the native views, and AuthView's `onHostBack` and `logoMaxHeight`, which the test app passes to no AuthView (`packages/expo-native-components/src/AuthView.tsx`).

Organizations have no page, because a user of the test app has no way to reach organization UI. This holds for the native components only. `@clerk/expo/web` exports the clerk-js OrganizationProfile, OrganizationSwitcher, OrganizationList, and CreateOrganization for Expo web, but the test app runs native only. `@clerk/expo-native-components` exports AuthView, UserButton, and UserProfileView and no OrganizationSwitcher or OrganizationProfileView. The profile that the UserButton opens lists `Manage account`, `Security`, `Add account`, and `Sign out`, with `Switch account` once a second session exists, and no organization row, in the pinned clerk-ios and clerk-android releases, though the standard settings turn organizations on. The one organization screen that a native view shows is a session task in AuthView, choose or create an organization, which needs `force_organization_selection` on. The harness seeds users, sign-in tickets, and, through `host.seedOrganization`, organizations whose members hold one of the harness roles. It cannot seed invitations, so no spec can reach a choose-organization task that lists an invitation. Today such a state can be shown only with a local patch that is not committed, and the description of the pull request that shows it says so.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Preconditions:
- The UserButton is `clerk.userButton.profile` on iOS and the accessibility label `Open user profile` on Android (`nativeUserButton` in `specs/native.ts`).
- Profile rows have no stable identifier on Android, and on iOS the profile that the UserButton opens is inside a sheet, so the specs find the rows by text (`Manage account`, `Sign out`).
- A seeded user has no name, so the profile header shows only the avatar. The email appears under `Manage account`.
- Open the profile from the UserButton, as a user does. Use the `embeddedProfile` screen for `onHostBack`, which only an inline UserProfileView has, and for custom pages, which the test app passes only to its inline UserProfileView. The UserButton also takes custom pages through `userProfileProps.customPages`, and no spec covers that. No spec covers a row with `href`, which opens a URL instead of React Native content, a row's `placement` among Clerk's rows, or a page in `customDestinations` that a custom page pushes with `useUserProfileCustomPageNavigation().push` (`packages/expo-native-components/src/UserProfileCustomPages.tsx`).
- Open the profile from the UserButton, as a user does. Use the `embeddedProfile` screen for `onHostBack` and for custom pages, which the test app passes only to its inline UserProfileView. The UserButton also takes custom pages through `userProfileProps.customPages`, and no spec covers that. No spec covers a row with `href`, which opens a URL instead of React Native content, a row's `placement` among Clerk's rows, or a page in `customDestinations` that a custom page pushes with `useUserProfileCustomPageNavigation().push` (`packages/expo-native-components/src/UserProfileCustomPages.tsx`).
- Tap the profile's Back button with `tapProfileBack` from `specs/native.ts`, which taps the middle of its frame. On Android the label `Back` is on a group that holds the button, and `locator.tap()` on it fails with "no parent-owned touch point".
- Do not call `host.screenshot` while a custom page is on screen. On iOS the Back button of the page then does nothing. The video shows the page.
- The test app shows a spinner while the ticket sign-in runs, and `host.launch` waits for the home.
Loading