catalog-react: fix UserListPicker tests

Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
Vincenzo Scamporlino
2023-06-21 10:42:04 +02:00
parent 7709c264ca
commit bd4c4cec5d
@@ -19,7 +19,12 @@ import { fireEvent, render, waitFor, screen } from '@testing-library/react';
import { UserEntity } from '@backstage/catalog-model';
import { UserListPicker, UserListPickerProps } from './UserListPicker';
import { MockEntityListContextProvider } from '../../testUtils/providers';
import { EntityTagFilter, EntityUserListFilter } from '../../filters';
import {
EntityKindFilter,
EntityNamespaceFilter,
EntityTagFilter,
EntityUserListFilter,
} from '../../filters';
import {
CatalogApi,
QueryEntitiesInitialRequest,
@@ -159,12 +164,19 @@ describe('<UserListPicker />', () => {
it('renders filters', async () => {
render(
<ApiProvider apis={apis}>
<MockEntityListContextProvider value={{}}>
<MockEntityListContextProvider
value={{
filters: { namespace: new EntityNamespaceFilter(['default']) },
}}
>
<UserListPicker />
</MockEntityListContextProvider>
</ApiProvider>,
);
await waitFor(() =>
expect(mockIdentityApi.getBackstageIdentity).toHaveBeenCalled(),
);
await waitFor(() =>
expect(
screen.getAllByRole('menuitem').map(({ textContent }) => textContent),
@@ -172,17 +184,25 @@ describe('<UserListPicker />', () => {
);
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: {},
filter: {
'metadata.namespace': ['default'],
},
limit: 0,
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: { 'metadata.name': ['e-1', 'e-2'] },
filter: {
'metadata.namespace': ['default'],
'relations.ownedBy': ['user:default/testuser'],
},
limit: 0,
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: {
'metadata.namespace': ['default'],
'metadata.name': ['e-1', 'e-2'],
},
limit: 1000,
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: { 'relations.ownedBy': ['user:default/testuser'] },
limit: 0,
});
});
it('respects other frontend filters in counts', async () => {
@@ -223,16 +243,23 @@ describe('<UserListPicker />', () => {
it('respects the query parameter filter value', async () => {
const updateFilters = jest.fn();
const queryParameters = { user: 'owned' };
const queryParameters = { user: 'owned', kind: 'component' };
render(
<ApiProvider apis={apis}>
<MockEntityListContextProvider
value={{ updateFilters, queryParameters }}
value={{
updateFilters,
queryParameters,
filters: { kind: new EntityKindFilter('component') },
}}
>
<UserListPicker />
</MockEntityListContextProvider>
</ApiProvider>,
);
await waitFor(() =>
expect(mockIdentityApi.getBackstageIdentity).toHaveBeenCalled(),
);
await waitFor(() =>
expect(updateFilters).toHaveBeenLastCalledWith({
@@ -241,15 +268,16 @@ describe('<UserListPicker />', () => {
);
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: {},
filter: { kind: 'component' },
limit: 0,
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: { 'metadata.name': ['e-1', 'e-2'] },
filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] },
limit: 1000,
});
expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({
filter: {
kind: 'component',
'relations.ownedBy': ['user:default/testuser'],
},
limit: 0,
@@ -285,7 +313,11 @@ describe('<UserListPicker />', () => {
<MockEntityListContextProvider
value={{
updateFilters,
queryParameters: { user: ['all'] },
queryParameters: { user: ['all'], kind: 'component' },
filters: {
kind: new EntityKindFilter('component'),
user: undefined,
},
}}
>
<UserListPicker />
@@ -293,6 +325,10 @@ describe('<UserListPicker />', () => {
</ApiProvider>,
);
await waitFor(() =>
expect(mockIdentityApi.getBackstageIdentity).toHaveBeenCalled(),
);
await waitFor(() =>
expect(updateFilters).toHaveBeenLastCalledWith({
user: EntityUserListFilter.all(),
@@ -304,7 +340,11 @@ describe('<UserListPicker />', () => {
<MockEntityListContextProvider
value={{
updateFilters,
queryParameters: { user: ['owned'] },
queryParameters: { user: ['owned'], kind: 'component' },
filters: {
kind: new EntityKindFilter('component'),
user: undefined,
},
}}
>
<UserListPicker />
@@ -319,9 +359,14 @@ describe('<UserListPicker />', () => {
describe('filter resetting', () => {
let updateFilters: jest.Mock;
const Picker = (props: UserListPickerProps) => (
const Picker = ({ ...props }: UserListPickerProps) => (
<ApiProvider apis={apis}>
<MockEntityListContextProvider value={{ updateFilters }}>
<MockEntityListContextProvider
value={{
updateFilters,
filters: { kind: new EntityKindFilter('component') },
}}
>
<UserListPicker {...props} />
</MockEntityListContextProvider>
</ApiProvider>
@@ -331,7 +376,7 @@ describe('<UserListPicker />', () => {
updateFilters = jest.fn();
});
describe(`when there are no owned entities match the filter`, () => {
describe(`when there are no owned entities matching the filter`, () => {
it('does not reset the filter while entities are loading', async () => {
mockCatalogApi.queryEntities?.mockImplementation(
() => new Promise(() => {}),
@@ -342,7 +387,10 @@ describe('<UserListPicker />', () => {
await waitFor(() =>
expect(mockCatalogApi.queryEntities).toHaveBeenCalled(),
);
expect(updateFilters).not.toHaveBeenCalled();
await expect(
waitFor(() => expect(updateFilters).toHaveBeenCalled()),
).rejects.toThrow();
});
it('does not reset the filter while owned entities are loading', async () => {