diff --git a/__tests__/components/shared/nav-bar.test.tsx b/__tests__/components/shared/nav-bar.test.tsx index 67fabce..28e9037 100644 --- a/__tests__/components/shared/nav-bar.test.tsx +++ b/__tests__/components/shared/nav-bar.test.tsx @@ -111,6 +111,47 @@ describe('NavBar — product switch', () => { await Promise.resolve() expect(actionMock).toHaveBeenCalledWith('B') }) + + it('non-demo: on /products/A navigates to /products/B', async () => { + pathnameMock.mockReturnValue('/products/A') + renderNavBar({ isDemo: false, activeProductId: 'A' }) + fireEvent.click(screen.getByText('Beta')) + await Promise.resolve() + await Promise.resolve() + expect(pushMock).toHaveBeenCalledWith('/products/B') + expect(toastSuccess).toHaveBeenCalled() + }) + + it('non-demo: on /products/A/sprint/SPR1 navigates to /products/B/sprint', async () => { + pathnameMock.mockReturnValue('/products/A/sprint/SPR1') + renderNavBar({ isDemo: false, activeProductId: 'A' }) + fireEvent.click(screen.getByText('Beta')) + await Promise.resolve() + await Promise.resolve() + expect(pushMock).toHaveBeenCalledWith('/products/B/sprint') + expect(toastSuccess).toHaveBeenCalled() + }) + + it('non-demo: on /products/A/solo navigates to /products/B/solo', async () => { + pathnameMock.mockReturnValue('/products/A/solo') + renderNavBar({ isDemo: false, activeProductId: 'A' }) + fireEvent.click(screen.getByText('Beta')) + await Promise.resolve() + await Promise.resolve() + expect(pushMock).toHaveBeenCalledWith('/products/B/solo') + expect(toastSuccess).toHaveBeenCalled() + }) + + it('non-demo: on /dashboard calls router.refresh and not router.push', async () => { + pathnameMock.mockReturnValue('/dashboard') + renderNavBar({ isDemo: false, activeProductId: 'A' }) + fireEvent.click(screen.getByText('Beta')) + await Promise.resolve() + await Promise.resolve() + expect(refreshMock).toHaveBeenCalled() + expect(pushMock).not.toHaveBeenCalled() + expect(toastSuccess).toHaveBeenCalled() + }) }) describe('NavBar — URL-derived active product (demo only)', () => {