diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx
index a5fda1bf5b..ef9b77d63f 100644
--- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx
+++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx
@@ -299,6 +299,48 @@ describe('', () => {
});
});
+ it('does not re-fetch when backend filter params are unchanged', async () => {
+ const deferred = createDeferred();
+ mockCatalogApi.getEntities!.mockReturnValueOnce(deferred);
+
+ const { result } = renderHook(() => useEntityList(), {
+ wrapper: createWrapper({ pagination }),
+ });
+
+ act(() => {
+ result.current.updateFilters({
+ kind: new EntityKindFilter('component', 'component'),
+ });
+ });
+
+ await waitFor(() => {
+ expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1);
+ });
+
+ // While first fetch is in flight, fire more updateFilters calls
+ // that produce the same backend filter (kind=component).
+ act(() => {
+ result.current.updateFilters({
+ kind: new EntityKindFilter('component', 'Component'),
+ });
+ });
+ act(() => {
+ result.current.updateFilters({
+ user: EntityUserFilter.all(),
+ });
+ });
+
+ await act(async () => {
+ deferred.resolve({ items: entities });
+ });
+
+ await waitFor(() => {
+ expect(result.current.backendEntities.length).toBe(2);
+ });
+
+ expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1);
+ });
+
it('returns an error on catalogApi failure', async () => {
const { result } = renderHook(() => useEntityList(), {
wrapper: createWrapper({ pagination }),