diff options
author | 2025-06-05 14:25:23 +0000 | |
---|---|---|
committer | 2025-06-05 14:25:23 +0000 | |
commit | e586d7d704d475afe3373a1de6ae20d504f79d6d (patch) | |
tree | 7e3fa24807cebd48a86bd40f866d792181191ee9 /packages/integrations/node/test/locals.test.js | |
download | astro-latest.tar.gz astro-latest.tar.zst astro-latest.zip |
Sync from a8e1c0a7402940e0fc5beef669522b315052df1blatest
Diffstat (limited to 'packages/integrations/node/test/locals.test.js')
-rw-r--r-- | packages/integrations/node/test/locals.test.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/packages/integrations/node/test/locals.test.js b/packages/integrations/node/test/locals.test.js new file mode 100644 index 000000000..b8e3ed40f --- /dev/null +++ b/packages/integrations/node/test/locals.test.js @@ -0,0 +1,81 @@ +import * as assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import nodejs from '../dist/index.js'; +import { createRequestAndResponse, loadFixture } from './test-utils.js'; + +describe('API routes', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/locals/', + output: 'server', + adapter: nodejs({ mode: 'middleware' }), + }); + await fixture.build(); + }); + + it('Can use locals added by node middleware', async () => { + const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + const { req, res, text } = createRequestAndResponse({ + url: '/from-node-middleware', + }); + + const locals = { foo: 'bar' }; + + handler(req, res, () => {}, locals); + req.send(); + + const html = await text(); + + assert.equal(html.includes('<h1>bar</h1>'), true); + }); + + it('Throws an error when provided non-objects as locals', async () => { + const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + const { req, res, done } = createRequestAndResponse({ + url: '/from-node-middleware', + }); + + handler(req, res, undefined, 'locals'); + req.send(); + + await done; + assert.equal(res.statusCode, 500); + }); + + it('Can use locals added by astro middleware', async () => { + const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + + const { req, res, text } = createRequestAndResponse({ + url: '/from-astro-middleware', + }); + + handler(req, res, () => {}); + req.send(); + + const html = await text(); + + assert.equal(html.includes('<h1>baz</h1>'), true); + }); + + it('Can access locals in API', async () => { + const { handler } = await import('./fixtures/locals/dist/server/entry.mjs'); + const { req, res, done } = createRequestAndResponse({ + method: 'POST', + url: '/api', + }); + + const locals = { foo: 'bar' }; + + handler(req, res, () => {}, locals); + req.send(); + + const [buffer] = await done; + + const json = JSON.parse(buffer.toString('utf-8')); + + assert.equal(json.foo, 'bar'); + }); +}); |