Loader (cms-client.js), submodule-aware editor source path, build:watch

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
matsandClaude Sonnet 5.5 committed 2026-11-01 11:02:20 +01:00
1 parent 2e0bf1e88e
commit cb7a7a1fab
8 files changed
+158 -7

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
import { describe, expect, it, vi } from 'vitest'
import { bundleUrl, hasPreviewCookie, runLoader, type LoaderEnv } from '../src/loader-core'
function env(href: string, cookie = '', scriptSrc?: string) {
const jar = { value: cookie }
const e = {
location: { href, protocol: new URL(href).protocol, replace: vi.fn() },
cookie: { get: () => jar.value, set: (v: string) => void (jar.value = v) },
scriptSrc,
load: vi.fn(() => Promise.resolve({})),
} satisfies LoaderEnv
return { e, jar }
}
describe('cms-client loader', () => {
it('does nothing for visitors', () => {
const { e } = env('https://k6n.net/')
expect(runLoader(e)).toBe('idle')
expect(e.load).not.toHaveBeenCalled()
})
it('loads the editor bundle next to the script when the preview cookie is set', () => {
const { e } = env('https://k6n.net/', 'a=b; cms_preview=1', 'https://k6n.net/editor/cms-client.js')
expect(runLoader(e)).toBe('loaded')
expect(e.load).toHaveBeenCalledWith('https://k6n.net/editor/onpage-editor.js')
})
it('?cms_preview=1 sets the cookie, strips the param and reloads', () => {
const { e, jar } = env('https://k6n.net/a?x=1&cms_preview=1')
expect(runLoader(e)).toBe('redirected')
expect(jar.value).toMatch(/^cms_preview=1; path=\/; SameSite=Lax; Secure$/)
expect(e.location.replace).toHaveBeenCalledWith('https://k6n.net/a?x=1')
expect(e.load).not.toHaveBeenCalled()
})
it('?cms_preview=0 clears the cookie (no Secure on http)', () => {
const { e, jar } = env('http://localhost/a?cms_preview=0', 'cms_preview=1')
runLoader(e)
expect(jar.value).toBe('cms_preview=; path=/; max-age=0; SameSite=Lax')
expect(e.location.replace).toHaveBeenCalledWith('http://localhost/a')
})
it('helpers', () => {
expect(hasPreviewCookie('cms_preview=1')).toBe(true)
expect(hasPreviewCookie('xcms_preview=1')).toBe(false)
expect(hasPreviewCookie('cms_preview=0')).toBe(false)
expect(bundleUrl()).toBe('/editor/onpage-editor.js')
})
})