clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

main
diagramzip / renderers / browser-run / test / worker.test.ts
worker.test.ts 2.1K
1import { describe, expect, it, vi } from 'vitest'2vi.mock('cloudflare:workers', () => ({ DurableObject: class {} }))3import worker, { responseFromRenderResult } from '../src/index'45function environment(response = { ok: true, svg: '<svg/>', version: 'v', build: 'b', pipeline: ['mermaid'] }) {6 const forwarded: Request[] = []7 const stub = { fetch: vi.fn(async (request: Request) => { forwarded.push(request); return Response.json(response) }) }8 return {9 env: {10 INTERNAL_TOKEN: 'secret',11 BROWSER: {},12 BROWSER_SESSIONS: { getByName: vi.fn(() => stub) },13 } as any,14 stub,15 forwarded,16 }17}1819describe('private Worker boundary', () => {20 it('rejects public paths and non-POST methods', async () => {21 const setup = environment()22 expect((await worker.fetch(new Request('https://bridge.example/'), setup.env)).status).toBe(404)23 expect((await worker.fetch(new Request('https://bridge.example/render'), setup.env)).status).toBe(405)24 expect(setup.stub.fetch).not.toHaveBeenCalled()25 })2627 it('requires auth, validates JSON, and forwards the exact render contract to the DO', async () => {28 const setup = environment()29 const body = JSON.stringify({ engine: 'mermaid', requestId: 'request-1', source: 'graph TD' })30 expect((await worker.fetch(new Request('https://bridge.example/render', { method: 'POST', body }), setup.env)).status).toBe(401)31 const request = new Request('https://bridge.example/render', { method: 'POST', body, headers: { Authorization: 'Bearer secret' } })32 expect((await worker.fetch(request, setup.env)).status).toBe(200)33 expect(setup.env.BROWSER_SESSIONS.getByName).toHaveBeenCalledWith('renderer:mermaid')34 expect(setup.forwarded).toHaveLength(1)35 expect(await setup.forwarded[0]!.json()).toEqual({ engine: 'mermaid', requestId: 'request-1', source: 'graph TD' })36 })3738 it('maps a frame failure to a non-success structured error', async () => {39 const result = responseFromRenderResult({ ok: false, error: 'diagram is invalid' })40 expect(result.status).toBe(422)41 expect(await result.json()).toEqual({ error: { code: 'frame_failed', message: 'diagram is invalid' } })42 })43})