diff --git a/web/src/providers/TestRun/TestRun.provider.tsx b/web/src/providers/TestRun/TestRun.provider.tsx index c9848b9857..5362b5f318 100644 --- a/web/src/providers/TestRun/TestRun.provider.tsx +++ b/web/src/providers/TestRun/TestRun.provider.tsx @@ -1,7 +1,7 @@ import {noop} from 'lodash'; -import {createContext, useCallback, useContext, useMemo} from 'react'; +import {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'; import {useGetRunByIdQuery, useGetRunEventsQuery, useStopRunMutation} from 'redux/apis/TraceTest.api'; -import TestRun from 'models/TestRun.model'; +import TestRun, {isRunStateFinished} from 'models/TestRun.model'; import TestRunEvent from 'models/TestRunEvent.model'; import TestProvider from '../Test'; @@ -29,8 +29,11 @@ interface IProps { export const useTestRun = () => useContext(Context); +const POLLING_INTERVAL = 5000; + const TestRunProvider = ({children, testId, runId = ''}: IProps) => { - const {data: run, isError} = useGetRunByIdQuery({testId, runId}, {skip: !runId}); + const [pollingInterval, setPollingInterval] = useState(POLLING_INTERVAL); + const {data: run, isError} = useGetRunByIdQuery({testId, runId}, {skip: !runId, pollingInterval}); const {data: runEvents = []} = useGetRunEventsQuery({testId, runId}, {skip: !runId}); const [stopRunAction, {isLoading: isLoadingStop}] = useStopRunMutation(); @@ -43,6 +46,11 @@ const TestRunProvider = ({children, testId, runId = ''}: IProps) => { [run, isError, isLoadingStop, runEvents, stopRun] ); + useEffect(() => { + const shouldStopPolling = run?.state && isRunStateFinished(run.state); + setPollingInterval(shouldStopPolling ? undefined : POLLING_INTERVAL); + }, [run?.state]); + return run ? ( diff --git a/web/src/redux/apis/endpoints/TestRun.endpoints.ts b/web/src/redux/apis/endpoints/TestRun.endpoints.ts index 21dee8eb5a..99535e70ff 100644 --- a/web/src/redux/apis/endpoints/TestRun.endpoints.ts +++ b/web/src/redux/apis/endpoints/TestRun.endpoints.ts @@ -46,17 +46,6 @@ const TestRunEndpoint = (builder: TTestApiEndpointBuilder) => ({ query: ({testId, runId}) => `/tests/${testId}/run/${runId}`, providesTags: result => (result ? [{type: TracetestApiTags.TEST_RUN, id: result?.id}] : []), transformResponse: (rawTestResult: TRawTestRun) => TestRun(rawTestResult), - async onCacheEntryAdded(arg, {cacheDataLoaded, cacheEntryRemoved, updateCachedData}) { - const listener: IListenerFunction = data => { - updateCachedData(() => TestRun(data.event)); - }; - await WebSocketService.initWebSocketSubscription({ - listener, - resource: `test/${arg.testId}/run/${arg.runId}`, - waitToCleanSubscription: cacheEntryRemoved, - waitToInitSubscription: cacheDataLoaded, - }); - }, }), reRun: builder.mutation({ query: ({testId, runId}) => ({