diff --git a/plugins/catalog-react/src/components/EntityNamespacePicker/EntityNamespacePicker.test.tsx b/plugins/catalog-react/src/components/EntityNamespacePicker/EntityNamespacePicker.test.tsx index 12acdc9f46..c92d7f6236 100644 --- a/plugins/catalog-react/src/components/EntityNamespacePicker/EntityNamespacePicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityNamespacePicker/EntityNamespacePicker.test.tsx @@ -14,77 +14,58 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; -import { fireEvent, render, screen } from '@testing-library/react'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { MockEntityListContextProvider } from '../../testUtils/providers'; import { EntityNamespaceFilter } from '../../filters'; import { EntityNamespacePicker } from './EntityNamespacePicker'; +import { TestApiProvider } from '@backstage/test-utils'; +import { catalogApiRef } from '../../api'; +import { CatalogApi } from '@backstage/catalog-client'; -const sampleEntities: Entity[] = [ - { - apiVersion: '1', - kind: 'Component', - metadata: { - name: 'component-1', - namespace: 'namespace-1', - }, - spec: { - lifecycle: 'production', - }, - }, - { - apiVersion: '1', - kind: 'Component', - metadata: { - name: 'component-2', - namespace: 'namespace-2', - }, - spec: { - lifecycle: 'experimental', - }, - }, - { - apiVersion: '1', - kind: 'Component', - metadata: { - name: 'component-3', - namespace: 'namespace-3', - }, - spec: { - lifecycle: 'experimental', - }, - }, -]; +const namespaces = ['namespace-1', 'namespace-2', 'namespace-3']; describe('', () => { - it('renders all namespaces', () => { + const mockCatalogApiRef = { + getEntityFacets: async () => ({ + facets: { + 'metadata.namespace': namespaces.map((value, idx) => ({ + value, + count: idx, + })), + }, + }), + } as unknown as CatalogApi; + + it('renders all namespaces', async () => { render( - - - , + + + + + , + ); + await waitFor(() => + expect(screen.getByText('Namespace')).toBeInTheDocument(), ); - expect(screen.getByText('Namespace')).toBeInTheDocument(); fireEvent.click(screen.getByTestId('namespace-picker-expand')); - sampleEntities - .map(e => e.metadata.namespace!) - .forEach(namespace => { - expect(screen.getByText(namespace as string)).toBeInTheDocument(); - }); + namespaces.forEach(namespace => { + expect(screen.getByText(namespace as string)).toBeInTheDocument(); + }); }); - it('renders unique namespaces in alphabetical order', () => { + it('renders unique namespaces in alphabetical order', async () => { render( - - - , + + + + + , + ); + await waitFor(() => + expect(screen.getByText('Namespace')).toBeInTheDocument(), ); - expect(screen.getByText('Namespace')).toBeInTheDocument(); fireEvent.click(screen.getByTestId('namespace-picker-expand')); @@ -95,43 +76,47 @@ describe('', () => { ]); }); - it('respects the query parameter filter value', () => { + it('respects the query parameter filter value', async () => { const updateFilters = jest.fn(); const queryParameters = { namespace: ['namespace-1'] }; render( - - - , + + + + + , ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: new EntityNamespaceFilter(['namespace-1']), - }); + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + namespace: new EntityNamespaceFilter(['namespace-1']), + }), + ); }); - it('adds namespaces to filters', () => { + it('adds namespaces to filters', async () => { const updateFilters = jest.fn(); render( - - - , + + + + + , + ); + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + namespace: undefined, + }), ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: undefined, - }); fireEvent.click(screen.getByTestId('namespace-picker-expand')); fireEvent.click(screen.getByText('namespace-2')); @@ -140,23 +125,26 @@ describe('', () => { }); }); - it('removes namespaces from filters', () => { + it('removes namespaces from filters', async () => { const updateFilters = jest.fn(); render( - - - , + + + + + , ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: new EntityNamespaceFilter(['namespace-2']), - }); + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + namespace: new EntityNamespaceFilter(['namespace-2']), + }), + ); + fireEvent.click(screen.getByTestId('namespace-picker-expand')); expect(screen.getByLabelText('namespace-2')).toBeChecked(); @@ -166,69 +154,67 @@ describe('', () => { }); }); - it('responds to external queryParameters changes', () => { + it('responds to external queryParameters changes', async () => { const updateFilters = jest.fn(); const rendered = render( - - - , + + + + + , + ); + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + namespace: new EntityNamespaceFilter(['namespace-1']), + }), ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: new EntityNamespaceFilter(['namespace-1']), - }); rendered.rerender( - - - , + + + + + , ); expect(updateFilters).toHaveBeenLastCalledWith({ namespace: new EntityNamespaceFilter(['namespace-2']), }); }); - it('removes namespaces from filters if there are no available namespaces', () => { + it('removes namespaces from filters if there are no available namespaces', async () => { const updateFilters = jest.fn(); + const mockCatalogApiRefNoNamespace = { + getEntityFacets: async () => ({ + facets: { + 'metadata.tags': {}, + }, + }), + } as unknown as CatalogApi; + render( - - - , + + + + + , ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: undefined, - }); - }); - it('responds to initialFilter prop', () => { - const updateFilters = jest.fn(); - render( - - - , + await waitFor(() => + expect(updateFilters).toHaveBeenLastCalledWith({ + namespace: undefined, + }), ); - expect(updateFilters).toHaveBeenLastCalledWith({ - namespace: new EntityNamespaceFilter(['namespace-2']), - }); }); });