diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts b/plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts index 1d46eb14ea..0daeb93d73 100644 --- a/plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts +++ b/plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts @@ -71,10 +71,10 @@ describe('useKubernetesObjects', () => { const mockGetObjectsByEntity = jest.fn(); const mockDecorateRequestBodyForAuth = jest.fn(); - const expectMocksCalledCorrectly = () => { - expect(mockGetClusters).toBeCalledTimes(1); + const expectMocksCalledCorrectly = (numOfCalls: number = 1) => { + expect(mockGetClusters).toBeCalledTimes(numOfCalls); expect(mockGetClusters).toHaveBeenLastCalledWith(); - expect(mockDecorateRequestBodyForAuth).toBeCalledTimes(2); + expect(mockDecorateRequestBodyForAuth).toBeCalledTimes(numOfCalls * 2); expect(mockDecorateRequestBodyForAuth).toHaveBeenCalledWith('google', { entity, }); @@ -82,7 +82,7 @@ describe('useKubernetesObjects', () => { 'authprovider2', entityWithAuthToken, ); - expect(mockGetObjectsByEntity).toBeCalledTimes(1); + expect(mockGetObjectsByEntity).toBeCalledTimes(numOfCalls); expect(mockGetObjectsByEntity).toHaveBeenLastCalledWith( entityWithAuthToken, ); @@ -110,6 +110,26 @@ describe('useKubernetesObjects', () => { expectMocksCalledCorrectly(); }); + it('should update on an interval', async () => { + (useApi as any).mockReturnValue({ + getClusters: mockGetClusters.mockResolvedValue(getClustersResponse), + getObjectsByEntity: + mockGetObjectsByEntity.mockResolvedValue(mockResponse), + decorateRequestBodyForAuth: + mockDecorateRequestBodyForAuth.mockResolvedValue(entityWithAuthToken), + }); + const { result, waitForNextUpdate } = renderHook(() => + useKubernetesObjects(entity, 100), + ); + + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current.error).toBeUndefined(); + expect(result.current.kubernetesObjects).toStrictEqual(mockResponse); + + expectMocksCalledCorrectly(2); + }); it('should return error when getObjectsByEntity throws', async () => { (useApi as any).mockReturnValue({ getClusters: mockGetClusters.mockResolvedValue(getClustersResponse), diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts index 51df92e8d2..8a8ec260fa 100644 --- a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts +++ b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts @@ -30,7 +30,10 @@ export interface KubernetesObjects { error: string | undefined; } -export const useKubernetesObjects = (entity: Entity): KubernetesObjects => { +export const useKubernetesObjects = ( + entity: Entity, + intervalMs: number = 10000, +): KubernetesObjects => { const kubernetesApi = useApi(kubernetesApiRef); const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef); const [kubernetesObjects, setKubernetesObjects] = useState< @@ -86,8 +89,7 @@ export const useKubernetesObjects = (entity: Entity): KubernetesObjects => { useInterval(() => { getObjects(); - // TODO make configurable - }, 10000); + }, intervalMs); return { kubernetesObjects,