diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-03-31 13:17:26 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-31 13:17:26 -0500 |
commit | a3334a01a221877d3e06e02f960fda441f3460bd (patch) | |
tree | 64cdbb1232d1a3c00750c346b6e3ae529b51d1b0 /__e2e__/util.ts | |
parent | 19f3a2fa92a61ddb785fc4e42d73792c1d0e772c (diff) | |
download | voidsky-a3334a01a221877d3e06e02f960fda441f3460bd.tar.zst |
Lex refactor (#362)
* Remove the hackcheck for upgrades * Rename the PostEmbeds folder to match the codebase style * Updates to latest lex refactor * Update to use new bsky agent * Update to use api package's richtext library * Switch to upsertProfile * Add TextEncoder/TextDecoder polyfill * Add Intl.Segmenter polyfill * Update composer to calculate lengths by grapheme * Fix detox * Fix login in e2e * Create account e2e passing * Implement an e2e mocking framework * Don't use private methods on mobx models as mobx can't track them * Add tooling for e2e-specific builds and add e2e media-picker mock * Add some tests and fix some bugs around profile editing * Add shell tests * Add home screen tests * Add thread screen tests * Add tests for other user profile screens * Add search screen tests * Implement profile imagery change tools and tests * Update to new embed behaviors * Add post tests * Fix to profile-screen test * Fix session resumption * Update web composer to new api * 1.11.0 * Fix pagination cursor parameters * Add quote posts to notifications * Fix embed layouts * Remove youtube inline player and improve tap handling on link cards * Reset minimal shell mode on all screen loads and feed swipes (close #299) * Update podfile.lock * Improve post notfound UI (close #366) * Bump atproto packages
Diffstat (limited to '__e2e__/util.ts')
-rw-r--r-- | __e2e__/util.ts | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/__e2e__/util.ts b/__e2e__/util.ts new file mode 100644 index 000000000..78d9f9f5d --- /dev/null +++ b/__e2e__/util.ts @@ -0,0 +1,96 @@ +import {resolveConfig} from 'detox/internals' + +const platform = device.getPlatform() + +export async function openApp(opts: any) { + opts = opts || {} + const config = await resolveConfig() + if (config.configurationName.split('.').includes('debug')) { + return await openAppForDebugBuild(platform, opts) + } else { + return await device.launchApp({ + ...opts, + newInstance: true, + }) + } +} + +export async function isVisible(id: string) { + try { + await expect(element(by.id(id))).toBeVisible() + return true + } catch (e) { + return false + } +} + +export async function login( + service: string, + username: string, + password: string, + {takeScreenshots} = {takeScreenshots: false}, +) { + await element(by.id('signInButton')).tap() + if (takeScreenshots) { + await device.takeScreenshot('1- opened sign-in screen') + } + if (await isVisible('chooseAccountForm')) { + await element(by.id('chooseNewAccountBtn')).tap() + } + await element(by.id('loginSelectServiceButton')).tap() + if (takeScreenshots) { + await device.takeScreenshot('2- opened service selector') + } + await element(by.id('customServerTextInput')).typeText(service) + await element(by.id('customServerSelectBtn')).tap() + if (takeScreenshots) { + await device.takeScreenshot('3- input custom service') + } + await element(by.id('loginUsernameInput')).typeText(username) + await element(by.id('loginPasswordInput')).typeText(password) + if (takeScreenshots) { + await device.takeScreenshot('4- entered username and password') + } + await element(by.id('loginNextButton')).tap() +} + +async function openAppForDebugBuild(platform: string, opts: any) { + const deepLinkUrl = // Local testing with packager + /*process.env.EXPO_USE_UPDATES + ? // Testing latest published EAS update for the test_debug channel + getDeepLinkUrl(getLatestUpdateUrl()) + : */ getDeepLinkUrl(getDevLauncherPackagerUrl(platform)) + + if (platform === 'ios') { + await device.launchApp({ + ...opts, + newInstance: true, + }) + sleep(3000) + await device.openURL({ + url: deepLinkUrl, + }) + } else { + await device.launchApp({ + ...opts, + newInstance: true, + url: deepLinkUrl, + }) + } + + await sleep(3000) +} + +export async function createServer(path = '') { + const res = await fetch(`http://localhost:1986/${path}`, {method: 'POST'}) + const resBody = await res.text() + return resBody +} + +const getDeepLinkUrl = (url: string) => + `expo+bluesky://expo-development-client/?url=${encodeURIComponent(url)}` + +const getDevLauncherPackagerUrl = (platform: string) => + `http://localhost:8081/index.bundle?platform=${platform}&dev=true&minify=false&disableOnboarding=1` + +export const sleep = (t: number) => new Promise(res => setTimeout(res, t)) |