From 55973ecf7eb11d129c983031fb820fa068606610 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Wed, 19 Jun 2024 14:50:22 +0300 Subject: [PATCH 1/2] fix: comment linking e2e test --- .../BaseInvertedFlatList/index.e2e.tsx | 8 +-- src/libs/E2E/tests/linkingTest.e2e.ts | 53 +++++++++++-------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/components/InvertedFlatList/BaseInvertedFlatList/index.e2e.tsx b/src/components/InvertedFlatList/BaseInvertedFlatList/index.e2e.tsx index 5df39ec02c89..4481b22f17b5 100644 --- a/src/components/InvertedFlatList/BaseInvertedFlatList/index.e2e.tsx +++ b/src/components/InvertedFlatList/BaseInvertedFlatList/index.e2e.tsx @@ -1,6 +1,6 @@ import React, {forwardRef, useMemo} from 'react'; import type {FlatListProps, ScrollViewProps, ViewToken} from 'react-native'; -import {FlatList} from 'react-native'; +import {DeviceEventEmitter, FlatList} from 'react-native'; import type {ReportAction} from '@src/types/onyx'; type BaseInvertedFlatListProps = FlatListProps & { @@ -9,16 +9,13 @@ type BaseInvertedFlatListProps = FlatListProps & { const AUTOSCROLL_TO_TOP_THRESHOLD = 128; -let localViewableItems: ViewToken[]; -const getViewableItems = () => localViewableItems; - function BaseInvertedFlatListE2e(props: BaseInvertedFlatListProps, ref: React.ForwardedRef>) { const {shouldEnableAutoScrollToTopThreshold, ...rest} = props; const handleViewableItemsChanged = useMemo( () => ({viewableItems}: {viewableItems: ViewToken[]}) => { - localViewableItems = viewableItems; + DeviceEventEmitter.emit('onViewableItemsChanged', viewableItems); }, [], ); @@ -51,4 +48,3 @@ function BaseInvertedFlatListE2e(props: BaseInvertedFlatListProps, ref: React.Fo BaseInvertedFlatListE2e.displayName = 'BaseInvertedFlatListE2e'; export default forwardRef(BaseInvertedFlatListE2e); -export {getViewableItems}; diff --git a/src/libs/E2E/tests/linkingTest.e2e.ts b/src/libs/E2E/tests/linkingTest.e2e.ts index c48ffb5a8057..59c5ac38c9e5 100644 --- a/src/libs/E2E/tests/linkingTest.e2e.ts +++ b/src/libs/E2E/tests/linkingTest.e2e.ts @@ -1,11 +1,12 @@ +import {DeviceEventEmitter} from 'react-native'; import type {NativeConfig} from 'react-native-config'; import Config from 'react-native-config'; -import {getViewableItems} from '@components/InvertedFlatList/BaseInvertedFlatList/index.e2e'; import Timing from '@libs/actions/Timing'; import E2ELogin from '@libs/E2E/actions/e2eLogin'; import waitForAppLoaded from '@libs/E2E/actions/waitForAppLoaded'; import E2EClient from '@libs/E2E/client'; import getConfigValueOrThrow from '@libs/E2E/utils/getConfigValueOrThrow'; +import getPromiseWithResolve from '@libs/E2E/utils/getPromiseWithResolve'; import Navigation from '@libs/Navigation/Navigation'; import Performance from '@libs/Performance'; import CONST from '@src/CONST'; @@ -23,6 +24,29 @@ const test = (config: NativeConfig) => { return waitForAppLoaded().then(() => E2EClient.submitTestDone()); } + const [appearMessagePromise, appearMessageResolve] = getPromiseWithResolve(); + const [switchReportPromise, switchReportResolve] = getPromiseWithResolve(); + + Promise.all([appearMessagePromise, switchReportPromise]) + .then(() => { + console.debug('[E2E] Test completed successfully, exiting…'); + E2EClient.submitTestDone(); + }) + .catch((err) => { + console.debug('[E2E] Error while submitting test results:', err); + }); + + const subscription = DeviceEventEmitter.addListener('onViewableItemsChanged', (res) => { + console.debug('[E2E] Viewable items retrieved, verifying correct message…', res); + + if (!!res && res[0]?.item?.reportActionID === linkedReportActionID) { + appearMessageResolve(); + subscription.remove(); + } else { + console.debug('[E2E] Message verification failed'); + } + }); + Performance.subscribeToMeasurements((entry) => { if (entry.name === CONST.TIMING.SIDEBAR_LOADED) { console.debug('[E2E] Sidebar loaded, navigating to a report…'); @@ -41,27 +65,14 @@ const test = (config: NativeConfig) => { if (entry.name === CONST.TIMING.SWITCH_REPORT) { console.debug('[E2E] Linking: 1'); - setTimeout(() => { - const res = getViewableItems(); - console.debug('[E2E] Viewable items retrieved, verifying correct message…'); - if (!!res && res[0]?.item?.reportActionID === linkedReportActionID) { - E2EClient.submitTestResults({ - branch: Config.E2E_BRANCH, - name: 'Comment linking', - duration: entry.duration, - }) - .then(() => { - console.debug('[E2E] Test completed successfully, exiting…'); - E2EClient.submitTestDone(); - }) - .catch((err) => { - console.debug('[E2E] Error while submitting test results:', err); - }); - } else { - console.debug('[E2E] Message verification failed'); - } - }, 3000); + E2EClient.submitTestResults({ + branch: Config.E2E_BRANCH, + name: 'Comment linking', + duration: entry.duration, + }); + + switchReportResolve(); } }); }); From ccece4940651927b47da9838a0428a672c462ac2 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Wed, 19 Jun 2024 18:31:35 +0300 Subject: [PATCH 2/2] fix: changes after review --- src/libs/E2E/tests/linkingTest.e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/E2E/tests/linkingTest.e2e.ts b/src/libs/E2E/tests/linkingTest.e2e.ts index 59c5ac38c9e5..62a4581a5036 100644 --- a/src/libs/E2E/tests/linkingTest.e2e.ts +++ b/src/libs/E2E/tests/linkingTest.e2e.ts @@ -43,7 +43,7 @@ const test = (config: NativeConfig) => { appearMessageResolve(); subscription.remove(); } else { - console.debug('[E2E] Message verification failed'); + console.debug(`[E2E] Provided message id '${res?.[0]?.item?.reportActionID}' doesn't match to an expected '${linkedReportActionID}'. Waiting for a next one…`); } });