* 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
96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
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))
|