|
|
@@ -0,0 +1,45 @@
|
|
|
+import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
+import { render } from 'vitest-browser-react'
|
|
|
+import { userEvent } from 'vitest/browser'
|
|
|
+import { SignOutDialog } from './sign-out-dialog'
|
|
|
+
|
|
|
+const navigate = vi.fn()
|
|
|
+const reset = vi.fn()
|
|
|
+
|
|
|
+const MOCK_HREF = 'https://app.test/dashboard?tab=1'
|
|
|
+
|
|
|
+vi.mock('@/stores/auth-store', () => ({
|
|
|
+ useAuthStore: () => ({
|
|
|
+ auth: { reset },
|
|
|
+ }),
|
|
|
+}))
|
|
|
+
|
|
|
+vi.mock('@tanstack/react-router', async (importOriginal) => {
|
|
|
+ const actual = await importOriginal<typeof import('@tanstack/react-router')>()
|
|
|
+ return {
|
|
|
+ ...actual,
|
|
|
+ useNavigate: () => navigate,
|
|
|
+ useLocation: () => ({ href: MOCK_HREF }),
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+describe('SignOutDialog', () => {
|
|
|
+ beforeEach(() => {
|
|
|
+ vi.clearAllMocks()
|
|
|
+ })
|
|
|
+
|
|
|
+ it('calls auth.reset and navigates to sign-in with current location as redirect', async () => {
|
|
|
+ const { getByRole } = await render(
|
|
|
+ <SignOutDialog open onOpenChange={vi.fn()} />
|
|
|
+ )
|
|
|
+
|
|
|
+ await userEvent.click(getByRole('button', { name: /^Sign out$/i }))
|
|
|
+
|
|
|
+ expect(reset).toHaveBeenCalledOnce()
|
|
|
+ expect(navigate).toHaveBeenCalledWith({
|
|
|
+ to: '/sign-in',
|
|
|
+ search: { redirect: MOCK_HREF },
|
|
|
+ replace: true,
|
|
|
+ })
|
|
|
+ })
|
|
|
+})
|