mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-12 22:13:05 +00:00
O bridge do Payload live preview montava em toda página pública e disparava router.refresh() no mount; quando o RSC chegava depois do clique no CTA do hero, o HistoryUpdater do App Router regravava a URL canônica sem hash. Agora o bridge só monta em iframe/popup (window.parent/opener), com unit de regressão, e2e determinístico (segura o _rsc e libera depois do clique) e entrada no manifesto de afetados.
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { cleanup, render } from '@testing-library/react'
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
const router = vi.hoisted(() => ({ refresh: vi.fn() }))
|
|
|
|
vi.mock('next/navigation.js', () => ({ useRouter: () => router }))
|
|
|
|
const livePreview = vi.hoisted(() => ({ mounts: 0 }))
|
|
|
|
vi.mock('@payloadcms/live-preview-react', () => ({
|
|
RefreshRouteOnSave: ({ refresh }: { refresh: () => void }) => {
|
|
livePreview.mounts += 1
|
|
refresh()
|
|
return null
|
|
},
|
|
}))
|
|
|
|
import { RefreshRouteOnSave } from '@/components/RefreshRouteOnSave'
|
|
|
|
const setParentWindow = (value: Window) => {
|
|
Object.defineProperty(window, 'parent', { configurable: true, value })
|
|
}
|
|
|
|
afterEach(() => {
|
|
cleanup()
|
|
setParentWindow(window)
|
|
})
|
|
|
|
beforeEach(() => {
|
|
router.refresh.mockReset()
|
|
livePreview.mounts = 0
|
|
})
|
|
|
|
describe('RefreshRouteOnSave', () => {
|
|
it('does not mount the preview bridge (nor refresh) on a standalone public load', () => {
|
|
render(<RefreshRouteOnSave />)
|
|
|
|
expect(livePreview.mounts).toBe(0)
|
|
expect(router.refresh).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('mounts the bridge and refreshes inside the admin preview iframe', () => {
|
|
setParentWindow({} as Window)
|
|
|
|
render(<RefreshRouteOnSave />)
|
|
|
|
expect(livePreview.mounts).toBe(1)
|
|
expect(router.refresh).toHaveBeenCalledTimes(1)
|
|
})
|
|
})
|