fix up e2e tests

This commit is contained in:
Samuel Newman
2026-03-04 13:12:50 +02:00
parent b84f28f884
commit a0ce96fb2d
10 changed files with 51 additions and 24 deletions
-1
View File
@@ -39,7 +39,6 @@ appId: xyz.blueskyweb.app
id: "editListNameInput" id: "editListNameInput"
- eraseText - eraseText
- inputText: "Bad Ppl" - inputText: "Bad Ppl"
- hideKeyboard
- tapOn: - tapOn:
id: "editListDescriptionInput" id: "editListDescriptionInput"
- eraseText - eraseText
+12 -6
View File
@@ -35,9 +35,12 @@ appId: xyz.blueskyweb.app
id: "menuItemButton-Feeds" id: "menuItemButton-Feeds"
- tapOn: - tapOn:
id: "editFeedsBtn" id: "editFeedsBtn"
- tapOn: - swipe:
label: "Tap on down arrow" label: "Drag feed down"
id: "feed-timeline-moveDown" from:
id: "feed-drag-handle"
direction: "DOWN"
duration: 1000
- tapOn: - tapOn:
label: "Save button" label: "Save button"
id: "saveChangesBtn" id: "saveChangesBtn"
@@ -55,9 +58,12 @@ appId: xyz.blueskyweb.app
id: "menuItemButton-Feeds" id: "menuItemButton-Feeds"
- tapOn: - tapOn:
id: "editFeedsBtn" id: "editFeedsBtn"
- tapOn: - swipe:
label: "Tap on down arrow" label: "Drag feed down"
id: "feed-feed-moveDown" from:
id: "feed-drag-handle"
direction: "DOWN"
duration: 1000
- tapOn: - tapOn:
label: "Save button" label: "Save button"
id: "saveChangesBtn" id: "saveChangesBtn"
@@ -26,6 +26,7 @@ appId: xyz.blueskyweb.app
- tapOn: - tapOn:
id: "report:details" id: "report:details"
- inputText: "This is a test report" - inputText: "This is a test report"
- hideKeyboard
- tapOn: - tapOn:
id: "report:submit" id: "report:submit"
- assertNotVisible: - assertNotVisible:
+8 -8
View File
@@ -3,15 +3,15 @@ appId: xyz.blueskyweb.app
- launchApp: - launchApp:
appId: "xyz.blueskyweb.app" appId: "xyz.blueskyweb.app"
clearState: true clearState: true
arguments:
"-EXDevMenuIsOnboardingFinished": true
- openLink: "exp+bluesky://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"
- runFlow:
when:
visible: 'Open in "Bluesky"'
commands:
- tapOn: Open
- waitForAnimationToEnd - waitForAnimationToEnd
- tapOn: "http://localhost:8081"
- waitForAnimationToEnd
- extendedWaitUntil:
visible: "Continue"
- swipe:
from: "Bluesky"
direction: DOWN
duration: 100
- tapOn: - tapOn:
id: e2eProxyHeaderInput id: e2eProxyHeaderInput
- inputText: ${output.result} - inputText: ${output.result}
+1
View File
@@ -690,6 +690,7 @@ function HomeTabNavigator() {
headerShown: true, headerShown: true,
headerTransparent: true, headerTransparent: true,
headerTitle: '', headerTitle: '',
headerBackVisible: false,
scrollEdgeEffects: { scrollEdgeEffects: {
top: 'soft', top: 'soft',
}, },
+1
View File
@@ -454,6 +454,7 @@ function SortableItem<T>({
const dragHandle = ( const dragHandle = (
<GestureDetector gesture={gesture}> <GestureDetector gesture={gesture}>
<Animated.View <Animated.View
testID="feed-drag-handle"
style={[ style={[
a.justify_center, a.justify_center,
a.align_center, a.align_center,
+17 -1
View File
@@ -30,11 +30,15 @@ export function GrowableBanner({
children, children,
onPress, onPress,
bannerRef, bannerRef,
testID,
label,
}: { }: {
backButton?: React.ReactNode backButton?: React.ReactNode
children: React.ReactNode children: React.ReactNode
onPress?: () => void onPress?: () => void
bannerRef?: AnimatedRef<Animated.View> bannerRef?: AnimatedRef<Animated.View>
testID?: string
label?: string
}) { }) {
const pagerContext = usePagerHeaderContext() const pagerContext = usePagerHeaderContext()
@@ -42,8 +46,11 @@ export function GrowableBanner({
if (!pagerContext || !IS_IOS) { if (!pagerContext || !IS_IOS) {
return ( return (
<Pressable <Pressable
testID={testID}
onPress={onPress} onPress={onPress}
accessibilityRole="image" accessibilityRole="image"
accessibilityLabel={label}
accessibilityHint=""
style={[a.w_full, a.h_full]}> style={[a.w_full, a.h_full]}>
<Animated.View ref={bannerRef} style={[a.w_full, a.h_full]}> <Animated.View ref={bannerRef} style={[a.w_full, a.h_full]}>
{children} {children}
@@ -60,7 +67,9 @@ export function GrowableBanner({
scrollY={scrollY} scrollY={scrollY}
backButton={backButton} backButton={backButton}
onPress={onPress} onPress={onPress}
bannerRef={bannerRef}> bannerRef={bannerRef}
testID={testID}
label={label}>
{children} {children}
</GrowableBannerInner> </GrowableBannerInner>
) )
@@ -72,12 +81,16 @@ function GrowableBannerInner({
children, children,
onPress, onPress,
bannerRef, bannerRef,
testID,
label,
}: { }: {
scrollY: SharedValue<number> scrollY: SharedValue<number>
backButton?: React.ReactNode backButton?: React.ReactNode
children: React.ReactNode children: React.ReactNode
onPress?: () => void onPress?: () => void
bannerRef?: AnimatedRef<Animated.View> bannerRef?: AnimatedRef<Animated.View>
testID?: string
label?: string
}) { }) {
const {top: topInset} = useSafeAreaInsets() const {top: topInset} = useSafeAreaInsets()
const isFetching = useIsProfileFetching() const isFetching = useIsProfileFetching()
@@ -142,8 +155,11 @@ function GrowableBannerInner({
animatedStyle, animatedStyle,
]}> ]}>
<Pressable <Pressable
testID={testID}
onPress={onPress} onPress={onPress}
accessibilityRole="image" accessibilityRole="image"
accessibilityLabel={label}
accessibilityHint=""
style={[a.w_full, a.h_full]}> style={[a.w_full, a.h_full]}>
<Animated.View <Animated.View
ref={bannerRef} ref={bannerRef}
+10 -5
View File
@@ -10,8 +10,7 @@ import Animated, {
import {useSafeAreaInsets} from 'react-native-safe-area-context' import {useSafeAreaInsets} from 'react-native-safe-area-context'
import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api' import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api'
import {utils} from '@bsky.app/alf' import {utils} from '@bsky.app/alf'
import {msg} from '@lingui/core/macro' import {useLingui} from '@lingui/react/macro'
import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native' import {useNavigation} from '@react-navigation/native'
import {BACK_HITSLOP} from '#/lib/constants' import {BACK_HITSLOP} from '#/lib/constants'
@@ -56,7 +55,7 @@ let ProfileHeaderShell = ({
const t = useTheme() const t = useTheme()
const ax = useAnalytics() const ax = useAnalytics()
const {currentAccount} = useSession() const {currentAccount} = useSession()
const {_} = useLingui() const {t: l} = useLingui()
const {openLightbox} = useLightboxControls() const {openLightbox} = useLightboxControls()
const navigation = useNavigation<NavigationProp>() const navigation = useNavigation<NavigationProp>()
const {top: topInset} = useSafeAreaInsets() const {top: topInset} = useSafeAreaInsets()
@@ -168,6 +167,12 @@ let ProfileHeaderShell = ({
style={[a.relative, {height: 150}]}> style={[a.relative, {height: 150}]}>
<StatusBarShadow /> <StatusBarShadow />
<GrowableBanner <GrowableBanner
testID={profile.banner ? 'userBannerImage' : 'userBannerFallback'}
label={
profile.banner
? l`View profile banner`
: l`Profile banner placeholder`
}
onPress={isPlaceholderProfile ? undefined : onPressBanner} onPress={isPlaceholderProfile ? undefined : onPressBanner}
bannerRef={bannerRef} bannerRef={bannerRef}
backButton={ backButton={
@@ -176,7 +181,7 @@ let ProfileHeaderShell = ({
testID="profileHeaderBackBtn" testID="profileHeaderBackBtn"
onPress={onPressBack} onPress={onPressBack}
hitSlop={BACK_HITSLOP} hitSlop={BACK_HITSLOP}
label={_(msg`Back`)} label={l`Back`}
style={[ style={[
a.absolute, a.absolute,
a.pointer, a.pointer,
@@ -259,7 +264,7 @@ let ProfileHeaderShell = ({
testID="profileHeaderAviButton" testID="profileHeaderAviButton"
onPress={onPressAvi} onPress={onPressAvi}
accessibilityRole="image" accessibilityRole="image"
accessibilityLabel={_(msg`View ${profile.handle}'s avatar`)} accessibilityLabel={l`View ${profile.handle}'s avatar`}
accessibilityHint=""> accessibilityHint="">
<View <View
style={[ style={[
@@ -154,7 +154,7 @@ export function MoreOptionsMenu({
</Button> </Button>
)} )}
</Menu.Trigger> </Menu.Trigger>
<Menu.Outer> <Menu.Outer showCancel>
<Menu.Group> <Menu.Group>
<Menu.Item <Menu.Item
label={IS_WEB ? _(msg`Copy link to list`) : _(msg`Share via...`)} label={IS_WEB ? _(msg`Copy link to list`) : _(msg`Share via...`)}
-2
View File
@@ -210,7 +210,6 @@ export function UserBanner({
) : banner && ) : banner &&
!((moderation?.blur && IS_ANDROID) /* android crashes with blur */) ? ( !((moderation?.blur && IS_ANDROID) /* android crashes with blur */) ? (
<Image <Image
testID="userBannerImage"
style={[styles.bannerImage, t.atoms.bg_contrast_25]} style={[styles.bannerImage, t.atoms.bg_contrast_25]}
contentFit="cover" contentFit="cover"
source={{uri: banner}} source={{uri: banner}}
@@ -220,7 +219,6 @@ export function UserBanner({
/> />
) : ( ) : (
<View <View
testID="userBannerFallback"
style={[ style={[
styles.bannerImage, styles.bannerImage,
type === 'labeler' ? styles.labelerBanner : t.atoms.bg_contrast_25, type === 'labeler' ? styles.labelerBanner : t.atoms.bg_contrast_25,