// Regression: useCollectionId must resolve the /c// segment even when the // component renders ABOVE the `c/:collectionId` route (the Catalog's position // at `/p/:projectId/*`), where useParams() does not expose collectionId. A bug // here makes the faceted/bulk catalog silently scope to the default collection. import { describe, it, expect } from 'vitest' import { renderHook } from '@testing-library/react' import { MemoryRouter, Routes, Route } from 'react-router-dom' import { useCollectionId } from './entryPaths.js' function wrapperFor(initialPath, routePath) { return ({ children }) => ( ) } describe('useCollectionId', () => { it('reads the /c// segment from the path at the Catalog level (no param in scope)', () => { // The Catalog matches `/p/:projectId/*` — collectionId is NOT a param here. const { result } = renderHook(() => useCollectionId(), { wrapper: wrapperFor('/p/ohm/c/bdd/e/checkout', '/p/:projectId/*'), }) expect(result.current).toBe('bdd') }) it('honours the route param when in scope', () => { const { result } = renderHook(() => useCollectionId(), { wrapper: wrapperFor('/p/ohm/c/features/e/login', '/p/:projectId/c/:collectionId/*'), }) expect(result.current).toBe('features') }) it('falls back to the default collection when there is no /c/ segment', () => { const { result } = renderHook(() => useCollectionId(), { wrapper: wrapperFor('/p/ohm', '/p/:projectId/*'), }) expect(result.current).toBe('default') }) })