test(catalog-react): add regression test for entity list fetch dedup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
Fredrik Adelöw
2026-05-20 17:30:49 +02:00
parent 4222c73fd3
commit a103f0e604
@@ -299,6 +299,48 @@ describe('<EntityListProvider />', () => {
});
});
it('does not re-fetch when backend filter params are unchanged', async () => {
const deferred = createDeferred<GetEntitiesResponse>();
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 }),