diff --git a/apps/ExpoApp56/entry.tsx b/apps/ExpoApp56/entry.tsx index 9193da10..0b3513b6 100644 --- a/apps/ExpoApp56/entry.tsx +++ b/apps/ExpoApp56/entry.tsx @@ -1,7 +1,17 @@ import { ExpoRoot } from 'expo-router'; +import { useEffect } from 'react'; import { AppRegistry } from 'react-native'; +import { + syncBrownfieldE2EModeFromRootProps, + type BrownfieldRootProps, +} from '@callstack/brownfield-example-shared-tests/runtime'; + +function App(props: BrownfieldRootProps) { + useEffect(() => { + syncBrownfieldE2EModeFromRootProps(props.brownfieldE2E); + return () => syncBrownfieldE2EModeFromRootProps(undefined); + }, [props.brownfieldE2E]); -function App() { const ctx = require.context('./src/app'); return ; } diff --git a/apps/ExpoApp56/src/utils/expo-rn-updates.ts b/apps/ExpoApp56/src/utils/expo-rn-updates.ts index 58eaed01..521b4719 100644 --- a/apps/ExpoApp56/src/utils/expo-rn-updates.ts +++ b/apps/ExpoApp56/src/utils/expo-rn-updates.ts @@ -1,5 +1,5 @@ +import { userAlert } from '@callstack/brownfield-example-shared-tests/runtime'; import * as Updates from 'expo-updates'; -import { Alert } from 'react-native'; export async function checkAndFetchUpdate() { try { @@ -17,9 +17,9 @@ export async function checkAndFetchUpdate() { }, }); } else { - Alert.alert('No update available'); + userAlert('No update available'); } } catch (error) { - Alert.alert('Update check failed', String(error)); + userAlert('Update check failed', String(error)); } } diff --git a/apps/brownfield-example-shared-tests/e2e/appleAppExpoBrownfield.e2e.js b/apps/brownfield-example-shared-tests/e2e/appleAppExpoBrownfield.e2e.js index fbed8661..61a2fb7c 100644 --- a/apps/brownfield-example-shared-tests/e2e/appleAppExpoBrownfield.e2e.js +++ b/apps/brownfield-example-shared-tests/e2e/appleAppExpoBrownfield.e2e.js @@ -1,4 +1,4 @@ -const { element, by, expect: detoxExpect } = require('detox'); +const { device, element, by, expect: detoxExpect } = require('detox'); const { brownfieldE2ETestIds: ids, } = require('@callstack/brownfield-example-shared-tests/e2e/e2eTestIds'); @@ -15,7 +15,7 @@ const { } = require('@callstack/brownfield-example-shared-tests/e2e/appleAppDetoxUtils'); describe('Brownfield (AppleApp — Expo)', () => { - beforeAll(async () => { + beforeEach(async () => { await launchBrownfieldAppForDetox({ newInstance: true }); await waitForAppleAppReadyExpo(); }); @@ -35,7 +35,12 @@ describe('Brownfield (AppleApp — Expo)', () => { it('records the RN postMessage bubble in the Expo surface', async () => { await openPostMessageTabExpo(); - await element(by.id(ids.sendMessageToNative)).tap(); + await device.disableSynchronization(); + try { + await element(by.id(ids.sendMessageToNative)).tap(); + } finally { + await device.enableSynchronization(); + } const bubble = element(by.id(ids.rnPostMessageText)).atIndex(0); const deadline = Date.now() + 15000; while (Date.now() < deadline) {