Files
supabase/packages/ui-patterns/CommandMenu/api/hooks/pagesHooks.test.tsx
T
Ivan Vasilov 326c7535f6 chore: Bump vulnerable deps. (#34395)
* Bump all testing libs to force babel to upgrade itself.

* Remove react-hooks package, it's included in @testing-library/react.

* Add await to all useEvent calls.

* Remove duplicate babel/helpers.

* Deduplicate babel/core.

* Bump vite to non-vuln version.

* Bump estree-util-value-to-estree.
2025-04-16 10:02:06 +02:00

137 lines
3.3 KiB
TypeScript

import { act, render, screen, waitFor } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { useEffect, useState } from 'react'
import { describe, expect, it } from 'vitest'
import { CommandProvider } from '../CommandProvider'
import { PageType } from '../utils'
import { useCurrentPage, useRegisterPage, useSetPage } from './pagesHooks'
const PageAdderOne = ({ enabled = true }) => {
useRegisterPage('Page one', { type: PageType.Commands, sections: [] }, { enabled })
const setPage = useSetPage()
useEffect(() => {
if (enabled) {
setPage('Page one')
}
}, [enabled])
return <div>Page Adder One</div>
}
const TogglePageAdder = () => {
const [mounted, setIsMounted] = useState(true)
return (
<>
<button onClick={() => setIsMounted((mounted) => !mounted)}>
{mounted ? 'Dismount' : 'Mount'}
</button>
{mounted && <PageAdderOne />}
</>
)
}
const TogglePageEnabled = () => {
const [enabled, setIsEnabled] = useState(true)
return (
<>
<button onClick={() => setIsEnabled((enabled) => !enabled)}>
{enabled ? 'Disable' : 'Enable'}
</button>
<PageAdderOne enabled={enabled} />
</>
)
}
const PageDisplay = () => {
const currentPage = useCurrentPage()
return <div data-testid="current-page">{currentPage?.name ?? '[None]'}</div>
}
describe('useRegisterPage', () => {
it('registers a page on mount', async () => {
act(() => {
render(
<CommandProvider>
<PageAdderOne />
<PageDisplay />
</CommandProvider>
)
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('Page one')
})
})
it("doesn't register a page on mount if disabled", async () => {
act(() => {
render(
<CommandProvider>
<PageAdderOne enabled={false} />
<PageDisplay />
</CommandProvider>
)
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('[None]')
})
})
it('unregisters a page on dismount', async () => {
act(() => {
render(
<CommandProvider>
<TogglePageAdder />
<PageDisplay />
</CommandProvider>
)
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('Page one')
})
await act(async () => {
await userEvent.click(screen.getByRole('button'))
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('[None]')
})
})
it('unregisters and reregisters a page if disabled toggled', async () => {
act(() => {
render(
<CommandProvider>
<TogglePageEnabled />
<PageDisplay />
</CommandProvider>
)
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('Page one')
})
await act(async () => {
await userEvent.click(screen.getByRole('button'))
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('[None]')
})
await act(async () => {
await userEvent.click(screen.getByRole('button'))
})
await waitFor(() => {
expect(screen.getByTestId('current-page')).toHaveTextContent('Page one')
})
})
})