[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-encore-encore-testing":3,"mdc--278ah8-key":34,"related-org-encore-encore-testing":5008,"related-repo-encore-encore-testing":5183},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":29,"sourceUrl":32,"mdContent":33},"encore-testing","test Encore services with Vitest","Write or run automated tests for Encore.ts code with `encore test` and vitest\u002Fjest. Covers isolated per-test databases, calling handlers directly, and `describe`\u002F`it`\u002F`expect`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"encore","Encore","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fencore.png","encoredev",[13,17,18],{"name":14,"slug":15,"type":16},"TypeScript","typescript","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"Testing","testing",26,"https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills","2026-04-06T18:09:53.574556",null,5,[27,28],"claude-code","skills",{"repoUrl":22,"stars":21,"forks":25,"topics":30,"description":31},[27,28],"Agent Skills for development with Encore.","https:\u002F\u002Fgithub.com\u002Fencoredev\u002Fskills\u002Ftree\u002FHEAD\u002Fencore\u002Ftesting","---\nname: encore-testing\ndescription: Write or run automated tests for Encore.ts code with `encore test` and vitest\u002Fjest. Covers isolated per-test databases, calling handlers directly, and `describe`\u002F`it`\u002F`expect`.\nwhen_to_use: >-\n  User wants to add\u002Fwrite\u002Ffix a test, write a vitest or jest spec, test an endpoint or service, set up `encore test`, configure isolated test databases, write `beforeEach`\u002F`afterEach` for db cleanup, mock external dependencies, or assert on API request\u002Fresponse behaviour. Trigger phrases: \"write a test\", \"write a vitest test\", \"add tests for\", \"vitest\", \"jest\", \"encore test\", \"test the endpoint\", \"test the service\", \"integration test\", \"isolated database\".\n---\n\n# Testing Encore.ts Applications\n\n## Instructions\n\nEncore.ts uses standard TypeScript testing tools. The recommended setup is Vitest.\n\n### Setup Vitest\n\n```bash\nnpm install -D vitest\n```\n\nAdd to `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"test\": \"vitest\"\n  }\n}\n```\n\n### Test an API Endpoint\n\n```typescript\n\u002F\u002F api.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { hello } from \".\u002Fapi\";\n\ndescribe(\"hello endpoint\", () => {\n  it(\"returns a greeting\", async () => {\n    const response = await hello();\n    expect(response.message).toBe(\"Hello, World!\");\n  });\n});\n```\n\n### Run Tests\n\n```bash\n# Run with Encore (recommended - sets up infrastructure)\nencore test\n\n# Or run directly with npm\nnpm test\n```\n\nUsing `encore test` is recommended because it:\n- Sets up test databases automatically\n- Provides isolated infrastructure per test\n- Handles service dependencies\n\n### Test with Request Parameters\n\n```typescript\n\u002F\u002F api.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { getUser } from \".\u002Fapi\";\n\ndescribe(\"getUser endpoint\", () => {\n  it(\"returns the user by ID\", async () => {\n    const user = await getUser({ id: \"123\" });\n    expect(user.id).toBe(\"123\");\n    expect(user.name).toBeDefined();\n  });\n});\n```\n\n### Test Database Operations\n\nEncore provides isolated test databases:\n\n```typescript\n\u002F\u002F user.test.ts\nimport { describe, it, expect, beforeEach } from \"vitest\";\nimport { createUser, getUser, db } from \".\u002Fuser\";\n\ndescribe(\"user operations\", () => {\n  beforeEach(async () => {\n    \u002F\u002F Clean up before each test\n    await db.exec`DELETE FROM users`;\n  });\n\n  it(\"creates and retrieves a user\", async () => {\n    const created = await createUser({ email: \"test@example.com\", name: \"Test\" });\n    const retrieved = await getUser({ id: created.id });\n    \n    expect(retrieved.email).toBe(\"test@example.com\");\n  });\n});\n```\n\n### Test Service-to-Service Calls\n\n```typescript\n\u002F\u002F order.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { createOrder } from \".\u002Forder\";\n\ndescribe(\"order service\", () => {\n  it(\"creates an order and notifies user service\", async () => {\n    \u002F\u002F Service calls work normally in tests\n    const order = await createOrder({\n      userId: \"user-123\",\n      items: [{ productId: \"prod-1\", quantity: 2 }],\n    });\n    \n    expect(order.id).toBeDefined();\n    expect(order.status).toBe(\"pending\");\n  });\n});\n```\n\n### Test Error Cases\n\n```typescript\nimport { describe, it, expect } from \"vitest\";\nimport { getUser } from \".\u002Fapi\";\nimport { APIError } from \"encore.dev\u002Fapi\";\n\ndescribe(\"error handling\", () => {\n  it(\"throws NotFound for missing user\", async () => {\n    await expect(getUser({ id: \"nonexistent\" }))\n      .rejects\n      .toThrow(\"user not found\");\n  });\n\n  it(\"throws with correct error code\", async () => {\n    try {\n      await getUser({ id: \"nonexistent\" });\n    } catch (error) {\n      expect(error).toBeInstanceOf(APIError);\n      expect((error as APIError).code).toBe(\"not_found\");\n    }\n  });\n});\n```\n\n### Test Pub\u002FSub\n\n```typescript\n\u002F\u002F notifications.test.ts\nimport { describe, it, expect, vi } from \"vitest\";\nimport { orderCreated } from \".\u002Fevents\";\n\ndescribe(\"pub\u002Fsub\", () => {\n  it(\"publishes order created event\", async () => {\n    const messageId = await orderCreated.publish({\n      orderId: \"order-123\",\n      userId: \"user-456\",\n      total: 9999,\n    });\n    \n    expect(messageId).toBeDefined();\n  });\n});\n```\n\n### Test Cron Jobs\n\nTest the underlying function, not the cron schedule:\n\n```typescript\n\u002F\u002F cleanup.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { cleanupExpiredSessions } from \".\u002Fcleanup\";\n\ndescribe(\"cleanup job\", () => {\n  it(\"removes expired sessions\", async () => {\n    \u002F\u002F Create some expired sessions first\n    await createExpiredSession();\n    \n    \u002F\u002F Call the endpoint directly\n    await cleanupExpiredSessions();\n    \n    \u002F\u002F Verify cleanup happened\n    const remaining = await countSessions();\n    expect(remaining).toBe(0);\n  });\n});\n```\n\n### Mocking External Services\n\n```typescript\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { sendWelcomeEmail } from \".\u002Femail\";\n\n\u002F\u002F Mock external API\nvi.mock(\".\u002Fexternal-email-client\", () => ({\n  send: vi.fn().mockResolvedValue({ success: true }),\n}));\n\ndescribe(\"email service\", () => {\n  it(\"sends welcome email\", async () => {\n    const result = await sendWelcomeEmail({ userId: \"123\" });\n    expect(result.sent).toBe(true);\n  });\n});\n```\n\n### Test Configuration\n\nCreate `vite.config.ts` (required for `~encore` imports):\n\n```typescript\n\u002F\u002F\u002F \u003Creference types=\"vitest\" \u002F>\nimport { defineConfig } from \"vite\";\nimport path from \"path\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"~encore\": path.resolve(__dirname, \".\u002Fencore.gen\"),\n    },\n  },\n  test: {\n    globals: true,\n    environment: \"node\",\n    include: [\"**\u002F*.test.ts\"],\n    coverage: {\n      reporter: [\"text\", \"json\", \"html\"],\n    },\n  },\n});\n```\n\n### VS Code Integration\n\nInstall the [Vitest extension](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vitest.explorer) and add to `.vscode\u002Fsettings.json`:\n\n```json\n{\n  \"vitest.commandLine\": \"encore test\"\n}\n```\n\n**Note:** For VS Code test explorer, disable file-level parallelism to avoid port conflicts:\n\n```typescript\n\u002F\u002F vite.config.ts\nexport default defineConfig({\n  \u002F\u002F ...\n  test: {\n    fileParallelism: false,  \u002F\u002F Disable for VS Code\n    \u002F\u002F ...\n  },\n});\n```\n\nRe-enable for CI: `encore test --fileParallelism=true`\n\n### Guidelines\n\n- Use `encore test` to run tests with infrastructure setup\n- Each test file gets an isolated database transaction (rolled back after)\n- Test API endpoints by calling them directly as functions\n- Service-to-service calls work normally in tests\n- Mock external dependencies (third-party APIs, email services, etc.)\n- Don't mock Encore infrastructure (databases, Pub\u002FSub) - use the real thing\n",{"data":35,"body":37},{"name":4,"description":6,"when_to_use":36},"User wants to add\u002Fwrite\u002Ffix a test, write a vitest or jest spec, test an endpoint or service, set up `encore test`, configure isolated test databases, write `beforeEach`\u002F`afterEach` for db cleanup, mock external dependencies, or assert on API request\u002Fresponse behaviour. Trigger phrases: \"write a test\", \"write a vitest test\", \"add tests for\", \"vitest\", \"jest\", \"encore test\", \"test the endpoint\", \"test the service\", \"integration test\", \"isolated database\".",{"type":38,"children":39},"root",[40,49,56,62,69,109,122,223,229,593,599,652,665,685,691,1095,1101,1106,1693,1699,2204,2210,2873,2879,3297,3303,3308,3695,3701,4218,4224,4245,4735,4741,4764,4817,4828,4945,4956,4962,5002],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"testing-encorets-applications",[46],{"type":47,"value":48},"text","Testing Encore.ts Applications",{"type":41,"tag":50,"props":51,"children":53},"h2",{"id":52},"instructions",[54],{"type":47,"value":55},"Instructions",{"type":41,"tag":57,"props":58,"children":59},"p",{},[60],{"type":47,"value":61},"Encore.ts uses standard TypeScript testing tools. The recommended setup is Vitest.",{"type":41,"tag":63,"props":64,"children":66},"h3",{"id":65},"setup-vitest",[67],{"type":47,"value":68},"Setup Vitest",{"type":41,"tag":70,"props":71,"children":76},"pre",{"className":72,"code":73,"language":74,"meta":75,"style":75},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -D vitest\n","bash","",[77],{"type":41,"tag":78,"props":79,"children":80},"code",{"__ignoreMap":75},[81],{"type":41,"tag":82,"props":83,"children":86},"span",{"class":84,"line":85},"line",1,[87,93,99,104],{"type":41,"tag":82,"props":88,"children":90},{"style":89},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[91],{"type":47,"value":92},"npm",{"type":41,"tag":82,"props":94,"children":96},{"style":95},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[97],{"type":47,"value":98}," install",{"type":41,"tag":82,"props":100,"children":101},{"style":95},[102],{"type":47,"value":103}," -D",{"type":41,"tag":82,"props":105,"children":106},{"style":95},[107],{"type":47,"value":108}," vitest\n",{"type":41,"tag":57,"props":110,"children":111},{},[112,114,120],{"type":47,"value":113},"Add to ",{"type":41,"tag":78,"props":115,"children":117},{"className":116},[],[118],{"type":47,"value":119},"package.json",{"type":47,"value":121},":",{"type":41,"tag":70,"props":123,"children":127},{"className":124,"code":125,"language":126,"meta":75,"style":75},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"test\": \"vitest\"\n  }\n}\n","json",[128],{"type":41,"tag":78,"props":129,"children":130},{"__ignoreMap":75},[131,140,169,206,215],{"type":41,"tag":82,"props":132,"children":133},{"class":84,"line":85},[134],{"type":41,"tag":82,"props":135,"children":137},{"style":136},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[138],{"type":47,"value":139},"{\n",{"type":41,"tag":82,"props":141,"children":143},{"class":84,"line":142},2,[144,149,155,160,164],{"type":41,"tag":82,"props":145,"children":146},{"style":136},[147],{"type":47,"value":148},"  \"",{"type":41,"tag":82,"props":150,"children":152},{"style":151},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[153],{"type":47,"value":154},"scripts",{"type":41,"tag":82,"props":156,"children":157},{"style":136},[158],{"type":47,"value":159},"\"",{"type":41,"tag":82,"props":161,"children":162},{"style":136},[163],{"type":47,"value":121},{"type":41,"tag":82,"props":165,"children":166},{"style":136},[167],{"type":47,"value":168}," {\n",{"type":41,"tag":82,"props":170,"children":172},{"class":84,"line":171},3,[173,178,183,187,191,196,201],{"type":41,"tag":82,"props":174,"children":175},{"style":136},[176],{"type":47,"value":177},"    \"",{"type":41,"tag":82,"props":179,"children":180},{"style":89},[181],{"type":47,"value":182},"test",{"type":41,"tag":82,"props":184,"children":185},{"style":136},[186],{"type":47,"value":159},{"type":41,"tag":82,"props":188,"children":189},{"style":136},[190],{"type":47,"value":121},{"type":41,"tag":82,"props":192,"children":193},{"style":136},[194],{"type":47,"value":195}," \"",{"type":41,"tag":82,"props":197,"children":198},{"style":95},[199],{"type":47,"value":200},"vitest",{"type":41,"tag":82,"props":202,"children":203},{"style":136},[204],{"type":47,"value":205},"\"\n",{"type":41,"tag":82,"props":207,"children":209},{"class":84,"line":208},4,[210],{"type":41,"tag":82,"props":211,"children":212},{"style":136},[213],{"type":47,"value":214},"  }\n",{"type":41,"tag":82,"props":216,"children":217},{"class":84,"line":25},[218],{"type":41,"tag":82,"props":219,"children":220},{"style":136},[221],{"type":47,"value":222},"}\n",{"type":41,"tag":63,"props":224,"children":226},{"id":225},"test-an-api-endpoint",[227],{"type":47,"value":228},"Test an API Endpoint",{"type":41,"tag":70,"props":230,"children":233},{"className":231,"code":232,"language":15,"meta":75,"style":75},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F api.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { hello } from \".\u002Fapi\";\n\ndescribe(\"hello endpoint\", () => {\n  it(\"returns a greeting\", async () => {\n    const response = await hello();\n    expect(response.message).toBe(\"Hello, World!\");\n  });\n});\n",[234],{"type":41,"tag":78,"props":235,"children":236},{"__ignoreMap":75},[237,246,312,353,362,407,455,492,559,576],{"type":41,"tag":82,"props":238,"children":239},{"class":84,"line":85},[240],{"type":41,"tag":82,"props":241,"children":243},{"style":242},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[244],{"type":47,"value":245},"\u002F\u002F api.test.ts\n",{"type":41,"tag":82,"props":247,"children":248},{"class":84,"line":142},[249,255,260,266,271,276,280,285,290,295,299,303,307],{"type":41,"tag":82,"props":250,"children":252},{"style":251},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[253],{"type":47,"value":254},"import",{"type":41,"tag":82,"props":256,"children":257},{"style":136},[258],{"type":47,"value":259}," {",{"type":41,"tag":82,"props":261,"children":263},{"style":262},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[264],{"type":47,"value":265}," describe",{"type":41,"tag":82,"props":267,"children":268},{"style":136},[269],{"type":47,"value":270},",",{"type":41,"tag":82,"props":272,"children":273},{"style":262},[274],{"type":47,"value":275}," it",{"type":41,"tag":82,"props":277,"children":278},{"style":136},[279],{"type":47,"value":270},{"type":41,"tag":82,"props":281,"children":282},{"style":262},[283],{"type":47,"value":284}," expect",{"type":41,"tag":82,"props":286,"children":287},{"style":136},[288],{"type":47,"value":289}," }",{"type":41,"tag":82,"props":291,"children":292},{"style":251},[293],{"type":47,"value":294}," from",{"type":41,"tag":82,"props":296,"children":297},{"style":136},[298],{"type":47,"value":195},{"type":41,"tag":82,"props":300,"children":301},{"style":95},[302],{"type":47,"value":200},{"type":41,"tag":82,"props":304,"children":305},{"style":136},[306],{"type":47,"value":159},{"type":41,"tag":82,"props":308,"children":309},{"style":136},[310],{"type":47,"value":311},";\n",{"type":41,"tag":82,"props":313,"children":314},{"class":84,"line":171},[315,319,323,328,332,336,340,345,349],{"type":41,"tag":82,"props":316,"children":317},{"style":251},[318],{"type":47,"value":254},{"type":41,"tag":82,"props":320,"children":321},{"style":136},[322],{"type":47,"value":259},{"type":41,"tag":82,"props":324,"children":325},{"style":262},[326],{"type":47,"value":327}," hello",{"type":41,"tag":82,"props":329,"children":330},{"style":136},[331],{"type":47,"value":289},{"type":41,"tag":82,"props":333,"children":334},{"style":251},[335],{"type":47,"value":294},{"type":41,"tag":82,"props":337,"children":338},{"style":136},[339],{"type":47,"value":195},{"type":41,"tag":82,"props":341,"children":342},{"style":95},[343],{"type":47,"value":344},".\u002Fapi",{"type":41,"tag":82,"props":346,"children":347},{"style":136},[348],{"type":47,"value":159},{"type":41,"tag":82,"props":350,"children":351},{"style":136},[352],{"type":47,"value":311},{"type":41,"tag":82,"props":354,"children":355},{"class":84,"line":208},[356],{"type":41,"tag":82,"props":357,"children":359},{"emptyLinePlaceholder":358},true,[360],{"type":47,"value":361},"\n",{"type":41,"tag":82,"props":363,"children":364},{"class":84,"line":25},[365,371,376,380,385,389,393,398,403],{"type":41,"tag":82,"props":366,"children":368},{"style":367},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[369],{"type":47,"value":370},"describe",{"type":41,"tag":82,"props":372,"children":373},{"style":262},[374],{"type":47,"value":375},"(",{"type":41,"tag":82,"props":377,"children":378},{"style":136},[379],{"type":47,"value":159},{"type":41,"tag":82,"props":381,"children":382},{"style":95},[383],{"type":47,"value":384},"hello endpoint",{"type":41,"tag":82,"props":386,"children":387},{"style":136},[388],{"type":47,"value":159},{"type":41,"tag":82,"props":390,"children":391},{"style":136},[392],{"type":47,"value":270},{"type":41,"tag":82,"props":394,"children":395},{"style":136},[396],{"type":47,"value":397}," ()",{"type":41,"tag":82,"props":399,"children":400},{"style":151},[401],{"type":47,"value":402}," =>",{"type":41,"tag":82,"props":404,"children":405},{"style":136},[406],{"type":47,"value":168},{"type":41,"tag":82,"props":408,"children":410},{"class":84,"line":409},6,[411,416,421,425,430,434,438,443,447,451],{"type":41,"tag":82,"props":412,"children":413},{"style":367},[414],{"type":47,"value":415},"  it",{"type":41,"tag":82,"props":417,"children":419},{"style":418},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[420],{"type":47,"value":375},{"type":41,"tag":82,"props":422,"children":423},{"style":136},[424],{"type":47,"value":159},{"type":41,"tag":82,"props":426,"children":427},{"style":95},[428],{"type":47,"value":429},"returns a greeting",{"type":41,"tag":82,"props":431,"children":432},{"style":136},[433],{"type":47,"value":159},{"type":41,"tag":82,"props":435,"children":436},{"style":136},[437],{"type":47,"value":270},{"type":41,"tag":82,"props":439,"children":440},{"style":151},[441],{"type":47,"value":442}," async",{"type":41,"tag":82,"props":444,"children":445},{"style":136},[446],{"type":47,"value":397},{"type":41,"tag":82,"props":448,"children":449},{"style":151},[450],{"type":47,"value":402},{"type":41,"tag":82,"props":452,"children":453},{"style":136},[454],{"type":47,"value":168},{"type":41,"tag":82,"props":456,"children":458},{"class":84,"line":457},7,[459,464,469,474,479,483,488],{"type":41,"tag":82,"props":460,"children":461},{"style":151},[462],{"type":47,"value":463},"    const",{"type":41,"tag":82,"props":465,"children":466},{"style":262},[467],{"type":47,"value":468}," response",{"type":41,"tag":82,"props":470,"children":471},{"style":136},[472],{"type":47,"value":473}," =",{"type":41,"tag":82,"props":475,"children":476},{"style":251},[477],{"type":47,"value":478}," await",{"type":41,"tag":82,"props":480,"children":481},{"style":367},[482],{"type":47,"value":327},{"type":41,"tag":82,"props":484,"children":485},{"style":418},[486],{"type":47,"value":487},"()",{"type":41,"tag":82,"props":489,"children":490},{"style":136},[491],{"type":47,"value":311},{"type":41,"tag":82,"props":493,"children":495},{"class":84,"line":494},8,[496,501,505,510,515,520,525,529,534,538,542,547,551,555],{"type":41,"tag":82,"props":497,"children":498},{"style":367},[499],{"type":47,"value":500},"    expect",{"type":41,"tag":82,"props":502,"children":503},{"style":418},[504],{"type":47,"value":375},{"type":41,"tag":82,"props":506,"children":507},{"style":262},[508],{"type":47,"value":509},"response",{"type":41,"tag":82,"props":511,"children":512},{"style":136},[513],{"type":47,"value":514},".",{"type":41,"tag":82,"props":516,"children":517},{"style":262},[518],{"type":47,"value":519},"message",{"type":41,"tag":82,"props":521,"children":522},{"style":418},[523],{"type":47,"value":524},")",{"type":41,"tag":82,"props":526,"children":527},{"style":136},[528],{"type":47,"value":514},{"type":41,"tag":82,"props":530,"children":531},{"style":367},[532],{"type":47,"value":533},"toBe",{"type":41,"tag":82,"props":535,"children":536},{"style":418},[537],{"type":47,"value":375},{"type":41,"tag":82,"props":539,"children":540},{"style":136},[541],{"type":47,"value":159},{"type":41,"tag":82,"props":543,"children":544},{"style":95},[545],{"type":47,"value":546},"Hello, World!",{"type":41,"tag":82,"props":548,"children":549},{"style":136},[550],{"type":47,"value":159},{"type":41,"tag":82,"props":552,"children":553},{"style":418},[554],{"type":47,"value":524},{"type":41,"tag":82,"props":556,"children":557},{"style":136},[558],{"type":47,"value":311},{"type":41,"tag":82,"props":560,"children":562},{"class":84,"line":561},9,[563,568,572],{"type":41,"tag":82,"props":564,"children":565},{"style":136},[566],{"type":47,"value":567},"  }",{"type":41,"tag":82,"props":569,"children":570},{"style":418},[571],{"type":47,"value":524},{"type":41,"tag":82,"props":573,"children":574},{"style":136},[575],{"type":47,"value":311},{"type":41,"tag":82,"props":577,"children":579},{"class":84,"line":578},10,[580,585,589],{"type":41,"tag":82,"props":581,"children":582},{"style":136},[583],{"type":47,"value":584},"}",{"type":41,"tag":82,"props":586,"children":587},{"style":262},[588],{"type":47,"value":524},{"type":41,"tag":82,"props":590,"children":591},{"style":136},[592],{"type":47,"value":311},{"type":41,"tag":63,"props":594,"children":596},{"id":595},"run-tests",[597],{"type":47,"value":598},"Run Tests",{"type":41,"tag":70,"props":600,"children":602},{"className":72,"code":601,"language":74,"meta":75,"style":75},"# Run with Encore (recommended - sets up infrastructure)\nencore test\n\n# Or run directly with npm\nnpm test\n",[603],{"type":41,"tag":78,"props":604,"children":605},{"__ignoreMap":75},[606,614,626,633,641],{"type":41,"tag":82,"props":607,"children":608},{"class":84,"line":85},[609],{"type":41,"tag":82,"props":610,"children":611},{"style":242},[612],{"type":47,"value":613},"# Run with Encore (recommended - sets up infrastructure)\n",{"type":41,"tag":82,"props":615,"children":616},{"class":84,"line":142},[617,621],{"type":41,"tag":82,"props":618,"children":619},{"style":89},[620],{"type":47,"value":8},{"type":41,"tag":82,"props":622,"children":623},{"style":95},[624],{"type":47,"value":625}," test\n",{"type":41,"tag":82,"props":627,"children":628},{"class":84,"line":171},[629],{"type":41,"tag":82,"props":630,"children":631},{"emptyLinePlaceholder":358},[632],{"type":47,"value":361},{"type":41,"tag":82,"props":634,"children":635},{"class":84,"line":208},[636],{"type":41,"tag":82,"props":637,"children":638},{"style":242},[639],{"type":47,"value":640},"# Or run directly with npm\n",{"type":41,"tag":82,"props":642,"children":643},{"class":84,"line":25},[644,648],{"type":41,"tag":82,"props":645,"children":646},{"style":89},[647],{"type":47,"value":92},{"type":41,"tag":82,"props":649,"children":650},{"style":95},[651],{"type":47,"value":625},{"type":41,"tag":57,"props":653,"children":654},{},[655,657,663],{"type":47,"value":656},"Using ",{"type":41,"tag":78,"props":658,"children":660},{"className":659},[],[661],{"type":47,"value":662},"encore test",{"type":47,"value":664}," is recommended because it:",{"type":41,"tag":666,"props":667,"children":668},"ul",{},[669,675,680],{"type":41,"tag":670,"props":671,"children":672},"li",{},[673],{"type":47,"value":674},"Sets up test databases automatically",{"type":41,"tag":670,"props":676,"children":677},{},[678],{"type":47,"value":679},"Provides isolated infrastructure per test",{"type":41,"tag":670,"props":681,"children":682},{},[683],{"type":47,"value":684},"Handles service dependencies",{"type":41,"tag":63,"props":686,"children":688},{"id":687},"test-with-request-parameters",[689],{"type":47,"value":690},"Test with Request Parameters",{"type":41,"tag":70,"props":692,"children":694},{"className":231,"code":693,"language":15,"meta":75,"style":75},"\u002F\u002F api.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { getUser } from \".\u002Fapi\";\n\ndescribe(\"getUser endpoint\", () => {\n  it(\"returns the user by ID\", async () => {\n    const user = await getUser({ id: \"123\" });\n    expect(user.id).toBe(\"123\");\n    expect(user.name).toBeDefined();\n  });\n});\n",[695],{"type":41,"tag":78,"props":696,"children":697},{"__ignoreMap":75},[698,705,760,800,807,847,891,958,1019,1064,1079],{"type":41,"tag":82,"props":699,"children":700},{"class":84,"line":85},[701],{"type":41,"tag":82,"props":702,"children":703},{"style":242},[704],{"type":47,"value":245},{"type":41,"tag":82,"props":706,"children":707},{"class":84,"line":142},[708,712,716,720,724,728,732,736,740,744,748,752,756],{"type":41,"tag":82,"props":709,"children":710},{"style":251},[711],{"type":47,"value":254},{"type":41,"tag":82,"props":713,"children":714},{"style":136},[715],{"type":47,"value":259},{"type":41,"tag":82,"props":717,"children":718},{"style":262},[719],{"type":47,"value":265},{"type":41,"tag":82,"props":721,"children":722},{"style":136},[723],{"type":47,"value":270},{"type":41,"tag":82,"props":725,"children":726},{"style":262},[727],{"type":47,"value":275},{"type":41,"tag":82,"props":729,"children":730},{"style":136},[731],{"type":47,"value":270},{"type":41,"tag":82,"props":733,"children":734},{"style":262},[735],{"type":47,"value":284},{"type":41,"tag":82,"props":737,"children":738},{"style":136},[739],{"type":47,"value":289},{"type":41,"tag":82,"props":741,"children":742},{"style":251},[743],{"type":47,"value":294},{"type":41,"tag":82,"props":745,"children":746},{"style":136},[747],{"type":47,"value":195},{"type":41,"tag":82,"props":749,"children":750},{"style":95},[751],{"type":47,"value":200},{"type":41,"tag":82,"props":753,"children":754},{"style":136},[755],{"type":47,"value":159},{"type":41,"tag":82,"props":757,"children":758},{"style":136},[759],{"type":47,"value":311},{"type":41,"tag":82,"props":761,"children":762},{"class":84,"line":171},[763,767,771,776,780,784,788,792,796],{"type":41,"tag":82,"props":764,"children":765},{"style":251},[766],{"type":47,"value":254},{"type":41,"tag":82,"props":768,"children":769},{"style":136},[770],{"type":47,"value":259},{"type":41,"tag":82,"props":772,"children":773},{"style":262},[774],{"type":47,"value":775}," getUser",{"type":41,"tag":82,"props":777,"children":778},{"style":136},[779],{"type":47,"value":289},{"type":41,"tag":82,"props":781,"children":782},{"style":251},[783],{"type":47,"value":294},{"type":41,"tag":82,"props":785,"children":786},{"style":136},[787],{"type":47,"value":195},{"type":41,"tag":82,"props":789,"children":790},{"style":95},[791],{"type":47,"value":344},{"type":41,"tag":82,"props":793,"children":794},{"style":136},[795],{"type":47,"value":159},{"type":41,"tag":82,"props":797,"children":798},{"style":136},[799],{"type":47,"value":311},{"type":41,"tag":82,"props":801,"children":802},{"class":84,"line":208},[803],{"type":41,"tag":82,"props":804,"children":805},{"emptyLinePlaceholder":358},[806],{"type":47,"value":361},{"type":41,"tag":82,"props":808,"children":809},{"class":84,"line":25},[810,814,818,822,827,831,835,839,843],{"type":41,"tag":82,"props":811,"children":812},{"style":367},[813],{"type":47,"value":370},{"type":41,"tag":82,"props":815,"children":816},{"style":262},[817],{"type":47,"value":375},{"type":41,"tag":82,"props":819,"children":820},{"style":136},[821],{"type":47,"value":159},{"type":41,"tag":82,"props":823,"children":824},{"style":95},[825],{"type":47,"value":826},"getUser endpoint",{"type":41,"tag":82,"props":828,"children":829},{"style":136},[830],{"type":47,"value":159},{"type":41,"tag":82,"props":832,"children":833},{"style":136},[834],{"type":47,"value":270},{"type":41,"tag":82,"props":836,"children":837},{"style":136},[838],{"type":47,"value":397},{"type":41,"tag":82,"props":840,"children":841},{"style":151},[842],{"type":47,"value":402},{"type":41,"tag":82,"props":844,"children":845},{"style":136},[846],{"type":47,"value":168},{"type":41,"tag":82,"props":848,"children":849},{"class":84,"line":409},[850,854,858,862,867,871,875,879,883,887],{"type":41,"tag":82,"props":851,"children":852},{"style":367},[853],{"type":47,"value":415},{"type":41,"tag":82,"props":855,"children":856},{"style":418},[857],{"type":47,"value":375},{"type":41,"tag":82,"props":859,"children":860},{"style":136},[861],{"type":47,"value":159},{"type":41,"tag":82,"props":863,"children":864},{"style":95},[865],{"type":47,"value":866},"returns the user by ID",{"type":41,"tag":82,"props":868,"children":869},{"style":136},[870],{"type":47,"value":159},{"type":41,"tag":82,"props":872,"children":873},{"style":136},[874],{"type":47,"value":270},{"type":41,"tag":82,"props":876,"children":877},{"style":151},[878],{"type":47,"value":442},{"type":41,"tag":82,"props":880,"children":881},{"style":136},[882],{"type":47,"value":397},{"type":41,"tag":82,"props":884,"children":885},{"style":151},[886],{"type":47,"value":402},{"type":41,"tag":82,"props":888,"children":889},{"style":136},[890],{"type":47,"value":168},{"type":41,"tag":82,"props":892,"children":893},{"class":84,"line":457},[894,898,903,907,911,915,919,924,929,933,937,942,946,950,954],{"type":41,"tag":82,"props":895,"children":896},{"style":151},[897],{"type":47,"value":463},{"type":41,"tag":82,"props":899,"children":900},{"style":262},[901],{"type":47,"value":902}," user",{"type":41,"tag":82,"props":904,"children":905},{"style":136},[906],{"type":47,"value":473},{"type":41,"tag":82,"props":908,"children":909},{"style":251},[910],{"type":47,"value":478},{"type":41,"tag":82,"props":912,"children":913},{"style":367},[914],{"type":47,"value":775},{"type":41,"tag":82,"props":916,"children":917},{"style":418},[918],{"type":47,"value":375},{"type":41,"tag":82,"props":920,"children":921},{"style":136},[922],{"type":47,"value":923},"{",{"type":41,"tag":82,"props":925,"children":926},{"style":418},[927],{"type":47,"value":928}," id",{"type":41,"tag":82,"props":930,"children":931},{"style":136},[932],{"type":47,"value":121},{"type":41,"tag":82,"props":934,"children":935},{"style":136},[936],{"type":47,"value":195},{"type":41,"tag":82,"props":938,"children":939},{"style":95},[940],{"type":47,"value":941},"123",{"type":41,"tag":82,"props":943,"children":944},{"style":136},[945],{"type":47,"value":159},{"type":41,"tag":82,"props":947,"children":948},{"style":136},[949],{"type":47,"value":289},{"type":41,"tag":82,"props":951,"children":952},{"style":418},[953],{"type":47,"value":524},{"type":41,"tag":82,"props":955,"children":956},{"style":136},[957],{"type":47,"value":311},{"type":41,"tag":82,"props":959,"children":960},{"class":84,"line":494},[961,965,969,974,978,983,987,991,995,999,1003,1007,1011,1015],{"type":41,"tag":82,"props":962,"children":963},{"style":367},[964],{"type":47,"value":500},{"type":41,"tag":82,"props":966,"children":967},{"style":418},[968],{"type":47,"value":375},{"type":41,"tag":82,"props":970,"children":971},{"style":262},[972],{"type":47,"value":973},"user",{"type":41,"tag":82,"props":975,"children":976},{"style":136},[977],{"type":47,"value":514},{"type":41,"tag":82,"props":979,"children":980},{"style":262},[981],{"type":47,"value":982},"id",{"type":41,"tag":82,"props":984,"children":985},{"style":418},[986],{"type":47,"value":524},{"type":41,"tag":82,"props":988,"children":989},{"style":136},[990],{"type":47,"value":514},{"type":41,"tag":82,"props":992,"children":993},{"style":367},[994],{"type":47,"value":533},{"type":41,"tag":82,"props":996,"children":997},{"style":418},[998],{"type":47,"value":375},{"type":41,"tag":82,"props":1000,"children":1001},{"style":136},[1002],{"type":47,"value":159},{"type":41,"tag":82,"props":1004,"children":1005},{"style":95},[1006],{"type":47,"value":941},{"type":41,"tag":82,"props":1008,"children":1009},{"style":136},[1010],{"type":47,"value":159},{"type":41,"tag":82,"props":1012,"children":1013},{"style":418},[1014],{"type":47,"value":524},{"type":41,"tag":82,"props":1016,"children":1017},{"style":136},[1018],{"type":47,"value":311},{"type":41,"tag":82,"props":1020,"children":1021},{"class":84,"line":561},[1022,1026,1030,1034,1038,1043,1047,1051,1056,1060],{"type":41,"tag":82,"props":1023,"children":1024},{"style":367},[1025],{"type":47,"value":500},{"type":41,"tag":82,"props":1027,"children":1028},{"style":418},[1029],{"type":47,"value":375},{"type":41,"tag":82,"props":1031,"children":1032},{"style":262},[1033],{"type":47,"value":973},{"type":41,"tag":82,"props":1035,"children":1036},{"style":136},[1037],{"type":47,"value":514},{"type":41,"tag":82,"props":1039,"children":1040},{"style":262},[1041],{"type":47,"value":1042},"name",{"type":41,"tag":82,"props":1044,"children":1045},{"style":418},[1046],{"type":47,"value":524},{"type":41,"tag":82,"props":1048,"children":1049},{"style":136},[1050],{"type":47,"value":514},{"type":41,"tag":82,"props":1052,"children":1053},{"style":367},[1054],{"type":47,"value":1055},"toBeDefined",{"type":41,"tag":82,"props":1057,"children":1058},{"style":418},[1059],{"type":47,"value":487},{"type":41,"tag":82,"props":1061,"children":1062},{"style":136},[1063],{"type":47,"value":311},{"type":41,"tag":82,"props":1065,"children":1066},{"class":84,"line":578},[1067,1071,1075],{"type":41,"tag":82,"props":1068,"children":1069},{"style":136},[1070],{"type":47,"value":567},{"type":41,"tag":82,"props":1072,"children":1073},{"style":418},[1074],{"type":47,"value":524},{"type":41,"tag":82,"props":1076,"children":1077},{"style":136},[1078],{"type":47,"value":311},{"type":41,"tag":82,"props":1080,"children":1082},{"class":84,"line":1081},11,[1083,1087,1091],{"type":41,"tag":82,"props":1084,"children":1085},{"style":136},[1086],{"type":47,"value":584},{"type":41,"tag":82,"props":1088,"children":1089},{"style":262},[1090],{"type":47,"value":524},{"type":41,"tag":82,"props":1092,"children":1093},{"style":136},[1094],{"type":47,"value":311},{"type":41,"tag":63,"props":1096,"children":1098},{"id":1097},"test-database-operations",[1099],{"type":47,"value":1100},"Test Database Operations",{"type":41,"tag":57,"props":1102,"children":1103},{},[1104],{"type":47,"value":1105},"Encore provides isolated test databases:",{"type":41,"tag":70,"props":1107,"children":1109},{"className":231,"code":1108,"language":15,"meta":75,"style":75},"\u002F\u002F user.test.ts\nimport { describe, it, expect, beforeEach } from \"vitest\";\nimport { createUser, getUser, db } from \".\u002Fuser\";\n\ndescribe(\"user operations\", () => {\n  beforeEach(async () => {\n    \u002F\u002F Clean up before each test\n    await db.exec`DELETE FROM users`;\n  });\n\n  it(\"creates and retrieves a user\", async () => {\n    const created = await createUser({ email: \"test@example.com\", name: \"Test\" });\n    const retrieved = await getUser({ id: created.id });\n    \n    expect(retrieved.email).toBe(\"test@example.com\");\n  });\n});\n",[1110],{"type":41,"tag":78,"props":1111,"children":1112},{"__ignoreMap":75},[1113,1121,1185,1243,1250,1290,1319,1327,1366,1381,1388,1432,1525,1590,1599,1661,1677],{"type":41,"tag":82,"props":1114,"children":1115},{"class":84,"line":85},[1116],{"type":41,"tag":82,"props":1117,"children":1118},{"style":242},[1119],{"type":47,"value":1120},"\u002F\u002F user.test.ts\n",{"type":41,"tag":82,"props":1122,"children":1123},{"class":84,"line":142},[1124,1128,1132,1136,1140,1144,1148,1152,1156,1161,1165,1169,1173,1177,1181],{"type":41,"tag":82,"props":1125,"children":1126},{"style":251},[1127],{"type":47,"value":254},{"type":41,"tag":82,"props":1129,"children":1130},{"style":136},[1131],{"type":47,"value":259},{"type":41,"tag":82,"props":1133,"children":1134},{"style":262},[1135],{"type":47,"value":265},{"type":41,"tag":82,"props":1137,"children":1138},{"style":136},[1139],{"type":47,"value":270},{"type":41,"tag":82,"props":1141,"children":1142},{"style":262},[1143],{"type":47,"value":275},{"type":41,"tag":82,"props":1145,"children":1146},{"style":136},[1147],{"type":47,"value":270},{"type":41,"tag":82,"props":1149,"children":1150},{"style":262},[1151],{"type":47,"value":284},{"type":41,"tag":82,"props":1153,"children":1154},{"style":136},[1155],{"type":47,"value":270},{"type":41,"tag":82,"props":1157,"children":1158},{"style":262},[1159],{"type":47,"value":1160}," beforeEach",{"type":41,"tag":82,"props":1162,"children":1163},{"style":136},[1164],{"type":47,"value":289},{"type":41,"tag":82,"props":1166,"children":1167},{"style":251},[1168],{"type":47,"value":294},{"type":41,"tag":82,"props":1170,"children":1171},{"style":136},[1172],{"type":47,"value":195},{"type":41,"tag":82,"props":1174,"children":1175},{"style":95},[1176],{"type":47,"value":200},{"type":41,"tag":82,"props":1178,"children":1179},{"style":136},[1180],{"type":47,"value":159},{"type":41,"tag":82,"props":1182,"children":1183},{"style":136},[1184],{"type":47,"value":311},{"type":41,"tag":82,"props":1186,"children":1187},{"class":84,"line":171},[1188,1192,1196,1201,1205,1209,1213,1218,1222,1226,1230,1235,1239],{"type":41,"tag":82,"props":1189,"children":1190},{"style":251},[1191],{"type":47,"value":254},{"type":41,"tag":82,"props":1193,"children":1194},{"style":136},[1195],{"type":47,"value":259},{"type":41,"tag":82,"props":1197,"children":1198},{"style":262},[1199],{"type":47,"value":1200}," createUser",{"type":41,"tag":82,"props":1202,"children":1203},{"style":136},[1204],{"type":47,"value":270},{"type":41,"tag":82,"props":1206,"children":1207},{"style":262},[1208],{"type":47,"value":775},{"type":41,"tag":82,"props":1210,"children":1211},{"style":136},[1212],{"type":47,"value":270},{"type":41,"tag":82,"props":1214,"children":1215},{"style":262},[1216],{"type":47,"value":1217}," db",{"type":41,"tag":82,"props":1219,"children":1220},{"style":136},[1221],{"type":47,"value":289},{"type":41,"tag":82,"props":1223,"children":1224},{"style":251},[1225],{"type":47,"value":294},{"type":41,"tag":82,"props":1227,"children":1228},{"style":136},[1229],{"type":47,"value":195},{"type":41,"tag":82,"props":1231,"children":1232},{"style":95},[1233],{"type":47,"value":1234},".\u002Fuser",{"type":41,"tag":82,"props":1236,"children":1237},{"style":136},[1238],{"type":47,"value":159},{"type":41,"tag":82,"props":1240,"children":1241},{"style":136},[1242],{"type":47,"value":311},{"type":41,"tag":82,"props":1244,"children":1245},{"class":84,"line":208},[1246],{"type":41,"tag":82,"props":1247,"children":1248},{"emptyLinePlaceholder":358},[1249],{"type":47,"value":361},{"type":41,"tag":82,"props":1251,"children":1252},{"class":84,"line":25},[1253,1257,1261,1265,1270,1274,1278,1282,1286],{"type":41,"tag":82,"props":1254,"children":1255},{"style":367},[1256],{"type":47,"value":370},{"type":41,"tag":82,"props":1258,"children":1259},{"style":262},[1260],{"type":47,"value":375},{"type":41,"tag":82,"props":1262,"children":1263},{"style":136},[1264],{"type":47,"value":159},{"type":41,"tag":82,"props":1266,"children":1267},{"style":95},[1268],{"type":47,"value":1269},"user operations",{"type":41,"tag":82,"props":1271,"children":1272},{"style":136},[1273],{"type":47,"value":159},{"type":41,"tag":82,"props":1275,"children":1276},{"style":136},[1277],{"type":47,"value":270},{"type":41,"tag":82,"props":1279,"children":1280},{"style":136},[1281],{"type":47,"value":397},{"type":41,"tag":82,"props":1283,"children":1284},{"style":151},[1285],{"type":47,"value":402},{"type":41,"tag":82,"props":1287,"children":1288},{"style":136},[1289],{"type":47,"value":168},{"type":41,"tag":82,"props":1291,"children":1292},{"class":84,"line":409},[1293,1298,1302,1307,1311,1315],{"type":41,"tag":82,"props":1294,"children":1295},{"style":367},[1296],{"type":47,"value":1297},"  beforeEach",{"type":41,"tag":82,"props":1299,"children":1300},{"style":418},[1301],{"type":47,"value":375},{"type":41,"tag":82,"props":1303,"children":1304},{"style":151},[1305],{"type":47,"value":1306},"async",{"type":41,"tag":82,"props":1308,"children":1309},{"style":136},[1310],{"type":47,"value":397},{"type":41,"tag":82,"props":1312,"children":1313},{"style":151},[1314],{"type":47,"value":402},{"type":41,"tag":82,"props":1316,"children":1317},{"style":136},[1318],{"type":47,"value":168},{"type":41,"tag":82,"props":1320,"children":1321},{"class":84,"line":457},[1322],{"type":41,"tag":82,"props":1323,"children":1324},{"style":242},[1325],{"type":47,"value":1326},"    \u002F\u002F Clean up before each test\n",{"type":41,"tag":82,"props":1328,"children":1329},{"class":84,"line":494},[1330,1335,1339,1343,1348,1353,1358,1362],{"type":41,"tag":82,"props":1331,"children":1332},{"style":251},[1333],{"type":47,"value":1334},"    await",{"type":41,"tag":82,"props":1336,"children":1337},{"style":262},[1338],{"type":47,"value":1217},{"type":41,"tag":82,"props":1340,"children":1341},{"style":136},[1342],{"type":47,"value":514},{"type":41,"tag":82,"props":1344,"children":1345},{"style":367},[1346],{"type":47,"value":1347},"exec",{"type":41,"tag":82,"props":1349,"children":1350},{"style":136},[1351],{"type":47,"value":1352},"`",{"type":41,"tag":82,"props":1354,"children":1355},{"style":95},[1356],{"type":47,"value":1357},"DELETE FROM users",{"type":41,"tag":82,"props":1359,"children":1360},{"style":136},[1361],{"type":47,"value":1352},{"type":41,"tag":82,"props":1363,"children":1364},{"style":136},[1365],{"type":47,"value":311},{"type":41,"tag":82,"props":1367,"children":1368},{"class":84,"line":561},[1369,1373,1377],{"type":41,"tag":82,"props":1370,"children":1371},{"style":136},[1372],{"type":47,"value":567},{"type":41,"tag":82,"props":1374,"children":1375},{"style":418},[1376],{"type":47,"value":524},{"type":41,"tag":82,"props":1378,"children":1379},{"style":136},[1380],{"type":47,"value":311},{"type":41,"tag":82,"props":1382,"children":1383},{"class":84,"line":578},[1384],{"type":41,"tag":82,"props":1385,"children":1386},{"emptyLinePlaceholder":358},[1387],{"type":47,"value":361},{"type":41,"tag":82,"props":1389,"children":1390},{"class":84,"line":1081},[1391,1395,1399,1403,1408,1412,1416,1420,1424,1428],{"type":41,"tag":82,"props":1392,"children":1393},{"style":367},[1394],{"type":47,"value":415},{"type":41,"tag":82,"props":1396,"children":1397},{"style":418},[1398],{"type":47,"value":375},{"type":41,"tag":82,"props":1400,"children":1401},{"style":136},[1402],{"type":47,"value":159},{"type":41,"tag":82,"props":1404,"children":1405},{"style":95},[1406],{"type":47,"value":1407},"creates and retrieves a user",{"type":41,"tag":82,"props":1409,"children":1410},{"style":136},[1411],{"type":47,"value":159},{"type":41,"tag":82,"props":1413,"children":1414},{"style":136},[1415],{"type":47,"value":270},{"type":41,"tag":82,"props":1417,"children":1418},{"style":151},[1419],{"type":47,"value":442},{"type":41,"tag":82,"props":1421,"children":1422},{"style":136},[1423],{"type":47,"value":397},{"type":41,"tag":82,"props":1425,"children":1426},{"style":151},[1427],{"type":47,"value":402},{"type":41,"tag":82,"props":1429,"children":1430},{"style":136},[1431],{"type":47,"value":168},{"type":41,"tag":82,"props":1433,"children":1435},{"class":84,"line":1434},12,[1436,1440,1445,1449,1453,1457,1461,1465,1470,1474,1478,1483,1487,1491,1496,1500,1504,1509,1513,1517,1521],{"type":41,"tag":82,"props":1437,"children":1438},{"style":151},[1439],{"type":47,"value":463},{"type":41,"tag":82,"props":1441,"children":1442},{"style":262},[1443],{"type":47,"value":1444}," created",{"type":41,"tag":82,"props":1446,"children":1447},{"style":136},[1448],{"type":47,"value":473},{"type":41,"tag":82,"props":1450,"children":1451},{"style":251},[1452],{"type":47,"value":478},{"type":41,"tag":82,"props":1454,"children":1455},{"style":367},[1456],{"type":47,"value":1200},{"type":41,"tag":82,"props":1458,"children":1459},{"style":418},[1460],{"type":47,"value":375},{"type":41,"tag":82,"props":1462,"children":1463},{"style":136},[1464],{"type":47,"value":923},{"type":41,"tag":82,"props":1466,"children":1467},{"style":418},[1468],{"type":47,"value":1469}," email",{"type":41,"tag":82,"props":1471,"children":1472},{"style":136},[1473],{"type":47,"value":121},{"type":41,"tag":82,"props":1475,"children":1476},{"style":136},[1477],{"type":47,"value":195},{"type":41,"tag":82,"props":1479,"children":1480},{"style":95},[1481],{"type":47,"value":1482},"test@example.com",{"type":41,"tag":82,"props":1484,"children":1485},{"style":136},[1486],{"type":47,"value":159},{"type":41,"tag":82,"props":1488,"children":1489},{"style":136},[1490],{"type":47,"value":270},{"type":41,"tag":82,"props":1492,"children":1493},{"style":418},[1494],{"type":47,"value":1495}," name",{"type":41,"tag":82,"props":1497,"children":1498},{"style":136},[1499],{"type":47,"value":121},{"type":41,"tag":82,"props":1501,"children":1502},{"style":136},[1503],{"type":47,"value":195},{"type":41,"tag":82,"props":1505,"children":1506},{"style":95},[1507],{"type":47,"value":1508},"Test",{"type":41,"tag":82,"props":1510,"children":1511},{"style":136},[1512],{"type":47,"value":159},{"type":41,"tag":82,"props":1514,"children":1515},{"style":136},[1516],{"type":47,"value":289},{"type":41,"tag":82,"props":1518,"children":1519},{"style":418},[1520],{"type":47,"value":524},{"type":41,"tag":82,"props":1522,"children":1523},{"style":136},[1524],{"type":47,"value":311},{"type":41,"tag":82,"props":1526,"children":1528},{"class":84,"line":1527},13,[1529,1533,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586],{"type":41,"tag":82,"props":1530,"children":1531},{"style":151},[1532],{"type":47,"value":463},{"type":41,"tag":82,"props":1534,"children":1535},{"style":262},[1536],{"type":47,"value":1537}," retrieved",{"type":41,"tag":82,"props":1539,"children":1540},{"style":136},[1541],{"type":47,"value":473},{"type":41,"tag":82,"props":1543,"children":1544},{"style":251},[1545],{"type":47,"value":478},{"type":41,"tag":82,"props":1547,"children":1548},{"style":367},[1549],{"type":47,"value":775},{"type":41,"tag":82,"props":1551,"children":1552},{"style":418},[1553],{"type":47,"value":375},{"type":41,"tag":82,"props":1555,"children":1556},{"style":136},[1557],{"type":47,"value":923},{"type":41,"tag":82,"props":1559,"children":1560},{"style":418},[1561],{"type":47,"value":928},{"type":41,"tag":82,"props":1563,"children":1564},{"style":136},[1565],{"type":47,"value":121},{"type":41,"tag":82,"props":1567,"children":1568},{"style":262},[1569],{"type":47,"value":1444},{"type":41,"tag":82,"props":1571,"children":1572},{"style":136},[1573],{"type":47,"value":514},{"type":41,"tag":82,"props":1575,"children":1576},{"style":262},[1577],{"type":47,"value":982},{"type":41,"tag":82,"props":1579,"children":1580},{"style":136},[1581],{"type":47,"value":289},{"type":41,"tag":82,"props":1583,"children":1584},{"style":418},[1585],{"type":47,"value":524},{"type":41,"tag":82,"props":1587,"children":1588},{"style":136},[1589],{"type":47,"value":311},{"type":41,"tag":82,"props":1591,"children":1593},{"class":84,"line":1592},14,[1594],{"type":41,"tag":82,"props":1595,"children":1596},{"style":418},[1597],{"type":47,"value":1598},"    \n",{"type":41,"tag":82,"props":1600,"children":1602},{"class":84,"line":1601},15,[1603,1607,1611,1616,1620,1625,1629,1633,1637,1641,1645,1649,1653,1657],{"type":41,"tag":82,"props":1604,"children":1605},{"style":367},[1606],{"type":47,"value":500},{"type":41,"tag":82,"props":1608,"children":1609},{"style":418},[1610],{"type":47,"value":375},{"type":41,"tag":82,"props":1612,"children":1613},{"style":262},[1614],{"type":47,"value":1615},"retrieved",{"type":41,"tag":82,"props":1617,"children":1618},{"style":136},[1619],{"type":47,"value":514},{"type":41,"tag":82,"props":1621,"children":1622},{"style":262},[1623],{"type":47,"value":1624},"email",{"type":41,"tag":82,"props":1626,"children":1627},{"style":418},[1628],{"type":47,"value":524},{"type":41,"tag":82,"props":1630,"children":1631},{"style":136},[1632],{"type":47,"value":514},{"type":41,"tag":82,"props":1634,"children":1635},{"style":367},[1636],{"type":47,"value":533},{"type":41,"tag":82,"props":1638,"children":1639},{"style":418},[1640],{"type":47,"value":375},{"type":41,"tag":82,"props":1642,"children":1643},{"style":136},[1644],{"type":47,"value":159},{"type":41,"tag":82,"props":1646,"children":1647},{"style":95},[1648],{"type":47,"value":1482},{"type":41,"tag":82,"props":1650,"children":1651},{"style":136},[1652],{"type":47,"value":159},{"type":41,"tag":82,"props":1654,"children":1655},{"style":418},[1656],{"type":47,"value":524},{"type":41,"tag":82,"props":1658,"children":1659},{"style":136},[1660],{"type":47,"value":311},{"type":41,"tag":82,"props":1662,"children":1664},{"class":84,"line":1663},16,[1665,1669,1673],{"type":41,"tag":82,"props":1666,"children":1667},{"style":136},[1668],{"type":47,"value":567},{"type":41,"tag":82,"props":1670,"children":1671},{"style":418},[1672],{"type":47,"value":524},{"type":41,"tag":82,"props":1674,"children":1675},{"style":136},[1676],{"type":47,"value":311},{"type":41,"tag":82,"props":1678,"children":1680},{"class":84,"line":1679},17,[1681,1685,1689],{"type":41,"tag":82,"props":1682,"children":1683},{"style":136},[1684],{"type":47,"value":584},{"type":41,"tag":82,"props":1686,"children":1687},{"style":262},[1688],{"type":47,"value":524},{"type":41,"tag":82,"props":1690,"children":1691},{"style":136},[1692],{"type":47,"value":311},{"type":41,"tag":63,"props":1694,"children":1696},{"id":1695},"test-service-to-service-calls",[1697],{"type":47,"value":1698},"Test Service-to-Service Calls",{"type":41,"tag":70,"props":1700,"children":1702},{"className":231,"code":1701,"language":15,"meta":75,"style":75},"\u002F\u002F order.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { createOrder } from \".\u002Forder\";\n\ndescribe(\"order service\", () => {\n  it(\"creates an order and notifies user service\", async () => {\n    \u002F\u002F Service calls work normally in tests\n    const order = await createOrder({\n      userId: \"user-123\",\n      items: [{ productId: \"prod-1\", quantity: 2 }],\n    });\n    \n    expect(order.id).toBeDefined();\n    expect(order.status).toBe(\"pending\");\n  });\n});\n",[1703],{"type":41,"tag":78,"props":1704,"children":1705},{"__ignoreMap":75},[1706,1714,1769,1810,1817,1857,1901,1909,1941,1971,2046,2062,2069,2113,2174,2189],{"type":41,"tag":82,"props":1707,"children":1708},{"class":84,"line":85},[1709],{"type":41,"tag":82,"props":1710,"children":1711},{"style":242},[1712],{"type":47,"value":1713},"\u002F\u002F order.test.ts\n",{"type":41,"tag":82,"props":1715,"children":1716},{"class":84,"line":142},[1717,1721,1725,1729,1733,1737,1741,1745,1749,1753,1757,1761,1765],{"type":41,"tag":82,"props":1718,"children":1719},{"style":251},[1720],{"type":47,"value":254},{"type":41,"tag":82,"props":1722,"children":1723},{"style":136},[1724],{"type":47,"value":259},{"type":41,"tag":82,"props":1726,"children":1727},{"style":262},[1728],{"type":47,"value":265},{"type":41,"tag":82,"props":1730,"children":1731},{"style":136},[1732],{"type":47,"value":270},{"type":41,"tag":82,"props":1734,"children":1735},{"style":262},[1736],{"type":47,"value":275},{"type":41,"tag":82,"props":1738,"children":1739},{"style":136},[1740],{"type":47,"value":270},{"type":41,"tag":82,"props":1742,"children":1743},{"style":262},[1744],{"type":47,"value":284},{"type":41,"tag":82,"props":1746,"children":1747},{"style":136},[1748],{"type":47,"value":289},{"type":41,"tag":82,"props":1750,"children":1751},{"style":251},[1752],{"type":47,"value":294},{"type":41,"tag":82,"props":1754,"children":1755},{"style":136},[1756],{"type":47,"value":195},{"type":41,"tag":82,"props":1758,"children":1759},{"style":95},[1760],{"type":47,"value":200},{"type":41,"tag":82,"props":1762,"children":1763},{"style":136},[1764],{"type":47,"value":159},{"type":41,"tag":82,"props":1766,"children":1767},{"style":136},[1768],{"type":47,"value":311},{"type":41,"tag":82,"props":1770,"children":1771},{"class":84,"line":171},[1772,1776,1780,1785,1789,1793,1797,1802,1806],{"type":41,"tag":82,"props":1773,"children":1774},{"style":251},[1775],{"type":47,"value":254},{"type":41,"tag":82,"props":1777,"children":1778},{"style":136},[1779],{"type":47,"value":259},{"type":41,"tag":82,"props":1781,"children":1782},{"style":262},[1783],{"type":47,"value":1784}," createOrder",{"type":41,"tag":82,"props":1786,"children":1787},{"style":136},[1788],{"type":47,"value":289},{"type":41,"tag":82,"props":1790,"children":1791},{"style":251},[1792],{"type":47,"value":294},{"type":41,"tag":82,"props":1794,"children":1795},{"style":136},[1796],{"type":47,"value":195},{"type":41,"tag":82,"props":1798,"children":1799},{"style":95},[1800],{"type":47,"value":1801},".\u002Forder",{"type":41,"tag":82,"props":1803,"children":1804},{"style":136},[1805],{"type":47,"value":159},{"type":41,"tag":82,"props":1807,"children":1808},{"style":136},[1809],{"type":47,"value":311},{"type":41,"tag":82,"props":1811,"children":1812},{"class":84,"line":208},[1813],{"type":41,"tag":82,"props":1814,"children":1815},{"emptyLinePlaceholder":358},[1816],{"type":47,"value":361},{"type":41,"tag":82,"props":1818,"children":1819},{"class":84,"line":25},[1820,1824,1828,1832,1837,1841,1845,1849,1853],{"type":41,"tag":82,"props":1821,"children":1822},{"style":367},[1823],{"type":47,"value":370},{"type":41,"tag":82,"props":1825,"children":1826},{"style":262},[1827],{"type":47,"value":375},{"type":41,"tag":82,"props":1829,"children":1830},{"style":136},[1831],{"type":47,"value":159},{"type":41,"tag":82,"props":1833,"children":1834},{"style":95},[1835],{"type":47,"value":1836},"order service",{"type":41,"tag":82,"props":1838,"children":1839},{"style":136},[1840],{"type":47,"value":159},{"type":41,"tag":82,"props":1842,"children":1843},{"style":136},[1844],{"type":47,"value":270},{"type":41,"tag":82,"props":1846,"children":1847},{"style":136},[1848],{"type":47,"value":397},{"type":41,"tag":82,"props":1850,"children":1851},{"style":151},[1852],{"type":47,"value":402},{"type":41,"tag":82,"props":1854,"children":1855},{"style":136},[1856],{"type":47,"value":168},{"type":41,"tag":82,"props":1858,"children":1859},{"class":84,"line":409},[1860,1864,1868,1872,1877,1881,1885,1889,1893,1897],{"type":41,"tag":82,"props":1861,"children":1862},{"style":367},[1863],{"type":47,"value":415},{"type":41,"tag":82,"props":1865,"children":1866},{"style":418},[1867],{"type":47,"value":375},{"type":41,"tag":82,"props":1869,"children":1870},{"style":136},[1871],{"type":47,"value":159},{"type":41,"tag":82,"props":1873,"children":1874},{"style":95},[1875],{"type":47,"value":1876},"creates an order and notifies user service",{"type":41,"tag":82,"props":1878,"children":1879},{"style":136},[1880],{"type":47,"value":159},{"type":41,"tag":82,"props":1882,"children":1883},{"style":136},[1884],{"type":47,"value":270},{"type":41,"tag":82,"props":1886,"children":1887},{"style":151},[1888],{"type":47,"value":442},{"type":41,"tag":82,"props":1890,"children":1891},{"style":136},[1892],{"type":47,"value":397},{"type":41,"tag":82,"props":1894,"children":1895},{"style":151},[1896],{"type":47,"value":402},{"type":41,"tag":82,"props":1898,"children":1899},{"style":136},[1900],{"type":47,"value":168},{"type":41,"tag":82,"props":1902,"children":1903},{"class":84,"line":457},[1904],{"type":41,"tag":82,"props":1905,"children":1906},{"style":242},[1907],{"type":47,"value":1908},"    \u002F\u002F Service calls work normally in tests\n",{"type":41,"tag":82,"props":1910,"children":1911},{"class":84,"line":494},[1912,1916,1921,1925,1929,1933,1937],{"type":41,"tag":82,"props":1913,"children":1914},{"style":151},[1915],{"type":47,"value":463},{"type":41,"tag":82,"props":1917,"children":1918},{"style":262},[1919],{"type":47,"value":1920}," order",{"type":41,"tag":82,"props":1922,"children":1923},{"style":136},[1924],{"type":47,"value":473},{"type":41,"tag":82,"props":1926,"children":1927},{"style":251},[1928],{"type":47,"value":478},{"type":41,"tag":82,"props":1930,"children":1931},{"style":367},[1932],{"type":47,"value":1784},{"type":41,"tag":82,"props":1934,"children":1935},{"style":418},[1936],{"type":47,"value":375},{"type":41,"tag":82,"props":1938,"children":1939},{"style":136},[1940],{"type":47,"value":139},{"type":41,"tag":82,"props":1942,"children":1943},{"class":84,"line":561},[1944,1949,1953,1957,1962,1966],{"type":41,"tag":82,"props":1945,"children":1946},{"style":418},[1947],{"type":47,"value":1948},"      userId",{"type":41,"tag":82,"props":1950,"children":1951},{"style":136},[1952],{"type":47,"value":121},{"type":41,"tag":82,"props":1954,"children":1955},{"style":136},[1956],{"type":47,"value":195},{"type":41,"tag":82,"props":1958,"children":1959},{"style":95},[1960],{"type":47,"value":1961},"user-123",{"type":41,"tag":82,"props":1963,"children":1964},{"style":136},[1965],{"type":47,"value":159},{"type":41,"tag":82,"props":1967,"children":1968},{"style":136},[1969],{"type":47,"value":1970},",\n",{"type":41,"tag":82,"props":1972,"children":1973},{"class":84,"line":578},[1974,1979,1983,1988,1992,1997,2001,2005,2010,2014,2018,2023,2027,2033,2037,2042],{"type":41,"tag":82,"props":1975,"children":1976},{"style":418},[1977],{"type":47,"value":1978},"      items",{"type":41,"tag":82,"props":1980,"children":1981},{"style":136},[1982],{"type":47,"value":121},{"type":41,"tag":82,"props":1984,"children":1985},{"style":418},[1986],{"type":47,"value":1987}," [",{"type":41,"tag":82,"props":1989,"children":1990},{"style":136},[1991],{"type":47,"value":923},{"type":41,"tag":82,"props":1993,"children":1994},{"style":418},[1995],{"type":47,"value":1996}," productId",{"type":41,"tag":82,"props":1998,"children":1999},{"style":136},[2000],{"type":47,"value":121},{"type":41,"tag":82,"props":2002,"children":2003},{"style":136},[2004],{"type":47,"value":195},{"type":41,"tag":82,"props":2006,"children":2007},{"style":95},[2008],{"type":47,"value":2009},"prod-1",{"type":41,"tag":82,"props":2011,"children":2012},{"style":136},[2013],{"type":47,"value":159},{"type":41,"tag":82,"props":2015,"children":2016},{"style":136},[2017],{"type":47,"value":270},{"type":41,"tag":82,"props":2019,"children":2020},{"style":418},[2021],{"type":47,"value":2022}," quantity",{"type":41,"tag":82,"props":2024,"children":2025},{"style":136},[2026],{"type":47,"value":121},{"type":41,"tag":82,"props":2028,"children":2030},{"style":2029},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2031],{"type":47,"value":2032}," 2",{"type":41,"tag":82,"props":2034,"children":2035},{"style":136},[2036],{"type":47,"value":289},{"type":41,"tag":82,"props":2038,"children":2039},{"style":418},[2040],{"type":47,"value":2041},"]",{"type":41,"tag":82,"props":2043,"children":2044},{"style":136},[2045],{"type":47,"value":1970},{"type":41,"tag":82,"props":2047,"children":2048},{"class":84,"line":1081},[2049,2054,2058],{"type":41,"tag":82,"props":2050,"children":2051},{"style":136},[2052],{"type":47,"value":2053},"    }",{"type":41,"tag":82,"props":2055,"children":2056},{"style":418},[2057],{"type":47,"value":524},{"type":41,"tag":82,"props":2059,"children":2060},{"style":136},[2061],{"type":47,"value":311},{"type":41,"tag":82,"props":2063,"children":2064},{"class":84,"line":1434},[2065],{"type":41,"tag":82,"props":2066,"children":2067},{"style":418},[2068],{"type":47,"value":1598},{"type":41,"tag":82,"props":2070,"children":2071},{"class":84,"line":1527},[2072,2076,2080,2085,2089,2093,2097,2101,2105,2109],{"type":41,"tag":82,"props":2073,"children":2074},{"style":367},[2075],{"type":47,"value":500},{"type":41,"tag":82,"props":2077,"children":2078},{"style":418},[2079],{"type":47,"value":375},{"type":41,"tag":82,"props":2081,"children":2082},{"style":262},[2083],{"type":47,"value":2084},"order",{"type":41,"tag":82,"props":2086,"children":2087},{"style":136},[2088],{"type":47,"value":514},{"type":41,"tag":82,"props":2090,"children":2091},{"style":262},[2092],{"type":47,"value":982},{"type":41,"tag":82,"props":2094,"children":2095},{"style":418},[2096],{"type":47,"value":524},{"type":41,"tag":82,"props":2098,"children":2099},{"style":136},[2100],{"type":47,"value":514},{"type":41,"tag":82,"props":2102,"children":2103},{"style":367},[2104],{"type":47,"value":1055},{"type":41,"tag":82,"props":2106,"children":2107},{"style":418},[2108],{"type":47,"value":487},{"type":41,"tag":82,"props":2110,"children":2111},{"style":136},[2112],{"type":47,"value":311},{"type":41,"tag":82,"props":2114,"children":2115},{"class":84,"line":1592},[2116,2120,2124,2128,2132,2137,2141,2145,2149,2153,2157,2162,2166,2170],{"type":41,"tag":82,"props":2117,"children":2118},{"style":367},[2119],{"type":47,"value":500},{"type":41,"tag":82,"props":2121,"children":2122},{"style":418},[2123],{"type":47,"value":375},{"type":41,"tag":82,"props":2125,"children":2126},{"style":262},[2127],{"type":47,"value":2084},{"type":41,"tag":82,"props":2129,"children":2130},{"style":136},[2131],{"type":47,"value":514},{"type":41,"tag":82,"props":2133,"children":2134},{"style":262},[2135],{"type":47,"value":2136},"status",{"type":41,"tag":82,"props":2138,"children":2139},{"style":418},[2140],{"type":47,"value":524},{"type":41,"tag":82,"props":2142,"children":2143},{"style":136},[2144],{"type":47,"value":514},{"type":41,"tag":82,"props":2146,"children":2147},{"style":367},[2148],{"type":47,"value":533},{"type":41,"tag":82,"props":2150,"children":2151},{"style":418},[2152],{"type":47,"value":375},{"type":41,"tag":82,"props":2154,"children":2155},{"style":136},[2156],{"type":47,"value":159},{"type":41,"tag":82,"props":2158,"children":2159},{"style":95},[2160],{"type":47,"value":2161},"pending",{"type":41,"tag":82,"props":2163,"children":2164},{"style":136},[2165],{"type":47,"value":159},{"type":41,"tag":82,"props":2167,"children":2168},{"style":418},[2169],{"type":47,"value":524},{"type":41,"tag":82,"props":2171,"children":2172},{"style":136},[2173],{"type":47,"value":311},{"type":41,"tag":82,"props":2175,"children":2176},{"class":84,"line":1601},[2177,2181,2185],{"type":41,"tag":82,"props":2178,"children":2179},{"style":136},[2180],{"type":47,"value":567},{"type":41,"tag":82,"props":2182,"children":2183},{"style":418},[2184],{"type":47,"value":524},{"type":41,"tag":82,"props":2186,"children":2187},{"style":136},[2188],{"type":47,"value":311},{"type":41,"tag":82,"props":2190,"children":2191},{"class":84,"line":1663},[2192,2196,2200],{"type":41,"tag":82,"props":2193,"children":2194},{"style":136},[2195],{"type":47,"value":584},{"type":41,"tag":82,"props":2197,"children":2198},{"style":262},[2199],{"type":47,"value":524},{"type":41,"tag":82,"props":2201,"children":2202},{"style":136},[2203],{"type":47,"value":311},{"type":41,"tag":63,"props":2205,"children":2207},{"id":2206},"test-error-cases",[2208],{"type":47,"value":2209},"Test Error Cases",{"type":41,"tag":70,"props":2211,"children":2213},{"className":231,"code":2212,"language":15,"meta":75,"style":75},"import { describe, it, expect } from \"vitest\";\nimport { getUser } from \".\u002Fapi\";\nimport { APIError } from \"encore.dev\u002Fapi\";\n\ndescribe(\"error handling\", () => {\n  it(\"throws NotFound for missing user\", async () => {\n    await expect(getUser({ id: \"nonexistent\" }))\n      .rejects\n      .toThrow(\"user not found\");\n  });\n\n  it(\"throws with correct error code\", async () => {\n    try {\n      await getUser({ id: \"nonexistent\" });\n    } catch (error) {\n      expect(error).toBeInstanceOf(APIError);\n      expect((error as APIError).code).toBe(\"not_found\");\n    }\n  });\n});\n",[2214],{"type":41,"tag":78,"props":2215,"children":2216},{"__ignoreMap":75},[2217,2272,2311,2352,2359,2399,2443,2501,2514,2551,2566,2573,2617,2629,2681,2712,2758,2832,2841,2857],{"type":41,"tag":82,"props":2218,"children":2219},{"class":84,"line":85},[2220,2224,2228,2232,2236,2240,2244,2248,2252,2256,2260,2264,2268],{"type":41,"tag":82,"props":2221,"children":2222},{"style":251},[2223],{"type":47,"value":254},{"type":41,"tag":82,"props":2225,"children":2226},{"style":136},[2227],{"type":47,"value":259},{"type":41,"tag":82,"props":2229,"children":2230},{"style":262},[2231],{"type":47,"value":265},{"type":41,"tag":82,"props":2233,"children":2234},{"style":136},[2235],{"type":47,"value":270},{"type":41,"tag":82,"props":2237,"children":2238},{"style":262},[2239],{"type":47,"value":275},{"type":41,"tag":82,"props":2241,"children":2242},{"style":136},[2243],{"type":47,"value":270},{"type":41,"tag":82,"props":2245,"children":2246},{"style":262},[2247],{"type":47,"value":284},{"type":41,"tag":82,"props":2249,"children":2250},{"style":136},[2251],{"type":47,"value":289},{"type":41,"tag":82,"props":2253,"children":2254},{"style":251},[2255],{"type":47,"value":294},{"type":41,"tag":82,"props":2257,"children":2258},{"style":136},[2259],{"type":47,"value":195},{"type":41,"tag":82,"props":2261,"children":2262},{"style":95},[2263],{"type":47,"value":200},{"type":41,"tag":82,"props":2265,"children":2266},{"style":136},[2267],{"type":47,"value":159},{"type":41,"tag":82,"props":2269,"children":2270},{"style":136},[2271],{"type":47,"value":311},{"type":41,"tag":82,"props":2273,"children":2274},{"class":84,"line":142},[2275,2279,2283,2287,2291,2295,2299,2303,2307],{"type":41,"tag":82,"props":2276,"children":2277},{"style":251},[2278],{"type":47,"value":254},{"type":41,"tag":82,"props":2280,"children":2281},{"style":136},[2282],{"type":47,"value":259},{"type":41,"tag":82,"props":2284,"children":2285},{"style":262},[2286],{"type":47,"value":775},{"type":41,"tag":82,"props":2288,"children":2289},{"style":136},[2290],{"type":47,"value":289},{"type":41,"tag":82,"props":2292,"children":2293},{"style":251},[2294],{"type":47,"value":294},{"type":41,"tag":82,"props":2296,"children":2297},{"style":136},[2298],{"type":47,"value":195},{"type":41,"tag":82,"props":2300,"children":2301},{"style":95},[2302],{"type":47,"value":344},{"type":41,"tag":82,"props":2304,"children":2305},{"style":136},[2306],{"type":47,"value":159},{"type":41,"tag":82,"props":2308,"children":2309},{"style":136},[2310],{"type":47,"value":311},{"type":41,"tag":82,"props":2312,"children":2313},{"class":84,"line":171},[2314,2318,2322,2327,2331,2335,2339,2344,2348],{"type":41,"tag":82,"props":2315,"children":2316},{"style":251},[2317],{"type":47,"value":254},{"type":41,"tag":82,"props":2319,"children":2320},{"style":136},[2321],{"type":47,"value":259},{"type":41,"tag":82,"props":2323,"children":2324},{"style":262},[2325],{"type":47,"value":2326}," APIError",{"type":41,"tag":82,"props":2328,"children":2329},{"style":136},[2330],{"type":47,"value":289},{"type":41,"tag":82,"props":2332,"children":2333},{"style":251},[2334],{"type":47,"value":294},{"type":41,"tag":82,"props":2336,"children":2337},{"style":136},[2338],{"type":47,"value":195},{"type":41,"tag":82,"props":2340,"children":2341},{"style":95},[2342],{"type":47,"value":2343},"encore.dev\u002Fapi",{"type":41,"tag":82,"props":2345,"children":2346},{"style":136},[2347],{"type":47,"value":159},{"type":41,"tag":82,"props":2349,"children":2350},{"style":136},[2351],{"type":47,"value":311},{"type":41,"tag":82,"props":2353,"children":2354},{"class":84,"line":208},[2355],{"type":41,"tag":82,"props":2356,"children":2357},{"emptyLinePlaceholder":358},[2358],{"type":47,"value":361},{"type":41,"tag":82,"props":2360,"children":2361},{"class":84,"line":25},[2362,2366,2370,2374,2379,2383,2387,2391,2395],{"type":41,"tag":82,"props":2363,"children":2364},{"style":367},[2365],{"type":47,"value":370},{"type":41,"tag":82,"props":2367,"children":2368},{"style":262},[2369],{"type":47,"value":375},{"type":41,"tag":82,"props":2371,"children":2372},{"style":136},[2373],{"type":47,"value":159},{"type":41,"tag":82,"props":2375,"children":2376},{"style":95},[2377],{"type":47,"value":2378},"error handling",{"type":41,"tag":82,"props":2380,"children":2381},{"style":136},[2382],{"type":47,"value":159},{"type":41,"tag":82,"props":2384,"children":2385},{"style":136},[2386],{"type":47,"value":270},{"type":41,"tag":82,"props":2388,"children":2389},{"style":136},[2390],{"type":47,"value":397},{"type":41,"tag":82,"props":2392,"children":2393},{"style":151},[2394],{"type":47,"value":402},{"type":41,"tag":82,"props":2396,"children":2397},{"style":136},[2398],{"type":47,"value":168},{"type":41,"tag":82,"props":2400,"children":2401},{"class":84,"line":409},[2402,2406,2410,2414,2419,2423,2427,2431,2435,2439],{"type":41,"tag":82,"props":2403,"children":2404},{"style":367},[2405],{"type":47,"value":415},{"type":41,"tag":82,"props":2407,"children":2408},{"style":418},[2409],{"type":47,"value":375},{"type":41,"tag":82,"props":2411,"children":2412},{"style":136},[2413],{"type":47,"value":159},{"type":41,"tag":82,"props":2415,"children":2416},{"style":95},[2417],{"type":47,"value":2418},"throws NotFound for missing user",{"type":41,"tag":82,"props":2420,"children":2421},{"style":136},[2422],{"type":47,"value":159},{"type":41,"tag":82,"props":2424,"children":2425},{"style":136},[2426],{"type":47,"value":270},{"type":41,"tag":82,"props":2428,"children":2429},{"style":151},[2430],{"type":47,"value":442},{"type":41,"tag":82,"props":2432,"children":2433},{"style":136},[2434],{"type":47,"value":397},{"type":41,"tag":82,"props":2436,"children":2437},{"style":151},[2438],{"type":47,"value":402},{"type":41,"tag":82,"props":2440,"children":2441},{"style":136},[2442],{"type":47,"value":168},{"type":41,"tag":82,"props":2444,"children":2445},{"class":84,"line":457},[2446,2450,2454,2458,2463,2467,2471,2475,2479,2483,2488,2492,2496],{"type":41,"tag":82,"props":2447,"children":2448},{"style":251},[2449],{"type":47,"value":1334},{"type":41,"tag":82,"props":2451,"children":2452},{"style":367},[2453],{"type":47,"value":284},{"type":41,"tag":82,"props":2455,"children":2456},{"style":418},[2457],{"type":47,"value":375},{"type":41,"tag":82,"props":2459,"children":2460},{"style":367},[2461],{"type":47,"value":2462},"getUser",{"type":41,"tag":82,"props":2464,"children":2465},{"style":418},[2466],{"type":47,"value":375},{"type":41,"tag":82,"props":2468,"children":2469},{"style":136},[2470],{"type":47,"value":923},{"type":41,"tag":82,"props":2472,"children":2473},{"style":418},[2474],{"type":47,"value":928},{"type":41,"tag":82,"props":2476,"children":2477},{"style":136},[2478],{"type":47,"value":121},{"type":41,"tag":82,"props":2480,"children":2481},{"style":136},[2482],{"type":47,"value":195},{"type":41,"tag":82,"props":2484,"children":2485},{"style":95},[2486],{"type":47,"value":2487},"nonexistent",{"type":41,"tag":82,"props":2489,"children":2490},{"style":136},[2491],{"type":47,"value":159},{"type":41,"tag":82,"props":2493,"children":2494},{"style":136},[2495],{"type":47,"value":289},{"type":41,"tag":82,"props":2497,"children":2498},{"style":418},[2499],{"type":47,"value":2500},"))\n",{"type":41,"tag":82,"props":2502,"children":2503},{"class":84,"line":494},[2504,2509],{"type":41,"tag":82,"props":2505,"children":2506},{"style":136},[2507],{"type":47,"value":2508},"      .",{"type":41,"tag":82,"props":2510,"children":2511},{"style":262},[2512],{"type":47,"value":2513},"rejects\n",{"type":41,"tag":82,"props":2515,"children":2516},{"class":84,"line":561},[2517,2521,2526,2530,2534,2539,2543,2547],{"type":41,"tag":82,"props":2518,"children":2519},{"style":136},[2520],{"type":47,"value":2508},{"type":41,"tag":82,"props":2522,"children":2523},{"style":367},[2524],{"type":47,"value":2525},"toThrow",{"type":41,"tag":82,"props":2527,"children":2528},{"style":418},[2529],{"type":47,"value":375},{"type":41,"tag":82,"props":2531,"children":2532},{"style":136},[2533],{"type":47,"value":159},{"type":41,"tag":82,"props":2535,"children":2536},{"style":95},[2537],{"type":47,"value":2538},"user not found",{"type":41,"tag":82,"props":2540,"children":2541},{"style":136},[2542],{"type":47,"value":159},{"type":41,"tag":82,"props":2544,"children":2545},{"style":418},[2546],{"type":47,"value":524},{"type":41,"tag":82,"props":2548,"children":2549},{"style":136},[2550],{"type":47,"value":311},{"type":41,"tag":82,"props":2552,"children":2553},{"class":84,"line":578},[2554,2558,2562],{"type":41,"tag":82,"props":2555,"children":2556},{"style":136},[2557],{"type":47,"value":567},{"type":41,"tag":82,"props":2559,"children":2560},{"style":418},[2561],{"type":47,"value":524},{"type":41,"tag":82,"props":2563,"children":2564},{"style":136},[2565],{"type":47,"value":311},{"type":41,"tag":82,"props":2567,"children":2568},{"class":84,"line":1081},[2569],{"type":41,"tag":82,"props":2570,"children":2571},{"emptyLinePlaceholder":358},[2572],{"type":47,"value":361},{"type":41,"tag":82,"props":2574,"children":2575},{"class":84,"line":1434},[2576,2580,2584,2588,2593,2597,2601,2605,2609,2613],{"type":41,"tag":82,"props":2577,"children":2578},{"style":367},[2579],{"type":47,"value":415},{"type":41,"tag":82,"props":2581,"children":2582},{"style":418},[2583],{"type":47,"value":375},{"type":41,"tag":82,"props":2585,"children":2586},{"style":136},[2587],{"type":47,"value":159},{"type":41,"tag":82,"props":2589,"children":2590},{"style":95},[2591],{"type":47,"value":2592},"throws with correct error code",{"type":41,"tag":82,"props":2594,"children":2595},{"style":136},[2596],{"type":47,"value":159},{"type":41,"tag":82,"props":2598,"children":2599},{"style":136},[2600],{"type":47,"value":270},{"type":41,"tag":82,"props":2602,"children":2603},{"style":151},[2604],{"type":47,"value":442},{"type":41,"tag":82,"props":2606,"children":2607},{"style":136},[2608],{"type":47,"value":397},{"type":41,"tag":82,"props":2610,"children":2611},{"style":151},[2612],{"type":47,"value":402},{"type":41,"tag":82,"props":2614,"children":2615},{"style":136},[2616],{"type":47,"value":168},{"type":41,"tag":82,"props":2618,"children":2619},{"class":84,"line":1527},[2620,2625],{"type":41,"tag":82,"props":2621,"children":2622},{"style":251},[2623],{"type":47,"value":2624},"    try",{"type":41,"tag":82,"props":2626,"children":2627},{"style":136},[2628],{"type":47,"value":168},{"type":41,"tag":82,"props":2630,"children":2631},{"class":84,"line":1592},[2632,2637,2641,2645,2649,2653,2657,2661,2665,2669,2673,2677],{"type":41,"tag":82,"props":2633,"children":2634},{"style":251},[2635],{"type":47,"value":2636},"      await",{"type":41,"tag":82,"props":2638,"children":2639},{"style":367},[2640],{"type":47,"value":775},{"type":41,"tag":82,"props":2642,"children":2643},{"style":418},[2644],{"type":47,"value":375},{"type":41,"tag":82,"props":2646,"children":2647},{"style":136},[2648],{"type":47,"value":923},{"type":41,"tag":82,"props":2650,"children":2651},{"style":418},[2652],{"type":47,"value":928},{"type":41,"tag":82,"props":2654,"children":2655},{"style":136},[2656],{"type":47,"value":121},{"type":41,"tag":82,"props":2658,"children":2659},{"style":136},[2660],{"type":47,"value":195},{"type":41,"tag":82,"props":2662,"children":2663},{"style":95},[2664],{"type":47,"value":2487},{"type":41,"tag":82,"props":2666,"children":2667},{"style":136},[2668],{"type":47,"value":159},{"type":41,"tag":82,"props":2670,"children":2671},{"style":136},[2672],{"type":47,"value":289},{"type":41,"tag":82,"props":2674,"children":2675},{"style":418},[2676],{"type":47,"value":524},{"type":41,"tag":82,"props":2678,"children":2679},{"style":136},[2680],{"type":47,"value":311},{"type":41,"tag":82,"props":2682,"children":2683},{"class":84,"line":1601},[2684,2688,2693,2698,2703,2708],{"type":41,"tag":82,"props":2685,"children":2686},{"style":136},[2687],{"type":47,"value":2053},{"type":41,"tag":82,"props":2689,"children":2690},{"style":251},[2691],{"type":47,"value":2692}," catch",{"type":41,"tag":82,"props":2694,"children":2695},{"style":418},[2696],{"type":47,"value":2697}," (",{"type":41,"tag":82,"props":2699,"children":2700},{"style":262},[2701],{"type":47,"value":2702},"error",{"type":41,"tag":82,"props":2704,"children":2705},{"style":418},[2706],{"type":47,"value":2707},") ",{"type":41,"tag":82,"props":2709,"children":2710},{"style":136},[2711],{"type":47,"value":139},{"type":41,"tag":82,"props":2713,"children":2714},{"class":84,"line":1663},[2715,2720,2724,2728,2732,2736,2741,2745,2750,2754],{"type":41,"tag":82,"props":2716,"children":2717},{"style":367},[2718],{"type":47,"value":2719},"      expect",{"type":41,"tag":82,"props":2721,"children":2722},{"style":418},[2723],{"type":47,"value":375},{"type":41,"tag":82,"props":2725,"children":2726},{"style":262},[2727],{"type":47,"value":2702},{"type":41,"tag":82,"props":2729,"children":2730},{"style":418},[2731],{"type":47,"value":524},{"type":41,"tag":82,"props":2733,"children":2734},{"style":136},[2735],{"type":47,"value":514},{"type":41,"tag":82,"props":2737,"children":2738},{"style":367},[2739],{"type":47,"value":2740},"toBeInstanceOf",{"type":41,"tag":82,"props":2742,"children":2743},{"style":418},[2744],{"type":47,"value":375},{"type":41,"tag":82,"props":2746,"children":2747},{"style":262},[2748],{"type":47,"value":2749},"APIError",{"type":41,"tag":82,"props":2751,"children":2752},{"style":418},[2753],{"type":47,"value":524},{"type":41,"tag":82,"props":2755,"children":2756},{"style":136},[2757],{"type":47,"value":311},{"type":41,"tag":82,"props":2759,"children":2760},{"class":84,"line":1679},[2761,2765,2770,2774,2779,2783,2787,2791,2795,2799,2803,2807,2811,2815,2820,2824,2828],{"type":41,"tag":82,"props":2762,"children":2763},{"style":367},[2764],{"type":47,"value":2719},{"type":41,"tag":82,"props":2766,"children":2767},{"style":418},[2768],{"type":47,"value":2769},"((",{"type":41,"tag":82,"props":2771,"children":2772},{"style":262},[2773],{"type":47,"value":2702},{"type":41,"tag":82,"props":2775,"children":2776},{"style":251},[2777],{"type":47,"value":2778}," as",{"type":41,"tag":82,"props":2780,"children":2781},{"style":89},[2782],{"type":47,"value":2326},{"type":41,"tag":82,"props":2784,"children":2785},{"style":418},[2786],{"type":47,"value":524},{"type":41,"tag":82,"props":2788,"children":2789},{"style":136},[2790],{"type":47,"value":514},{"type":41,"tag":82,"props":2792,"children":2793},{"style":262},[2794],{"type":47,"value":78},{"type":41,"tag":82,"props":2796,"children":2797},{"style":418},[2798],{"type":47,"value":524},{"type":41,"tag":82,"props":2800,"children":2801},{"style":136},[2802],{"type":47,"value":514},{"type":41,"tag":82,"props":2804,"children":2805},{"style":367},[2806],{"type":47,"value":533},{"type":41,"tag":82,"props":2808,"children":2809},{"style":418},[2810],{"type":47,"value":375},{"type":41,"tag":82,"props":2812,"children":2813},{"style":136},[2814],{"type":47,"value":159},{"type":41,"tag":82,"props":2816,"children":2817},{"style":95},[2818],{"type":47,"value":2819},"not_found",{"type":41,"tag":82,"props":2821,"children":2822},{"style":136},[2823],{"type":47,"value":159},{"type":41,"tag":82,"props":2825,"children":2826},{"style":418},[2827],{"type":47,"value":524},{"type":41,"tag":82,"props":2829,"children":2830},{"style":136},[2831],{"type":47,"value":311},{"type":41,"tag":82,"props":2833,"children":2835},{"class":84,"line":2834},18,[2836],{"type":41,"tag":82,"props":2837,"children":2838},{"style":136},[2839],{"type":47,"value":2840},"    }\n",{"type":41,"tag":82,"props":2842,"children":2844},{"class":84,"line":2843},19,[2845,2849,2853],{"type":41,"tag":82,"props":2846,"children":2847},{"style":136},[2848],{"type":47,"value":567},{"type":41,"tag":82,"props":2850,"children":2851},{"style":418},[2852],{"type":47,"value":524},{"type":41,"tag":82,"props":2854,"children":2855},{"style":136},[2856],{"type":47,"value":311},{"type":41,"tag":82,"props":2858,"children":2860},{"class":84,"line":2859},20,[2861,2865,2869],{"type":41,"tag":82,"props":2862,"children":2863},{"style":136},[2864],{"type":47,"value":584},{"type":41,"tag":82,"props":2866,"children":2867},{"style":262},[2868],{"type":47,"value":524},{"type":41,"tag":82,"props":2870,"children":2871},{"style":136},[2872],{"type":47,"value":311},{"type":41,"tag":63,"props":2874,"children":2876},{"id":2875},"test-pubsub",[2877],{"type":47,"value":2878},"Test Pub\u002FSub",{"type":41,"tag":70,"props":2880,"children":2882},{"className":231,"code":2881,"language":15,"meta":75,"style":75},"\u002F\u002F notifications.test.ts\nimport { describe, it, expect, vi } from \"vitest\";\nimport { orderCreated } from \".\u002Fevents\";\n\ndescribe(\"pub\u002Fsub\", () => {\n  it(\"publishes order created event\", async () => {\n    const messageId = await orderCreated.publish({\n      orderId: \"order-123\",\n      userId: \"user-456\",\n      total: 9999,\n    });\n    \n    expect(messageId).toBeDefined();\n  });\n});\n",[2883],{"type":41,"tag":78,"props":2884,"children":2885},{"__ignoreMap":75},[2886,2894,2958,2999,3006,3046,3090,3131,3160,3188,3209,3224,3231,3267,3282],{"type":41,"tag":82,"props":2887,"children":2888},{"class":84,"line":85},[2889],{"type":41,"tag":82,"props":2890,"children":2891},{"style":242},[2892],{"type":47,"value":2893},"\u002F\u002F notifications.test.ts\n",{"type":41,"tag":82,"props":2895,"children":2896},{"class":84,"line":142},[2897,2901,2905,2909,2913,2917,2921,2925,2929,2934,2938,2942,2946,2950,2954],{"type":41,"tag":82,"props":2898,"children":2899},{"style":251},[2900],{"type":47,"value":254},{"type":41,"tag":82,"props":2902,"children":2903},{"style":136},[2904],{"type":47,"value":259},{"type":41,"tag":82,"props":2906,"children":2907},{"style":262},[2908],{"type":47,"value":265},{"type":41,"tag":82,"props":2910,"children":2911},{"style":136},[2912],{"type":47,"value":270},{"type":41,"tag":82,"props":2914,"children":2915},{"style":262},[2916],{"type":47,"value":275},{"type":41,"tag":82,"props":2918,"children":2919},{"style":136},[2920],{"type":47,"value":270},{"type":41,"tag":82,"props":2922,"children":2923},{"style":262},[2924],{"type":47,"value":284},{"type":41,"tag":82,"props":2926,"children":2927},{"style":136},[2928],{"type":47,"value":270},{"type":41,"tag":82,"props":2930,"children":2931},{"style":262},[2932],{"type":47,"value":2933}," vi",{"type":41,"tag":82,"props":2935,"children":2936},{"style":136},[2937],{"type":47,"value":289},{"type":41,"tag":82,"props":2939,"children":2940},{"style":251},[2941],{"type":47,"value":294},{"type":41,"tag":82,"props":2943,"children":2944},{"style":136},[2945],{"type":47,"value":195},{"type":41,"tag":82,"props":2947,"children":2948},{"style":95},[2949],{"type":47,"value":200},{"type":41,"tag":82,"props":2951,"children":2952},{"style":136},[2953],{"type":47,"value":159},{"type":41,"tag":82,"props":2955,"children":2956},{"style":136},[2957],{"type":47,"value":311},{"type":41,"tag":82,"props":2959,"children":2960},{"class":84,"line":171},[2961,2965,2969,2974,2978,2982,2986,2991,2995],{"type":41,"tag":82,"props":2962,"children":2963},{"style":251},[2964],{"type":47,"value":254},{"type":41,"tag":82,"props":2966,"children":2967},{"style":136},[2968],{"type":47,"value":259},{"type":41,"tag":82,"props":2970,"children":2971},{"style":262},[2972],{"type":47,"value":2973}," orderCreated",{"type":41,"tag":82,"props":2975,"children":2976},{"style":136},[2977],{"type":47,"value":289},{"type":41,"tag":82,"props":2979,"children":2980},{"style":251},[2981],{"type":47,"value":294},{"type":41,"tag":82,"props":2983,"children":2984},{"style":136},[2985],{"type":47,"value":195},{"type":41,"tag":82,"props":2987,"children":2988},{"style":95},[2989],{"type":47,"value":2990},".\u002Fevents",{"type":41,"tag":82,"props":2992,"children":2993},{"style":136},[2994],{"type":47,"value":159},{"type":41,"tag":82,"props":2996,"children":2997},{"style":136},[2998],{"type":47,"value":311},{"type":41,"tag":82,"props":3000,"children":3001},{"class":84,"line":208},[3002],{"type":41,"tag":82,"props":3003,"children":3004},{"emptyLinePlaceholder":358},[3005],{"type":47,"value":361},{"type":41,"tag":82,"props":3007,"children":3008},{"class":84,"line":25},[3009,3013,3017,3021,3026,3030,3034,3038,3042],{"type":41,"tag":82,"props":3010,"children":3011},{"style":367},[3012],{"type":47,"value":370},{"type":41,"tag":82,"props":3014,"children":3015},{"style":262},[3016],{"type":47,"value":375},{"type":41,"tag":82,"props":3018,"children":3019},{"style":136},[3020],{"type":47,"value":159},{"type":41,"tag":82,"props":3022,"children":3023},{"style":95},[3024],{"type":47,"value":3025},"pub\u002Fsub",{"type":41,"tag":82,"props":3027,"children":3028},{"style":136},[3029],{"type":47,"value":159},{"type":41,"tag":82,"props":3031,"children":3032},{"style":136},[3033],{"type":47,"value":270},{"type":41,"tag":82,"props":3035,"children":3036},{"style":136},[3037],{"type":47,"value":397},{"type":41,"tag":82,"props":3039,"children":3040},{"style":151},[3041],{"type":47,"value":402},{"type":41,"tag":82,"props":3043,"children":3044},{"style":136},[3045],{"type":47,"value":168},{"type":41,"tag":82,"props":3047,"children":3048},{"class":84,"line":409},[3049,3053,3057,3061,3066,3070,3074,3078,3082,3086],{"type":41,"tag":82,"props":3050,"children":3051},{"style":367},[3052],{"type":47,"value":415},{"type":41,"tag":82,"props":3054,"children":3055},{"style":418},[3056],{"type":47,"value":375},{"type":41,"tag":82,"props":3058,"children":3059},{"style":136},[3060],{"type":47,"value":159},{"type":41,"tag":82,"props":3062,"children":3063},{"style":95},[3064],{"type":47,"value":3065},"publishes order created event",{"type":41,"tag":82,"props":3067,"children":3068},{"style":136},[3069],{"type":47,"value":159},{"type":41,"tag":82,"props":3071,"children":3072},{"style":136},[3073],{"type":47,"value":270},{"type":41,"tag":82,"props":3075,"children":3076},{"style":151},[3077],{"type":47,"value":442},{"type":41,"tag":82,"props":3079,"children":3080},{"style":136},[3081],{"type":47,"value":397},{"type":41,"tag":82,"props":3083,"children":3084},{"style":151},[3085],{"type":47,"value":402},{"type":41,"tag":82,"props":3087,"children":3088},{"style":136},[3089],{"type":47,"value":168},{"type":41,"tag":82,"props":3091,"children":3092},{"class":84,"line":457},[3093,3097,3102,3106,3110,3114,3118,3123,3127],{"type":41,"tag":82,"props":3094,"children":3095},{"style":151},[3096],{"type":47,"value":463},{"type":41,"tag":82,"props":3098,"children":3099},{"style":262},[3100],{"type":47,"value":3101}," messageId",{"type":41,"tag":82,"props":3103,"children":3104},{"style":136},[3105],{"type":47,"value":473},{"type":41,"tag":82,"props":3107,"children":3108},{"style":251},[3109],{"type":47,"value":478},{"type":41,"tag":82,"props":3111,"children":3112},{"style":262},[3113],{"type":47,"value":2973},{"type":41,"tag":82,"props":3115,"children":3116},{"style":136},[3117],{"type":47,"value":514},{"type":41,"tag":82,"props":3119,"children":3120},{"style":367},[3121],{"type":47,"value":3122},"publish",{"type":41,"tag":82,"props":3124,"children":3125},{"style":418},[3126],{"type":47,"value":375},{"type":41,"tag":82,"props":3128,"children":3129},{"style":136},[3130],{"type":47,"value":139},{"type":41,"tag":82,"props":3132,"children":3133},{"class":84,"line":494},[3134,3139,3143,3147,3152,3156],{"type":41,"tag":82,"props":3135,"children":3136},{"style":418},[3137],{"type":47,"value":3138},"      orderId",{"type":41,"tag":82,"props":3140,"children":3141},{"style":136},[3142],{"type":47,"value":121},{"type":41,"tag":82,"props":3144,"children":3145},{"style":136},[3146],{"type":47,"value":195},{"type":41,"tag":82,"props":3148,"children":3149},{"style":95},[3150],{"type":47,"value":3151},"order-123",{"type":41,"tag":82,"props":3153,"children":3154},{"style":136},[3155],{"type":47,"value":159},{"type":41,"tag":82,"props":3157,"children":3158},{"style":136},[3159],{"type":47,"value":1970},{"type":41,"tag":82,"props":3161,"children":3162},{"class":84,"line":561},[3163,3167,3171,3175,3180,3184],{"type":41,"tag":82,"props":3164,"children":3165},{"style":418},[3166],{"type":47,"value":1948},{"type":41,"tag":82,"props":3168,"children":3169},{"style":136},[3170],{"type":47,"value":121},{"type":41,"tag":82,"props":3172,"children":3173},{"style":136},[3174],{"type":47,"value":195},{"type":41,"tag":82,"props":3176,"children":3177},{"style":95},[3178],{"type":47,"value":3179},"user-456",{"type":41,"tag":82,"props":3181,"children":3182},{"style":136},[3183],{"type":47,"value":159},{"type":41,"tag":82,"props":3185,"children":3186},{"style":136},[3187],{"type":47,"value":1970},{"type":41,"tag":82,"props":3189,"children":3190},{"class":84,"line":578},[3191,3196,3200,3205],{"type":41,"tag":82,"props":3192,"children":3193},{"style":418},[3194],{"type":47,"value":3195},"      total",{"type":41,"tag":82,"props":3197,"children":3198},{"style":136},[3199],{"type":47,"value":121},{"type":41,"tag":82,"props":3201,"children":3202},{"style":2029},[3203],{"type":47,"value":3204}," 9999",{"type":41,"tag":82,"props":3206,"children":3207},{"style":136},[3208],{"type":47,"value":1970},{"type":41,"tag":82,"props":3210,"children":3211},{"class":84,"line":1081},[3212,3216,3220],{"type":41,"tag":82,"props":3213,"children":3214},{"style":136},[3215],{"type":47,"value":2053},{"type":41,"tag":82,"props":3217,"children":3218},{"style":418},[3219],{"type":47,"value":524},{"type":41,"tag":82,"props":3221,"children":3222},{"style":136},[3223],{"type":47,"value":311},{"type":41,"tag":82,"props":3225,"children":3226},{"class":84,"line":1434},[3227],{"type":41,"tag":82,"props":3228,"children":3229},{"style":418},[3230],{"type":47,"value":1598},{"type":41,"tag":82,"props":3232,"children":3233},{"class":84,"line":1527},[3234,3238,3242,3247,3251,3255,3259,3263],{"type":41,"tag":82,"props":3235,"children":3236},{"style":367},[3237],{"type":47,"value":500},{"type":41,"tag":82,"props":3239,"children":3240},{"style":418},[3241],{"type":47,"value":375},{"type":41,"tag":82,"props":3243,"children":3244},{"style":262},[3245],{"type":47,"value":3246},"messageId",{"type":41,"tag":82,"props":3248,"children":3249},{"style":418},[3250],{"type":47,"value":524},{"type":41,"tag":82,"props":3252,"children":3253},{"style":136},[3254],{"type":47,"value":514},{"type":41,"tag":82,"props":3256,"children":3257},{"style":367},[3258],{"type":47,"value":1055},{"type":41,"tag":82,"props":3260,"children":3261},{"style":418},[3262],{"type":47,"value":487},{"type":41,"tag":82,"props":3264,"children":3265},{"style":136},[3266],{"type":47,"value":311},{"type":41,"tag":82,"props":3268,"children":3269},{"class":84,"line":1592},[3270,3274,3278],{"type":41,"tag":82,"props":3271,"children":3272},{"style":136},[3273],{"type":47,"value":567},{"type":41,"tag":82,"props":3275,"children":3276},{"style":418},[3277],{"type":47,"value":524},{"type":41,"tag":82,"props":3279,"children":3280},{"style":136},[3281],{"type":47,"value":311},{"type":41,"tag":82,"props":3283,"children":3284},{"class":84,"line":1601},[3285,3289,3293],{"type":41,"tag":82,"props":3286,"children":3287},{"style":136},[3288],{"type":47,"value":584},{"type":41,"tag":82,"props":3290,"children":3291},{"style":262},[3292],{"type":47,"value":524},{"type":41,"tag":82,"props":3294,"children":3295},{"style":136},[3296],{"type":47,"value":311},{"type":41,"tag":63,"props":3298,"children":3300},{"id":3299},"test-cron-jobs",[3301],{"type":47,"value":3302},"Test Cron Jobs",{"type":41,"tag":57,"props":3304,"children":3305},{},[3306],{"type":47,"value":3307},"Test the underlying function, not the cron schedule:",{"type":41,"tag":70,"props":3309,"children":3311},{"className":231,"code":3310,"language":15,"meta":75,"style":75},"\u002F\u002F cleanup.test.ts\nimport { describe, it, expect } from \"vitest\";\nimport { cleanupExpiredSessions } from \".\u002Fcleanup\";\n\ndescribe(\"cleanup job\", () => {\n  it(\"removes expired sessions\", async () => {\n    \u002F\u002F Create some expired sessions first\n    await createExpiredSession();\n    \n    \u002F\u002F Call the endpoint directly\n    await cleanupExpiredSessions();\n    \n    \u002F\u002F Verify cleanup happened\n    const remaining = await countSessions();\n    expect(remaining).toBe(0);\n  });\n});\n",[3312],{"type":41,"tag":78,"props":3313,"children":3314},{"__ignoreMap":75},[3315,3323,3378,3419,3426,3466,3510,3518,3538,3545,3553,3572,3579,3587,3620,3665,3680],{"type":41,"tag":82,"props":3316,"children":3317},{"class":84,"line":85},[3318],{"type":41,"tag":82,"props":3319,"children":3320},{"style":242},[3321],{"type":47,"value":3322},"\u002F\u002F cleanup.test.ts\n",{"type":41,"tag":82,"props":3324,"children":3325},{"class":84,"line":142},[3326,3330,3334,3338,3342,3346,3350,3354,3358,3362,3366,3370,3374],{"type":41,"tag":82,"props":3327,"children":3328},{"style":251},[3329],{"type":47,"value":254},{"type":41,"tag":82,"props":3331,"children":3332},{"style":136},[3333],{"type":47,"value":259},{"type":41,"tag":82,"props":3335,"children":3336},{"style":262},[3337],{"type":47,"value":265},{"type":41,"tag":82,"props":3339,"children":3340},{"style":136},[3341],{"type":47,"value":270},{"type":41,"tag":82,"props":3343,"children":3344},{"style":262},[3345],{"type":47,"value":275},{"type":41,"tag":82,"props":3347,"children":3348},{"style":136},[3349],{"type":47,"value":270},{"type":41,"tag":82,"props":3351,"children":3352},{"style":262},[3353],{"type":47,"value":284},{"type":41,"tag":82,"props":3355,"children":3356},{"style":136},[3357],{"type":47,"value":289},{"type":41,"tag":82,"props":3359,"children":3360},{"style":251},[3361],{"type":47,"value":294},{"type":41,"tag":82,"props":3363,"children":3364},{"style":136},[3365],{"type":47,"value":195},{"type":41,"tag":82,"props":3367,"children":3368},{"style":95},[3369],{"type":47,"value":200},{"type":41,"tag":82,"props":3371,"children":3372},{"style":136},[3373],{"type":47,"value":159},{"type":41,"tag":82,"props":3375,"children":3376},{"style":136},[3377],{"type":47,"value":311},{"type":41,"tag":82,"props":3379,"children":3380},{"class":84,"line":171},[3381,3385,3389,3394,3398,3402,3406,3411,3415],{"type":41,"tag":82,"props":3382,"children":3383},{"style":251},[3384],{"type":47,"value":254},{"type":41,"tag":82,"props":3386,"children":3387},{"style":136},[3388],{"type":47,"value":259},{"type":41,"tag":82,"props":3390,"children":3391},{"style":262},[3392],{"type":47,"value":3393}," cleanupExpiredSessions",{"type":41,"tag":82,"props":3395,"children":3396},{"style":136},[3397],{"type":47,"value":289},{"type":41,"tag":82,"props":3399,"children":3400},{"style":251},[3401],{"type":47,"value":294},{"type":41,"tag":82,"props":3403,"children":3404},{"style":136},[3405],{"type":47,"value":195},{"type":41,"tag":82,"props":3407,"children":3408},{"style":95},[3409],{"type":47,"value":3410},".\u002Fcleanup",{"type":41,"tag":82,"props":3412,"children":3413},{"style":136},[3414],{"type":47,"value":159},{"type":41,"tag":82,"props":3416,"children":3417},{"style":136},[3418],{"type":47,"value":311},{"type":41,"tag":82,"props":3420,"children":3421},{"class":84,"line":208},[3422],{"type":41,"tag":82,"props":3423,"children":3424},{"emptyLinePlaceholder":358},[3425],{"type":47,"value":361},{"type":41,"tag":82,"props":3427,"children":3428},{"class":84,"line":25},[3429,3433,3437,3441,3446,3450,3454,3458,3462],{"type":41,"tag":82,"props":3430,"children":3431},{"style":367},[3432],{"type":47,"value":370},{"type":41,"tag":82,"props":3434,"children":3435},{"style":262},[3436],{"type":47,"value":375},{"type":41,"tag":82,"props":3438,"children":3439},{"style":136},[3440],{"type":47,"value":159},{"type":41,"tag":82,"props":3442,"children":3443},{"style":95},[3444],{"type":47,"value":3445},"cleanup job",{"type":41,"tag":82,"props":3447,"children":3448},{"style":136},[3449],{"type":47,"value":159},{"type":41,"tag":82,"props":3451,"children":3452},{"style":136},[3453],{"type":47,"value":270},{"type":41,"tag":82,"props":3455,"children":3456},{"style":136},[3457],{"type":47,"value":397},{"type":41,"tag":82,"props":3459,"children":3460},{"style":151},[3461],{"type":47,"value":402},{"type":41,"tag":82,"props":3463,"children":3464},{"style":136},[3465],{"type":47,"value":168},{"type":41,"tag":82,"props":3467,"children":3468},{"class":84,"line":409},[3469,3473,3477,3481,3486,3490,3494,3498,3502,3506],{"type":41,"tag":82,"props":3470,"children":3471},{"style":367},[3472],{"type":47,"value":415},{"type":41,"tag":82,"props":3474,"children":3475},{"style":418},[3476],{"type":47,"value":375},{"type":41,"tag":82,"props":3478,"children":3479},{"style":136},[3480],{"type":47,"value":159},{"type":41,"tag":82,"props":3482,"children":3483},{"style":95},[3484],{"type":47,"value":3485},"removes expired sessions",{"type":41,"tag":82,"props":3487,"children":3488},{"style":136},[3489],{"type":47,"value":159},{"type":41,"tag":82,"props":3491,"children":3492},{"style":136},[3493],{"type":47,"value":270},{"type":41,"tag":82,"props":3495,"children":3496},{"style":151},[3497],{"type":47,"value":442},{"type":41,"tag":82,"props":3499,"children":3500},{"style":136},[3501],{"type":47,"value":397},{"type":41,"tag":82,"props":3503,"children":3504},{"style":151},[3505],{"type":47,"value":402},{"type":41,"tag":82,"props":3507,"children":3508},{"style":136},[3509],{"type":47,"value":168},{"type":41,"tag":82,"props":3511,"children":3512},{"class":84,"line":457},[3513],{"type":41,"tag":82,"props":3514,"children":3515},{"style":242},[3516],{"type":47,"value":3517},"    \u002F\u002F Create some expired sessions first\n",{"type":41,"tag":82,"props":3519,"children":3520},{"class":84,"line":494},[3521,3525,3530,3534],{"type":41,"tag":82,"props":3522,"children":3523},{"style":251},[3524],{"type":47,"value":1334},{"type":41,"tag":82,"props":3526,"children":3527},{"style":367},[3528],{"type":47,"value":3529}," createExpiredSession",{"type":41,"tag":82,"props":3531,"children":3532},{"style":418},[3533],{"type":47,"value":487},{"type":41,"tag":82,"props":3535,"children":3536},{"style":136},[3537],{"type":47,"value":311},{"type":41,"tag":82,"props":3539,"children":3540},{"class":84,"line":561},[3541],{"type":41,"tag":82,"props":3542,"children":3543},{"style":418},[3544],{"type":47,"value":1598},{"type":41,"tag":82,"props":3546,"children":3547},{"class":84,"line":578},[3548],{"type":41,"tag":82,"props":3549,"children":3550},{"style":242},[3551],{"type":47,"value":3552},"    \u002F\u002F Call the endpoint directly\n",{"type":41,"tag":82,"props":3554,"children":3555},{"class":84,"line":1081},[3556,3560,3564,3568],{"type":41,"tag":82,"props":3557,"children":3558},{"style":251},[3559],{"type":47,"value":1334},{"type":41,"tag":82,"props":3561,"children":3562},{"style":367},[3563],{"type":47,"value":3393},{"type":41,"tag":82,"props":3565,"children":3566},{"style":418},[3567],{"type":47,"value":487},{"type":41,"tag":82,"props":3569,"children":3570},{"style":136},[3571],{"type":47,"value":311},{"type":41,"tag":82,"props":3573,"children":3574},{"class":84,"line":1434},[3575],{"type":41,"tag":82,"props":3576,"children":3577},{"style":418},[3578],{"type":47,"value":1598},{"type":41,"tag":82,"props":3580,"children":3581},{"class":84,"line":1527},[3582],{"type":41,"tag":82,"props":3583,"children":3584},{"style":242},[3585],{"type":47,"value":3586},"    \u002F\u002F Verify cleanup happened\n",{"type":41,"tag":82,"props":3588,"children":3589},{"class":84,"line":1592},[3590,3594,3599,3603,3607,3612,3616],{"type":41,"tag":82,"props":3591,"children":3592},{"style":151},[3593],{"type":47,"value":463},{"type":41,"tag":82,"props":3595,"children":3596},{"style":262},[3597],{"type":47,"value":3598}," remaining",{"type":41,"tag":82,"props":3600,"children":3601},{"style":136},[3602],{"type":47,"value":473},{"type":41,"tag":82,"props":3604,"children":3605},{"style":251},[3606],{"type":47,"value":478},{"type":41,"tag":82,"props":3608,"children":3609},{"style":367},[3610],{"type":47,"value":3611}," countSessions",{"type":41,"tag":82,"props":3613,"children":3614},{"style":418},[3615],{"type":47,"value":487},{"type":41,"tag":82,"props":3617,"children":3618},{"style":136},[3619],{"type":47,"value":311},{"type":41,"tag":82,"props":3621,"children":3622},{"class":84,"line":1601},[3623,3627,3631,3636,3640,3644,3648,3652,3657,3661],{"type":41,"tag":82,"props":3624,"children":3625},{"style":367},[3626],{"type":47,"value":500},{"type":41,"tag":82,"props":3628,"children":3629},{"style":418},[3630],{"type":47,"value":375},{"type":41,"tag":82,"props":3632,"children":3633},{"style":262},[3634],{"type":47,"value":3635},"remaining",{"type":41,"tag":82,"props":3637,"children":3638},{"style":418},[3639],{"type":47,"value":524},{"type":41,"tag":82,"props":3641,"children":3642},{"style":136},[3643],{"type":47,"value":514},{"type":41,"tag":82,"props":3645,"children":3646},{"style":367},[3647],{"type":47,"value":533},{"type":41,"tag":82,"props":3649,"children":3650},{"style":418},[3651],{"type":47,"value":375},{"type":41,"tag":82,"props":3653,"children":3654},{"style":2029},[3655],{"type":47,"value":3656},"0",{"type":41,"tag":82,"props":3658,"children":3659},{"style":418},[3660],{"type":47,"value":524},{"type":41,"tag":82,"props":3662,"children":3663},{"style":136},[3664],{"type":47,"value":311},{"type":41,"tag":82,"props":3666,"children":3667},{"class":84,"line":1663},[3668,3672,3676],{"type":41,"tag":82,"props":3669,"children":3670},{"style":136},[3671],{"type":47,"value":567},{"type":41,"tag":82,"props":3673,"children":3674},{"style":418},[3675],{"type":47,"value":524},{"type":41,"tag":82,"props":3677,"children":3678},{"style":136},[3679],{"type":47,"value":311},{"type":41,"tag":82,"props":3681,"children":3682},{"class":84,"line":1679},[3683,3687,3691],{"type":41,"tag":82,"props":3684,"children":3685},{"style":136},[3686],{"type":47,"value":584},{"type":41,"tag":82,"props":3688,"children":3689},{"style":262},[3690],{"type":47,"value":524},{"type":41,"tag":82,"props":3692,"children":3693},{"style":136},[3694],{"type":47,"value":311},{"type":41,"tag":63,"props":3696,"children":3698},{"id":3697},"mocking-external-services",[3699],{"type":47,"value":3700},"Mocking External Services",{"type":41,"tag":70,"props":3702,"children":3704},{"className":231,"code":3703,"language":15,"meta":75,"style":75},"import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { sendWelcomeEmail } from \".\u002Femail\";\n\n\u002F\u002F Mock external API\nvi.mock(\".\u002Fexternal-email-client\", () => ({\n  send: vi.fn().mockResolvedValue({ success: true }),\n}));\n\ndescribe(\"email service\", () => {\n  it(\"sends welcome email\", async () => {\n    const result = await sendWelcomeEmail({ userId: \"123\" });\n    expect(result.sent).toBe(true);\n  });\n});\n",[3705],{"type":41,"tag":78,"props":3706,"children":3707},{"__ignoreMap":75},[3708,3779,3820,3827,3835,3889,3962,3978,3985,4025,4069,4134,4188,4203],{"type":41,"tag":82,"props":3709,"children":3710},{"class":84,"line":85},[3711,3715,3719,3723,3727,3731,3735,3739,3743,3747,3751,3755,3759,3763,3767,3771,3775],{"type":41,"tag":82,"props":3712,"children":3713},{"style":251},[3714],{"type":47,"value":254},{"type":41,"tag":82,"props":3716,"children":3717},{"style":136},[3718],{"type":47,"value":259},{"type":41,"tag":82,"props":3720,"children":3721},{"style":262},[3722],{"type":47,"value":265},{"type":41,"tag":82,"props":3724,"children":3725},{"style":136},[3726],{"type":47,"value":270},{"type":41,"tag":82,"props":3728,"children":3729},{"style":262},[3730],{"type":47,"value":275},{"type":41,"tag":82,"props":3732,"children":3733},{"style":136},[3734],{"type":47,"value":270},{"type":41,"tag":82,"props":3736,"children":3737},{"style":262},[3738],{"type":47,"value":284},{"type":41,"tag":82,"props":3740,"children":3741},{"style":136},[3742],{"type":47,"value":270},{"type":41,"tag":82,"props":3744,"children":3745},{"style":262},[3746],{"type":47,"value":2933},{"type":41,"tag":82,"props":3748,"children":3749},{"style":136},[3750],{"type":47,"value":270},{"type":41,"tag":82,"props":3752,"children":3753},{"style":262},[3754],{"type":47,"value":1160},{"type":41,"tag":82,"props":3756,"children":3757},{"style":136},[3758],{"type":47,"value":289},{"type":41,"tag":82,"props":3760,"children":3761},{"style":251},[3762],{"type":47,"value":294},{"type":41,"tag":82,"props":3764,"children":3765},{"style":136},[3766],{"type":47,"value":195},{"type":41,"tag":82,"props":3768,"children":3769},{"style":95},[3770],{"type":47,"value":200},{"type":41,"tag":82,"props":3772,"children":3773},{"style":136},[3774],{"type":47,"value":159},{"type":41,"tag":82,"props":3776,"children":3777},{"style":136},[3778],{"type":47,"value":311},{"type":41,"tag":82,"props":3780,"children":3781},{"class":84,"line":142},[3782,3786,3790,3795,3799,3803,3807,3812,3816],{"type":41,"tag":82,"props":3783,"children":3784},{"style":251},[3785],{"type":47,"value":254},{"type":41,"tag":82,"props":3787,"children":3788},{"style":136},[3789],{"type":47,"value":259},{"type":41,"tag":82,"props":3791,"children":3792},{"style":262},[3793],{"type":47,"value":3794}," sendWelcomeEmail",{"type":41,"tag":82,"props":3796,"children":3797},{"style":136},[3798],{"type":47,"value":289},{"type":41,"tag":82,"props":3800,"children":3801},{"style":251},[3802],{"type":47,"value":294},{"type":41,"tag":82,"props":3804,"children":3805},{"style":136},[3806],{"type":47,"value":195},{"type":41,"tag":82,"props":3808,"children":3809},{"style":95},[3810],{"type":47,"value":3811},".\u002Femail",{"type":41,"tag":82,"props":3813,"children":3814},{"style":136},[3815],{"type":47,"value":159},{"type":41,"tag":82,"props":3817,"children":3818},{"style":136},[3819],{"type":47,"value":311},{"type":41,"tag":82,"props":3821,"children":3822},{"class":84,"line":171},[3823],{"type":41,"tag":82,"props":3824,"children":3825},{"emptyLinePlaceholder":358},[3826],{"type":47,"value":361},{"type":41,"tag":82,"props":3828,"children":3829},{"class":84,"line":208},[3830],{"type":41,"tag":82,"props":3831,"children":3832},{"style":242},[3833],{"type":47,"value":3834},"\u002F\u002F Mock external API\n",{"type":41,"tag":82,"props":3836,"children":3837},{"class":84,"line":25},[3838,3843,3847,3852,3856,3860,3865,3869,3873,3877,3881,3885],{"type":41,"tag":82,"props":3839,"children":3840},{"style":262},[3841],{"type":47,"value":3842},"vi",{"type":41,"tag":82,"props":3844,"children":3845},{"style":136},[3846],{"type":47,"value":514},{"type":41,"tag":82,"props":3848,"children":3849},{"style":367},[3850],{"type":47,"value":3851},"mock",{"type":41,"tag":82,"props":3853,"children":3854},{"style":262},[3855],{"type":47,"value":375},{"type":41,"tag":82,"props":3857,"children":3858},{"style":136},[3859],{"type":47,"value":159},{"type":41,"tag":82,"props":3861,"children":3862},{"style":95},[3863],{"type":47,"value":3864},".\u002Fexternal-email-client",{"type":41,"tag":82,"props":3866,"children":3867},{"style":136},[3868],{"type":47,"value":159},{"type":41,"tag":82,"props":3870,"children":3871},{"style":136},[3872],{"type":47,"value":270},{"type":41,"tag":82,"props":3874,"children":3875},{"style":136},[3876],{"type":47,"value":397},{"type":41,"tag":82,"props":3878,"children":3879},{"style":151},[3880],{"type":47,"value":402},{"type":41,"tag":82,"props":3882,"children":3883},{"style":262},[3884],{"type":47,"value":2697},{"type":41,"tag":82,"props":3886,"children":3887},{"style":136},[3888],{"type":47,"value":139},{"type":41,"tag":82,"props":3890,"children":3891},{"class":84,"line":409},[3892,3897,3901,3905,3909,3914,3918,3922,3927,3931,3935,3940,3944,3950,3954,3958],{"type":41,"tag":82,"props":3893,"children":3894},{"style":418},[3895],{"type":47,"value":3896},"  send",{"type":41,"tag":82,"props":3898,"children":3899},{"style":136},[3900],{"type":47,"value":121},{"type":41,"tag":82,"props":3902,"children":3903},{"style":262},[3904],{"type":47,"value":2933},{"type":41,"tag":82,"props":3906,"children":3907},{"style":136},[3908],{"type":47,"value":514},{"type":41,"tag":82,"props":3910,"children":3911},{"style":367},[3912],{"type":47,"value":3913},"fn",{"type":41,"tag":82,"props":3915,"children":3916},{"style":262},[3917],{"type":47,"value":487},{"type":41,"tag":82,"props":3919,"children":3920},{"style":136},[3921],{"type":47,"value":514},{"type":41,"tag":82,"props":3923,"children":3924},{"style":367},[3925],{"type":47,"value":3926},"mockResolvedValue",{"type":41,"tag":82,"props":3928,"children":3929},{"style":262},[3930],{"type":47,"value":375},{"type":41,"tag":82,"props":3932,"children":3933},{"style":136},[3934],{"type":47,"value":923},{"type":41,"tag":82,"props":3936,"children":3937},{"style":418},[3938],{"type":47,"value":3939}," success",{"type":41,"tag":82,"props":3941,"children":3942},{"style":136},[3943],{"type":47,"value":121},{"type":41,"tag":82,"props":3945,"children":3947},{"style":3946},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[3948],{"type":47,"value":3949}," true",{"type":41,"tag":82,"props":3951,"children":3952},{"style":136},[3953],{"type":47,"value":289},{"type":41,"tag":82,"props":3955,"children":3956},{"style":262},[3957],{"type":47,"value":524},{"type":41,"tag":82,"props":3959,"children":3960},{"style":136},[3961],{"type":47,"value":1970},{"type":41,"tag":82,"props":3963,"children":3964},{"class":84,"line":457},[3965,3969,3974],{"type":41,"tag":82,"props":3966,"children":3967},{"style":136},[3968],{"type":47,"value":584},{"type":41,"tag":82,"props":3970,"children":3971},{"style":262},[3972],{"type":47,"value":3973},"))",{"type":41,"tag":82,"props":3975,"children":3976},{"style":136},[3977],{"type":47,"value":311},{"type":41,"tag":82,"props":3979,"children":3980},{"class":84,"line":494},[3981],{"type":41,"tag":82,"props":3982,"children":3983},{"emptyLinePlaceholder":358},[3984],{"type":47,"value":361},{"type":41,"tag":82,"props":3986,"children":3987},{"class":84,"line":561},[3988,3992,3996,4000,4005,4009,4013,4017,4021],{"type":41,"tag":82,"props":3989,"children":3990},{"style":367},[3991],{"type":47,"value":370},{"type":41,"tag":82,"props":3993,"children":3994},{"style":262},[3995],{"type":47,"value":375},{"type":41,"tag":82,"props":3997,"children":3998},{"style":136},[3999],{"type":47,"value":159},{"type":41,"tag":82,"props":4001,"children":4002},{"style":95},[4003],{"type":47,"value":4004},"email service",{"type":41,"tag":82,"props":4006,"children":4007},{"style":136},[4008],{"type":47,"value":159},{"type":41,"tag":82,"props":4010,"children":4011},{"style":136},[4012],{"type":47,"value":270},{"type":41,"tag":82,"props":4014,"children":4015},{"style":136},[4016],{"type":47,"value":397},{"type":41,"tag":82,"props":4018,"children":4019},{"style":151},[4020],{"type":47,"value":402},{"type":41,"tag":82,"props":4022,"children":4023},{"style":136},[4024],{"type":47,"value":168},{"type":41,"tag":82,"props":4026,"children":4027},{"class":84,"line":578},[4028,4032,4036,4040,4045,4049,4053,4057,4061,4065],{"type":41,"tag":82,"props":4029,"children":4030},{"style":367},[4031],{"type":47,"value":415},{"type":41,"tag":82,"props":4033,"children":4034},{"style":418},[4035],{"type":47,"value":375},{"type":41,"tag":82,"props":4037,"children":4038},{"style":136},[4039],{"type":47,"value":159},{"type":41,"tag":82,"props":4041,"children":4042},{"style":95},[4043],{"type":47,"value":4044},"sends welcome email",{"type":41,"tag":82,"props":4046,"children":4047},{"style":136},[4048],{"type":47,"value":159},{"type":41,"tag":82,"props":4050,"children":4051},{"style":136},[4052],{"type":47,"value":270},{"type":41,"tag":82,"props":4054,"children":4055},{"style":151},[4056],{"type":47,"value":442},{"type":41,"tag":82,"props":4058,"children":4059},{"style":136},[4060],{"type":47,"value":397},{"type":41,"tag":82,"props":4062,"children":4063},{"style":151},[4064],{"type":47,"value":402},{"type":41,"tag":82,"props":4066,"children":4067},{"style":136},[4068],{"type":47,"value":168},{"type":41,"tag":82,"props":4070,"children":4071},{"class":84,"line":1081},[4072,4076,4081,4085,4089,4093,4097,4101,4106,4110,4114,4118,4122,4126,4130],{"type":41,"tag":82,"props":4073,"children":4074},{"style":151},[4075],{"type":47,"value":463},{"type":41,"tag":82,"props":4077,"children":4078},{"style":262},[4079],{"type":47,"value":4080}," result",{"type":41,"tag":82,"props":4082,"children":4083},{"style":136},[4084],{"type":47,"value":473},{"type":41,"tag":82,"props":4086,"children":4087},{"style":251},[4088],{"type":47,"value":478},{"type":41,"tag":82,"props":4090,"children":4091},{"style":367},[4092],{"type":47,"value":3794},{"type":41,"tag":82,"props":4094,"children":4095},{"style":418},[4096],{"type":47,"value":375},{"type":41,"tag":82,"props":4098,"children":4099},{"style":136},[4100],{"type":47,"value":923},{"type":41,"tag":82,"props":4102,"children":4103},{"style":418},[4104],{"type":47,"value":4105}," userId",{"type":41,"tag":82,"props":4107,"children":4108},{"style":136},[4109],{"type":47,"value":121},{"type":41,"tag":82,"props":4111,"children":4112},{"style":136},[4113],{"type":47,"value":195},{"type":41,"tag":82,"props":4115,"children":4116},{"style":95},[4117],{"type":47,"value":941},{"type":41,"tag":82,"props":4119,"children":4120},{"style":136},[4121],{"type":47,"value":159},{"type":41,"tag":82,"props":4123,"children":4124},{"style":136},[4125],{"type":47,"value":289},{"type":41,"tag":82,"props":4127,"children":4128},{"style":418},[4129],{"type":47,"value":524},{"type":41,"tag":82,"props":4131,"children":4132},{"style":136},[4133],{"type":47,"value":311},{"type":41,"tag":82,"props":4135,"children":4136},{"class":84,"line":1434},[4137,4141,4145,4150,4154,4159,4163,4167,4171,4175,4180,4184],{"type":41,"tag":82,"props":4138,"children":4139},{"style":367},[4140],{"type":47,"value":500},{"type":41,"tag":82,"props":4142,"children":4143},{"style":418},[4144],{"type":47,"value":375},{"type":41,"tag":82,"props":4146,"children":4147},{"style":262},[4148],{"type":47,"value":4149},"result",{"type":41,"tag":82,"props":4151,"children":4152},{"style":136},[4153],{"type":47,"value":514},{"type":41,"tag":82,"props":4155,"children":4156},{"style":262},[4157],{"type":47,"value":4158},"sent",{"type":41,"tag":82,"props":4160,"children":4161},{"style":418},[4162],{"type":47,"value":524},{"type":41,"tag":82,"props":4164,"children":4165},{"style":136},[4166],{"type":47,"value":514},{"type":41,"tag":82,"props":4168,"children":4169},{"style":367},[4170],{"type":47,"value":533},{"type":41,"tag":82,"props":4172,"children":4173},{"style":418},[4174],{"type":47,"value":375},{"type":41,"tag":82,"props":4176,"children":4177},{"style":3946},[4178],{"type":47,"value":4179},"true",{"type":41,"tag":82,"props":4181,"children":4182},{"style":418},[4183],{"type":47,"value":524},{"type":41,"tag":82,"props":4185,"children":4186},{"style":136},[4187],{"type":47,"value":311},{"type":41,"tag":82,"props":4189,"children":4190},{"class":84,"line":1527},[4191,4195,4199],{"type":41,"tag":82,"props":4192,"children":4193},{"style":136},[4194],{"type":47,"value":567},{"type":41,"tag":82,"props":4196,"children":4197},{"style":418},[4198],{"type":47,"value":524},{"type":41,"tag":82,"props":4200,"children":4201},{"style":136},[4202],{"type":47,"value":311},{"type":41,"tag":82,"props":4204,"children":4205},{"class":84,"line":1592},[4206,4210,4214],{"type":41,"tag":82,"props":4207,"children":4208},{"style":136},[4209],{"type":47,"value":584},{"type":41,"tag":82,"props":4211,"children":4212},{"style":262},[4213],{"type":47,"value":524},{"type":41,"tag":82,"props":4215,"children":4216},{"style":136},[4217],{"type":47,"value":311},{"type":41,"tag":63,"props":4219,"children":4221},{"id":4220},"test-configuration",[4222],{"type":47,"value":4223},"Test Configuration",{"type":41,"tag":57,"props":4225,"children":4226},{},[4227,4229,4235,4237,4243],{"type":47,"value":4228},"Create ",{"type":41,"tag":78,"props":4230,"children":4232},{"className":4231},[],[4233],{"type":47,"value":4234},"vite.config.ts",{"type":47,"value":4236}," (required for ",{"type":41,"tag":78,"props":4238,"children":4240},{"className":4239},[],[4241],{"type":47,"value":4242},"~encore",{"type":47,"value":4244}," imports):",{"type":41,"tag":70,"props":4246,"children":4248},{"className":231,"code":4247,"language":15,"meta":75,"style":75},"\u002F\u002F\u002F \u003Creference types=\"vitest\" \u002F>\nimport { defineConfig } from \"vite\";\nimport path from \"path\";\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      \"~encore\": path.resolve(__dirname, \".\u002Fencore.gen\"),\n    },\n  },\n  test: {\n    globals: true,\n    environment: \"node\",\n    include: [\"**\u002F*.test.ts\"],\n    coverage: {\n      reporter: [\"text\", \"json\", \"html\"],\n    },\n  },\n});\n",[4249],{"type":41,"tag":78,"props":4250,"children":4251},{"__ignoreMap":75},[4252,4300,4341,4375,4382,4407,4423,4439,4503,4511,4519,4535,4555,4584,4621,4637,4706,4713,4720],{"type":41,"tag":82,"props":4253,"children":4254},{"class":84,"line":85},[4255,4260,4265,4271,4277,4282,4286,4291,4295],{"type":41,"tag":82,"props":4256,"children":4257},{"style":242},[4258],{"type":47,"value":4259},"\u002F\u002F\u002F ",{"type":41,"tag":82,"props":4261,"children":4262},{"style":251},[4263],{"type":47,"value":4264},"\u003C",{"type":41,"tag":82,"props":4266,"children":4268},{"style":4267},"--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic",[4269],{"type":47,"value":4270},"reference",{"type":41,"tag":82,"props":4272,"children":4274},{"style":4273},"--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic",[4275],{"type":47,"value":4276}," types",{"type":41,"tag":82,"props":4278,"children":4279},{"style":251},[4280],{"type":47,"value":4281},"=",{"type":41,"tag":82,"props":4283,"children":4284},{"style":251},[4285],{"type":47,"value":159},{"type":41,"tag":82,"props":4287,"children":4289},{"style":4288},"--shiki-light:#91B859;--shiki-light-font-style:italic;--shiki-default:#C3E88D;--shiki-default-font-style:italic;--shiki-dark:#C3E88D;--shiki-dark-font-style:italic",[4290],{"type":47,"value":200},{"type":41,"tag":82,"props":4292,"children":4293},{"style":251},[4294],{"type":47,"value":159},{"type":41,"tag":82,"props":4296,"children":4297},{"style":251},[4298],{"type":47,"value":4299}," \u002F>\n",{"type":41,"tag":82,"props":4301,"children":4302},{"class":84,"line":142},[4303,4307,4311,4316,4320,4324,4328,4333,4337],{"type":41,"tag":82,"props":4304,"children":4305},{"style":251},[4306],{"type":47,"value":254},{"type":41,"tag":82,"props":4308,"children":4309},{"style":136},[4310],{"type":47,"value":259},{"type":41,"tag":82,"props":4312,"children":4313},{"style":262},[4314],{"type":47,"value":4315}," defineConfig",{"type":41,"tag":82,"props":4317,"children":4318},{"style":136},[4319],{"type":47,"value":289},{"type":41,"tag":82,"props":4321,"children":4322},{"style":251},[4323],{"type":47,"value":294},{"type":41,"tag":82,"props":4325,"children":4326},{"style":136},[4327],{"type":47,"value":195},{"type":41,"tag":82,"props":4329,"children":4330},{"style":95},[4331],{"type":47,"value":4332},"vite",{"type":41,"tag":82,"props":4334,"children":4335},{"style":136},[4336],{"type":47,"value":159},{"type":41,"tag":82,"props":4338,"children":4339},{"style":136},[4340],{"type":47,"value":311},{"type":41,"tag":82,"props":4342,"children":4343},{"class":84,"line":171},[4344,4348,4353,4358,4362,4367,4371],{"type":41,"tag":82,"props":4345,"children":4346},{"style":251},[4347],{"type":47,"value":254},{"type":41,"tag":82,"props":4349,"children":4350},{"style":262},[4351],{"type":47,"value":4352}," path ",{"type":41,"tag":82,"props":4354,"children":4355},{"style":251},[4356],{"type":47,"value":4357},"from",{"type":41,"tag":82,"props":4359,"children":4360},{"style":136},[4361],{"type":47,"value":195},{"type":41,"tag":82,"props":4363,"children":4364},{"style":95},[4365],{"type":47,"value":4366},"path",{"type":41,"tag":82,"props":4368,"children":4369},{"style":136},[4370],{"type":47,"value":159},{"type":41,"tag":82,"props":4372,"children":4373},{"style":136},[4374],{"type":47,"value":311},{"type":41,"tag":82,"props":4376,"children":4377},{"class":84,"line":208},[4378],{"type":41,"tag":82,"props":4379,"children":4380},{"emptyLinePlaceholder":358},[4381],{"type":47,"value":361},{"type":41,"tag":82,"props":4383,"children":4384},{"class":84,"line":25},[4385,4390,4395,4399,4403],{"type":41,"tag":82,"props":4386,"children":4387},{"style":251},[4388],{"type":47,"value":4389},"export",{"type":41,"tag":82,"props":4391,"children":4392},{"style":251},[4393],{"type":47,"value":4394}," default",{"type":41,"tag":82,"props":4396,"children":4397},{"style":367},[4398],{"type":47,"value":4315},{"type":41,"tag":82,"props":4400,"children":4401},{"style":262},[4402],{"type":47,"value":375},{"type":41,"tag":82,"props":4404,"children":4405},{"style":136},[4406],{"type":47,"value":139},{"type":41,"tag":82,"props":4408,"children":4409},{"class":84,"line":409},[4410,4415,4419],{"type":41,"tag":82,"props":4411,"children":4412},{"style":418},[4413],{"type":47,"value":4414},"  resolve",{"type":41,"tag":82,"props":4416,"children":4417},{"style":136},[4418],{"type":47,"value":121},{"type":41,"tag":82,"props":4420,"children":4421},{"style":136},[4422],{"type":47,"value":168},{"type":41,"tag":82,"props":4424,"children":4425},{"class":84,"line":457},[4426,4431,4435],{"type":41,"tag":82,"props":4427,"children":4428},{"style":418},[4429],{"type":47,"value":4430},"    alias",{"type":41,"tag":82,"props":4432,"children":4433},{"style":136},[4434],{"type":47,"value":121},{"type":41,"tag":82,"props":4436,"children":4437},{"style":136},[4438],{"type":47,"value":168},{"type":41,"tag":82,"props":4440,"children":4441},{"class":84,"line":494},[4442,4447,4451,4455,4459,4464,4468,4473,4478,4482,4486,4491,4495,4499],{"type":41,"tag":82,"props":4443,"children":4444},{"style":136},[4445],{"type":47,"value":4446},"      \"",{"type":41,"tag":82,"props":4448,"children":4449},{"style":418},[4450],{"type":47,"value":4242},{"type":41,"tag":82,"props":4452,"children":4453},{"style":136},[4454],{"type":47,"value":159},{"type":41,"tag":82,"props":4456,"children":4457},{"style":136},[4458],{"type":47,"value":121},{"type":41,"tag":82,"props":4460,"children":4461},{"style":262},[4462],{"type":47,"value":4463}," path",{"type":41,"tag":82,"props":4465,"children":4466},{"style":136},[4467],{"type":47,"value":514},{"type":41,"tag":82,"props":4469,"children":4470},{"style":367},[4471],{"type":47,"value":4472},"resolve",{"type":41,"tag":82,"props":4474,"children":4475},{"style":262},[4476],{"type":47,"value":4477},"(__dirname",{"type":41,"tag":82,"props":4479,"children":4480},{"style":136},[4481],{"type":47,"value":270},{"type":41,"tag":82,"props":4483,"children":4484},{"style":136},[4485],{"type":47,"value":195},{"type":41,"tag":82,"props":4487,"children":4488},{"style":95},[4489],{"type":47,"value":4490},".\u002Fencore.gen",{"type":41,"tag":82,"props":4492,"children":4493},{"style":136},[4494],{"type":47,"value":159},{"type":41,"tag":82,"props":4496,"children":4497},{"style":262},[4498],{"type":47,"value":524},{"type":41,"tag":82,"props":4500,"children":4501},{"style":136},[4502],{"type":47,"value":1970},{"type":41,"tag":82,"props":4504,"children":4505},{"class":84,"line":561},[4506],{"type":41,"tag":82,"props":4507,"children":4508},{"style":136},[4509],{"type":47,"value":4510},"    },\n",{"type":41,"tag":82,"props":4512,"children":4513},{"class":84,"line":578},[4514],{"type":41,"tag":82,"props":4515,"children":4516},{"style":136},[4517],{"type":47,"value":4518},"  },\n",{"type":41,"tag":82,"props":4520,"children":4521},{"class":84,"line":1081},[4522,4527,4531],{"type":41,"tag":82,"props":4523,"children":4524},{"style":418},[4525],{"type":47,"value":4526},"  test",{"type":41,"tag":82,"props":4528,"children":4529},{"style":136},[4530],{"type":47,"value":121},{"type":41,"tag":82,"props":4532,"children":4533},{"style":136},[4534],{"type":47,"value":168},{"type":41,"tag":82,"props":4536,"children":4537},{"class":84,"line":1434},[4538,4543,4547,4551],{"type":41,"tag":82,"props":4539,"children":4540},{"style":418},[4541],{"type":47,"value":4542},"    globals",{"type":41,"tag":82,"props":4544,"children":4545},{"style":136},[4546],{"type":47,"value":121},{"type":41,"tag":82,"props":4548,"children":4549},{"style":3946},[4550],{"type":47,"value":3949},{"type":41,"tag":82,"props":4552,"children":4553},{"style":136},[4554],{"type":47,"value":1970},{"type":41,"tag":82,"props":4556,"children":4557},{"class":84,"line":1527},[4558,4563,4567,4571,4576,4580],{"type":41,"tag":82,"props":4559,"children":4560},{"style":418},[4561],{"type":47,"value":4562},"    environment",{"type":41,"tag":82,"props":4564,"children":4565},{"style":136},[4566],{"type":47,"value":121},{"type":41,"tag":82,"props":4568,"children":4569},{"style":136},[4570],{"type":47,"value":195},{"type":41,"tag":82,"props":4572,"children":4573},{"style":95},[4574],{"type":47,"value":4575},"node",{"type":41,"tag":82,"props":4577,"children":4578},{"style":136},[4579],{"type":47,"value":159},{"type":41,"tag":82,"props":4581,"children":4582},{"style":136},[4583],{"type":47,"value":1970},{"type":41,"tag":82,"props":4585,"children":4586},{"class":84,"line":1592},[4587,4592,4596,4600,4604,4609,4613,4617],{"type":41,"tag":82,"props":4588,"children":4589},{"style":418},[4590],{"type":47,"value":4591},"    include",{"type":41,"tag":82,"props":4593,"children":4594},{"style":136},[4595],{"type":47,"value":121},{"type":41,"tag":82,"props":4597,"children":4598},{"style":262},[4599],{"type":47,"value":1987},{"type":41,"tag":82,"props":4601,"children":4602},{"style":136},[4603],{"type":47,"value":159},{"type":41,"tag":82,"props":4605,"children":4606},{"style":95},[4607],{"type":47,"value":4608},"**\u002F*.test.ts",{"type":41,"tag":82,"props":4610,"children":4611},{"style":136},[4612],{"type":47,"value":159},{"type":41,"tag":82,"props":4614,"children":4615},{"style":262},[4616],{"type":47,"value":2041},{"type":41,"tag":82,"props":4618,"children":4619},{"style":136},[4620],{"type":47,"value":1970},{"type":41,"tag":82,"props":4622,"children":4623},{"class":84,"line":1601},[4624,4629,4633],{"type":41,"tag":82,"props":4625,"children":4626},{"style":418},[4627],{"type":47,"value":4628},"    coverage",{"type":41,"tag":82,"props":4630,"children":4631},{"style":136},[4632],{"type":47,"value":121},{"type":41,"tag":82,"props":4634,"children":4635},{"style":136},[4636],{"type":47,"value":168},{"type":41,"tag":82,"props":4638,"children":4639},{"class":84,"line":1663},[4640,4645,4649,4653,4657,4661,4665,4669,4673,4677,4681,4685,4689,4694,4698,4702],{"type":41,"tag":82,"props":4641,"children":4642},{"style":418},[4643],{"type":47,"value":4644},"      reporter",{"type":41,"tag":82,"props":4646,"children":4647},{"style":136},[4648],{"type":47,"value":121},{"type":41,"tag":82,"props":4650,"children":4651},{"style":262},[4652],{"type":47,"value":1987},{"type":41,"tag":82,"props":4654,"children":4655},{"style":136},[4656],{"type":47,"value":159},{"type":41,"tag":82,"props":4658,"children":4659},{"style":95},[4660],{"type":47,"value":47},{"type":41,"tag":82,"props":4662,"children":4663},{"style":136},[4664],{"type":47,"value":159},{"type":41,"tag":82,"props":4666,"children":4667},{"style":136},[4668],{"type":47,"value":270},{"type":41,"tag":82,"props":4670,"children":4671},{"style":136},[4672],{"type":47,"value":195},{"type":41,"tag":82,"props":4674,"children":4675},{"style":95},[4676],{"type":47,"value":126},{"type":41,"tag":82,"props":4678,"children":4679},{"style":136},[4680],{"type":47,"value":159},{"type":41,"tag":82,"props":4682,"children":4683},{"style":136},[4684],{"type":47,"value":270},{"type":41,"tag":82,"props":4686,"children":4687},{"style":136},[4688],{"type":47,"value":195},{"type":41,"tag":82,"props":4690,"children":4691},{"style":95},[4692],{"type":47,"value":4693},"html",{"type":41,"tag":82,"props":4695,"children":4696},{"style":136},[4697],{"type":47,"value":159},{"type":41,"tag":82,"props":4699,"children":4700},{"style":262},[4701],{"type":47,"value":2041},{"type":41,"tag":82,"props":4703,"children":4704},{"style":136},[4705],{"type":47,"value":1970},{"type":41,"tag":82,"props":4707,"children":4708},{"class":84,"line":1679},[4709],{"type":41,"tag":82,"props":4710,"children":4711},{"style":136},[4712],{"type":47,"value":4510},{"type":41,"tag":82,"props":4714,"children":4715},{"class":84,"line":2834},[4716],{"type":41,"tag":82,"props":4717,"children":4718},{"style":136},[4719],{"type":47,"value":4518},{"type":41,"tag":82,"props":4721,"children":4722},{"class":84,"line":2843},[4723,4727,4731],{"type":41,"tag":82,"props":4724,"children":4725},{"style":136},[4726],{"type":47,"value":584},{"type":41,"tag":82,"props":4728,"children":4729},{"style":262},[4730],{"type":47,"value":524},{"type":41,"tag":82,"props":4732,"children":4733},{"style":136},[4734],{"type":47,"value":311},{"type":41,"tag":63,"props":4736,"children":4738},{"id":4737},"vs-code-integration",[4739],{"type":47,"value":4740},"VS Code Integration",{"type":41,"tag":57,"props":4742,"children":4743},{},[4744,4746,4755,4757,4763],{"type":47,"value":4745},"Install the ",{"type":41,"tag":4747,"props":4748,"children":4752},"a",{"href":4749,"rel":4750},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vitest.explorer",[4751],"nofollow",[4753],{"type":47,"value":4754},"Vitest extension",{"type":47,"value":4756}," and add to ",{"type":41,"tag":78,"props":4758,"children":4760},{"className":4759},[],[4761],{"type":47,"value":4762},".vscode\u002Fsettings.json",{"type":47,"value":121},{"type":41,"tag":70,"props":4765,"children":4767},{"className":124,"code":4766,"language":126,"meta":75,"style":75},"{\n  \"vitest.commandLine\": \"encore test\"\n}\n",[4768],{"type":41,"tag":78,"props":4769,"children":4770},{"__ignoreMap":75},[4771,4778,4810],{"type":41,"tag":82,"props":4772,"children":4773},{"class":84,"line":85},[4774],{"type":41,"tag":82,"props":4775,"children":4776},{"style":136},[4777],{"type":47,"value":139},{"type":41,"tag":82,"props":4779,"children":4780},{"class":84,"line":142},[4781,4785,4790,4794,4798,4802,4806],{"type":41,"tag":82,"props":4782,"children":4783},{"style":136},[4784],{"type":47,"value":148},{"type":41,"tag":82,"props":4786,"children":4787},{"style":151},[4788],{"type":47,"value":4789},"vitest.commandLine",{"type":41,"tag":82,"props":4791,"children":4792},{"style":136},[4793],{"type":47,"value":159},{"type":41,"tag":82,"props":4795,"children":4796},{"style":136},[4797],{"type":47,"value":121},{"type":41,"tag":82,"props":4799,"children":4800},{"style":136},[4801],{"type":47,"value":195},{"type":41,"tag":82,"props":4803,"children":4804},{"style":95},[4805],{"type":47,"value":662},{"type":41,"tag":82,"props":4807,"children":4808},{"style":136},[4809],{"type":47,"value":205},{"type":41,"tag":82,"props":4811,"children":4812},{"class":84,"line":171},[4813],{"type":41,"tag":82,"props":4814,"children":4815},{"style":136},[4816],{"type":47,"value":222},{"type":41,"tag":57,"props":4818,"children":4819},{},[4820,4826],{"type":41,"tag":4821,"props":4822,"children":4823},"strong",{},[4824],{"type":47,"value":4825},"Note:",{"type":47,"value":4827}," For VS Code test explorer, disable file-level parallelism to avoid port conflicts:",{"type":41,"tag":70,"props":4829,"children":4831},{"className":231,"code":4830,"language":15,"meta":75,"style":75},"\u002F\u002F vite.config.ts\nexport default defineConfig({\n  \u002F\u002F ...\n  test: {\n    fileParallelism: false,  \u002F\u002F Disable for VS Code\n    \u002F\u002F ...\n  },\n});\n",[4832],{"type":41,"tag":78,"props":4833,"children":4834},{"__ignoreMap":75},[4835,4843,4866,4874,4889,4915,4923,4930],{"type":41,"tag":82,"props":4836,"children":4837},{"class":84,"line":85},[4838],{"type":41,"tag":82,"props":4839,"children":4840},{"style":242},[4841],{"type":47,"value":4842},"\u002F\u002F vite.config.ts\n",{"type":41,"tag":82,"props":4844,"children":4845},{"class":84,"line":142},[4846,4850,4854,4858,4862],{"type":41,"tag":82,"props":4847,"children":4848},{"style":251},[4849],{"type":47,"value":4389},{"type":41,"tag":82,"props":4851,"children":4852},{"style":251},[4853],{"type":47,"value":4394},{"type":41,"tag":82,"props":4855,"children":4856},{"style":367},[4857],{"type":47,"value":4315},{"type":41,"tag":82,"props":4859,"children":4860},{"style":262},[4861],{"type":47,"value":375},{"type":41,"tag":82,"props":4863,"children":4864},{"style":136},[4865],{"type":47,"value":139},{"type":41,"tag":82,"props":4867,"children":4868},{"class":84,"line":171},[4869],{"type":41,"tag":82,"props":4870,"children":4871},{"style":242},[4872],{"type":47,"value":4873},"  \u002F\u002F ...\n",{"type":41,"tag":82,"props":4875,"children":4876},{"class":84,"line":208},[4877,4881,4885],{"type":41,"tag":82,"props":4878,"children":4879},{"style":418},[4880],{"type":47,"value":4526},{"type":41,"tag":82,"props":4882,"children":4883},{"style":136},[4884],{"type":47,"value":121},{"type":41,"tag":82,"props":4886,"children":4887},{"style":136},[4888],{"type":47,"value":168},{"type":41,"tag":82,"props":4890,"children":4891},{"class":84,"line":25},[4892,4897,4901,4906,4910],{"type":41,"tag":82,"props":4893,"children":4894},{"style":418},[4895],{"type":47,"value":4896},"    fileParallelism",{"type":41,"tag":82,"props":4898,"children":4899},{"style":136},[4900],{"type":47,"value":121},{"type":41,"tag":82,"props":4902,"children":4903},{"style":3946},[4904],{"type":47,"value":4905}," false",{"type":41,"tag":82,"props":4907,"children":4908},{"style":136},[4909],{"type":47,"value":270},{"type":41,"tag":82,"props":4911,"children":4912},{"style":242},[4913],{"type":47,"value":4914},"  \u002F\u002F Disable for VS Code\n",{"type":41,"tag":82,"props":4916,"children":4917},{"class":84,"line":409},[4918],{"type":41,"tag":82,"props":4919,"children":4920},{"style":242},[4921],{"type":47,"value":4922},"    \u002F\u002F ...\n",{"type":41,"tag":82,"props":4924,"children":4925},{"class":84,"line":457},[4926],{"type":41,"tag":82,"props":4927,"children":4928},{"style":136},[4929],{"type":47,"value":4518},{"type":41,"tag":82,"props":4931,"children":4932},{"class":84,"line":494},[4933,4937,4941],{"type":41,"tag":82,"props":4934,"children":4935},{"style":136},[4936],{"type":47,"value":584},{"type":41,"tag":82,"props":4938,"children":4939},{"style":262},[4940],{"type":47,"value":524},{"type":41,"tag":82,"props":4942,"children":4943},{"style":136},[4944],{"type":47,"value":311},{"type":41,"tag":57,"props":4946,"children":4947},{},[4948,4950],{"type":47,"value":4949},"Re-enable for CI: ",{"type":41,"tag":78,"props":4951,"children":4953},{"className":4952},[],[4954],{"type":47,"value":4955},"encore test --fileParallelism=true",{"type":41,"tag":63,"props":4957,"children":4959},{"id":4958},"guidelines",[4960],{"type":47,"value":4961},"Guidelines",{"type":41,"tag":666,"props":4963,"children":4964},{},[4965,4977,4982,4987,4992,4997],{"type":41,"tag":670,"props":4966,"children":4967},{},[4968,4970,4975],{"type":47,"value":4969},"Use ",{"type":41,"tag":78,"props":4971,"children":4973},{"className":4972},[],[4974],{"type":47,"value":662},{"type":47,"value":4976}," to run tests with infrastructure setup",{"type":41,"tag":670,"props":4978,"children":4979},{},[4980],{"type":47,"value":4981},"Each test file gets an isolated database transaction (rolled back after)",{"type":41,"tag":670,"props":4983,"children":4984},{},[4985],{"type":47,"value":4986},"Test API endpoints by calling them directly as functions",{"type":41,"tag":670,"props":4988,"children":4989},{},[4990],{"type":47,"value":4991},"Service-to-service calls work normally in tests",{"type":41,"tag":670,"props":4993,"children":4994},{},[4995],{"type":47,"value":4996},"Mock external dependencies (third-party APIs, email services, etc.)",{"type":41,"tag":670,"props":4998,"children":4999},{},[5000],{"type":47,"value":5001},"Don't mock Encore infrastructure (databases, Pub\u002FSub) - use the real thing",{"type":41,"tag":5003,"props":5004,"children":5005},"style",{},[5006],{"type":47,"value":5007},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5009,"total":5182},[5010,5022,5034,5052,5068,5080,5096,5111,5128,5145,5157,5168],{"slug":5011,"name":5011,"fn":5012,"description":5013,"org":5014,"tags":5015,"stars":21,"repoUrl":22,"updatedAt":5021},"encore-api","build type-safe APIs with Encore","Define typed API endpoints in Encore.ts using `api(...)` from `encore.dev\u002Fapi`. Covers typed request\u002Fresponse interfaces, path\u002Fquery\u002Fheader\u002Fcookie params, request validation, and `APIError`. For raw endpoints (`api.raw()`) and inbound webhooks, use `encore-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5016,5019,5020],{"name":5017,"slug":5018,"type":16},"API Development","api-development",{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:09:46.044101",{"slug":5023,"name":5023,"fn":5024,"description":5025,"org":5026,"tags":5027,"stars":21,"repoUrl":22,"updatedAt":5033},"encore-auth","implement Encore.ts authentication","Protect Encore.ts endpoints with authentication and authorize callers. Covers `authHandler`, `Gateway`, `getAuthData`, and `auth: true`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5028,5031,5032],{"name":5029,"slug":5030,"type":16},"Auth","auth",{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:09:47.336322",{"slug":5035,"name":5035,"fn":5036,"description":5037,"org":5038,"tags":5039,"stars":21,"repoUrl":22,"updatedAt":5051},"encore-bucket","store files in Encore.ts buckets","Store unstructured files in Encore.ts using `Bucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5040,5043,5044,5047,5050],{"name":5041,"slug":5042,"type":16},"Backend","backend",{"name":9,"slug":8,"type":16},{"name":5045,"slug":5046,"type":16},"File Storage","file-storage",{"name":5048,"slug":5049,"type":16},"File Uploads","file-uploads",{"name":14,"slug":15,"type":16},"2026-05-16T05:59:52.813772",{"slug":5053,"name":5053,"fn":5054,"description":5055,"org":5056,"tags":5057,"stars":21,"repoUrl":22,"updatedAt":5067},"encore-cache","cache data in Redis with Encore.ts","Cache data in Redis from Encore.ts using `CacheCluster` and typed keyspaces from `encore.dev\u002Fstorage\u002Fcache`. Type-safe key\u002Fvalue access with TTLs, atomic increments, and per-keyspace data shapes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5058,5059,5062,5063,5066],{"name":5041,"slug":5042,"type":16},{"name":5060,"slug":5061,"type":16},"Caching","caching",{"name":9,"slug":8,"type":16},{"name":5064,"slug":5065,"type":16},"Redis","redis",{"name":14,"slug":15,"type":16},"2026-05-16T05:59:56.808328",{"slug":5069,"name":5069,"fn":5070,"description":5071,"org":5072,"tags":5073,"stars":21,"repoUrl":22,"updatedAt":5079},"encore-code-review","review Encore.ts code","Review existing Encore.ts code for best practices and common anti-patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5074,5077,5078],{"name":5075,"slug":5076,"type":16},"Code Review","code-review",{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},"2026-04-06T18:10:01.123999",{"slug":5081,"name":5081,"fn":5082,"description":5083,"org":5084,"tags":5085,"stars":21,"repoUrl":22,"updatedAt":5095},"encore-cron","schedule recurring jobs in Encore.ts","Schedule periodic \u002F recurring work in Encore.ts using `CronJob` from `encore.dev\u002Fcron`. Covers `every: \"1h\"` interval syntax and `schedule: \"0 9 * * 1\"` cron expressions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5086,5089,5090,5091,5094],{"name":5087,"slug":5088,"type":16},"Automation","automation",{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5092,"slug":5093,"type":16},"Scheduling","scheduling",{"name":14,"slug":15,"type":16},"2026-05-16T05:59:54.146651",{"slug":5097,"name":5097,"fn":5098,"description":5099,"org":5100,"tags":5101,"stars":21,"repoUrl":22,"updatedAt":5110},"encore-database","build Encore databases","Work with PostgreSQL in Encore.ts using `SQLDatabase` from `encore.dev\u002Fstorage\u002Fsqldb` — schema migrations and SQL queries.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5102,5105,5106,5109],{"name":5103,"slug":5104,"type":16},"Database","database",{"name":9,"slug":8,"type":16},{"name":5107,"slug":5108,"type":16},"ORM","orm",{"name":14,"slug":15,"type":16},"2026-04-06T18:09:54.823017",{"slug":5112,"name":5112,"fn":5113,"description":5114,"org":5115,"tags":5116,"stars":21,"repoUrl":22,"updatedAt":5127},"encore-frontend","connect frontend to Encore backend","Connect a frontend application (React, Next.js, Vue, Svelte, etc.) to an Encore.ts backend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5117,5118,5121,5124],{"name":9,"slug":8,"type":16},{"name":5119,"slug":5120,"type":16},"Frontend","frontend",{"name":5122,"slug":5123,"type":16},"Next.js","next-js",{"name":5125,"slug":5126,"type":16},"React","react","2026-04-06T18:09:56.091006",{"slug":5129,"name":5129,"fn":5130,"description":5131,"org":5132,"tags":5133,"stars":21,"repoUrl":22,"updatedAt":5144},"encore-getting-started","build and run applications with Encore.ts","Bootstrap a brand-new Encore.ts project from zero. Only for first-time CLI install and `encore app create` — not for architecture or feature questions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5134,5135,5136,5137,5140,5141],{"name":5017,"slug":5018,"type":16},{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5138,"slug":5139,"type":16},"Local Development","local-development",{"name":14,"slug":15,"type":16},{"name":5142,"slug":5143,"type":16},"Web Development","web-development","2026-04-06T18:10:04.885446",{"slug":5146,"name":5146,"fn":5147,"description":5148,"org":5149,"tags":5150,"stars":21,"repoUrl":22,"updatedAt":5156},"encore-go-api","build APIs with Encore Go","Define typed API endpoints in Encore Go using `\u002F\u002Fencore:api` annotations. Covers typed request\u002Fresponse structs, path\u002Fquery\u002Fheader\u002Fcookie params, and error returns. For raw endpoints (`\u002F\u002Fencore:api raw`) and inbound webhooks, use `encore-go-webhook` instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5151,5152,5153],{"name":5017,"slug":5018,"type":16},{"name":9,"slug":8,"type":16},{"name":5154,"slug":5155,"type":16},"Go","go","2026-04-06T18:09:48.578781",{"slug":5158,"name":5158,"fn":5159,"description":5160,"org":5161,"tags":5162,"stars":21,"repoUrl":22,"updatedAt":5167},"encore-go-auth","implement authentication with Encore Go","Protect Encore Go endpoints with authentication and authorize callers. Covers `auth.AuthHandler`, `auth.UserID`, the `Authorization` header, and `\u002F\u002Fencore:api auth`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5163,5164,5165,5166],{"name":5029,"slug":5030,"type":16},{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5154,"slug":5155,"type":16},"2026-04-06T18:09:51.065102",{"slug":5169,"name":5169,"fn":5170,"description":5171,"org":5172,"tags":5173,"stars":21,"repoUrl":22,"updatedAt":5181},"encore-go-bucket","store files in Encore Go buckets","Store unstructured files in Encore Go using `objects.NewBucket` from `encore.dev\u002Fstorage\u002Fobjects` — uploads, images, documents, blobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5174,5175,5176,5177,5178],{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5045,"slug":5046,"type":16},{"name":5154,"slug":5155,"type":16},{"name":5179,"slug":5180,"type":16},"Storage","storage","2026-05-16T06:00:03.633918",28,{"items":5184,"total":5182},[5185,5191,5197,5205,5213,5219,5227],{"slug":5011,"name":5011,"fn":5012,"description":5013,"org":5186,"tags":5187,"stars":21,"repoUrl":22,"updatedAt":5021},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5188,5189,5190],{"name":5017,"slug":5018,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"slug":5023,"name":5023,"fn":5024,"description":5025,"org":5192,"tags":5193,"stars":21,"repoUrl":22,"updatedAt":5033},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5194,5195,5196],{"name":5029,"slug":5030,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"slug":5035,"name":5035,"fn":5036,"description":5037,"org":5198,"tags":5199,"stars":21,"repoUrl":22,"updatedAt":5051},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5200,5201,5202,5203,5204],{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5045,"slug":5046,"type":16},{"name":5048,"slug":5049,"type":16},{"name":14,"slug":15,"type":16},{"slug":5053,"name":5053,"fn":5054,"description":5055,"org":5206,"tags":5207,"stars":21,"repoUrl":22,"updatedAt":5067},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5208,5209,5210,5211,5212],{"name":5041,"slug":5042,"type":16},{"name":5060,"slug":5061,"type":16},{"name":9,"slug":8,"type":16},{"name":5064,"slug":5065,"type":16},{"name":14,"slug":15,"type":16},{"slug":5069,"name":5069,"fn":5070,"description":5071,"org":5214,"tags":5215,"stars":21,"repoUrl":22,"updatedAt":5079},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5216,5217,5218],{"name":5075,"slug":5076,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},{"slug":5081,"name":5081,"fn":5082,"description":5083,"org":5220,"tags":5221,"stars":21,"repoUrl":22,"updatedAt":5095},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5222,5223,5224,5225,5226],{"name":5087,"slug":5088,"type":16},{"name":5041,"slug":5042,"type":16},{"name":9,"slug":8,"type":16},{"name":5092,"slug":5093,"type":16},{"name":14,"slug":15,"type":16},{"slug":5097,"name":5097,"fn":5098,"description":5099,"org":5228,"tags":5229,"stars":21,"repoUrl":22,"updatedAt":5110},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5230,5231,5232,5233],{"name":5103,"slug":5104,"type":16},{"name":9,"slug":8,"type":16},{"name":5107,"slug":5108,"type":16},{"name":14,"slug":15,"type":16}]