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/vercel/test/edge-middleware.test.js | |
download | astro-latest.tar.gz astro-latest.tar.zst astro-latest.zip |
Sync from a8e1c0a7402940e0fc5beef669522b315052df1blatest
Diffstat (limited to 'packages/integrations/vercel/test/edge-middleware.test.js')
-rw-r--r-- | packages/integrations/vercel/test/edge-middleware.test.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/packages/integrations/vercel/test/edge-middleware.test.js b/packages/integrations/vercel/test/edge-middleware.test.js new file mode 100644 index 000000000..d6313d483 --- /dev/null +++ b/packages/integrations/vercel/test/edge-middleware.test.js @@ -0,0 +1,74 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import { loadFixture } from './test-utils.js'; + +describe('Vercel edge middleware', () => { + /** @type {import('./test-utils.js').Fixture} */ + let build; + before(async () => { + build = await loadFixture({ + root: './fixtures/middleware-with-edge-file/', + }); + await build.build(); + }); + + it('an edge function is created', async () => { + const contents = await build.readFile( + '../.vercel/output/functions/_middleware.func/.vc-config.json', + ); + const contentsJSON = JSON.parse(contents); + assert.equal(contentsJSON.runtime, 'edge'); + assert.equal(contentsJSON.entrypoint, 'middleware.mjs'); + }); + + it('deployment config points to the middleware edge function', async () => { + const contents = await build.readFile('../.vercel/output/config.json'); + const { routes } = JSON.parse(contents); + assert.equal( + routes.some((route) => route.dest === '_middleware'), + true, + ); + }); + + it('edge sets Set-Cookie headers', async () => { + const entry = new URL( + '../.vercel/output/functions/_middleware.func/middleware.mjs', + build.config.outDir, + ); + const module = await import(entry); + const request = new Request('http://example.com/foo'); + const response = await module.default(request, {}); + assert.equal(response.headers.get('set-cookie'), 'foo=bar'); + assert.ok((await response.text()).length, 'Body is included'); + }); + + // TODO: The path here seems to be inconsistent? + it.skip('with edge handle file, should successfully build the middleware', async () => { + const fixture = await loadFixture({ + root: './fixtures/middleware-with-edge-file/', + }); + await fixture.build(); + const _contents = await fixture.readFile( + // this is abysmal... + '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-with-edge-file/dist/middleware.mjs', + ); + // assert.equal(contents.includes('title:')).to.be.true; + // chaiJestSnapshot.setTestName('Middleware with handler file'); + // assert.equal(contents).to.matchSnapshot(true); + }); + + // TODO: The path here seems to be inconsistent? + it.skip('without edge handle file, should successfully build the middleware', async () => { + const fixture = await loadFixture({ + root: './fixtures/middleware-without-edge-file/', + }); + await fixture.build(); + const _contents = await fixture.readFile( + // this is abysmal... + '../.vercel/output/functions/render.func/www/withastro/astro/packages/vercel/test/fixtures/middleware-without-edge-file/dist/middleware.mjs', + ); + // assert.equal(contents.includes('title:')).to.be.false; + // chaiJestSnapshot.setTestName('Middleware without handler file'); + // assert.equal(contents).to.matchSnapshot(true); + }); +}); |