summaryrefslogtreecommitdiff
path: root/packages/integrations/node/test/api-route.test.js
diff options
context:
space:
mode:
authorGravatar Arsh <69170106+lilnasy@users.noreply.github.com> 2024-02-01 21:24:21 +0000
committerGravatar GitHub <noreply@github.com> 2024-02-01 16:24:21 -0500
commit4d23caed76081742ddffe99841f5a1cb672f8d99 (patch)
tree92fdc68ef001f2d86c977cbf760c5bb6c06c2a2d /packages/integrations/node/test/api-route.test.js
parent879c712c0327d4603b17339218014077244c0f5f (diff)
downloadastro-4d23caed76081742ddffe99841f5a1cb672f8d99.tar.gz
astro-4d23caed76081742ddffe99841f5a1cb672f8d99.tar.zst
astro-4d23caed76081742ddffe99841f5a1cb672f8d99.zip
fix(NodeApp): fix responses with null bodies never completing (#9931)
* fix(NodeApp): fix responses with null bodies never completing * add changeset * add test * chore(tests): restore correct assertions * adjust incorrect test * added Astro.redirect and Response.redirect test cases * updated incorrect HTTP status * adjust api-routes.test.js after cherry-pick * bup markdoc test timeout --------- Co-authored-by: Emanuele Stoppa <my.burning@gmail.com> Co-authored-by: Friedemann Sommer <friedemannsommer@users.noreply.github.com>
Diffstat (limited to 'packages/integrations/node/test/api-route.test.js')
-rw-r--r--packages/integrations/node/test/api-route.test.js43
1 files changed, 42 insertions, 1 deletions
diff --git a/packages/integrations/node/test/api-route.test.js b/packages/integrations/node/test/api-route.test.js
index 80e99a2cc..9e0165cb9 100644
--- a/packages/integrations/node/test/api-route.test.js
+++ b/packages/integrations/node/test/api-route.test.js
@@ -1,12 +1,16 @@
import nodejs from '../dist/index.js';
import { loadFixture, createRequestAndResponse } from './test-utils.js';
import crypto from 'node:crypto';
-import { describe, it, before } from 'node:test';
+import { describe, it, before, after } from 'node:test';
import * as assert from 'node:assert/strict';
describe('API routes', () => {
/** @type {import('./test-utils').Fixture} */
let fixture;
+ /** @type {import('astro/src/@types/astro.js').PreviewServer} */
+ let previewServer;
+ /** @type {URL} */
+ let baseUri;
before(async () => {
fixture = await loadFixture({
@@ -15,8 +19,12 @@ describe('API routes', () => {
adapter: nodejs({ mode: 'middleware' }),
});
await fixture.build();
+ previewServer = await fixture.preview();
+ baseUri = new URL(`http://${previewServer.host ?? 'localhost'}:${previewServer.port}/`);
});
+ after(() => previewServer.stop());
+
it('Can get the request body', async () => {
const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs');
let { req, res, done } = createRequestAndResponse({
@@ -109,4 +117,37 @@ describe('API routes', () => {
assert.deepEqual(locals, { cancelledByTheServer: true });
});
+
+ it('Can respond with SSR redirect', async () => {
+ const controller = new AbortController();
+ setTimeout(() => controller.abort(), 1000);
+ const response = await fetch(new URL('/redirect', baseUri), {
+ redirect: 'manual',
+ signal: controller.signal,
+ });
+ assert.equal(response.status, 302);
+ assert.equal(response.headers.get('location'), '/destination');
+ });
+
+ it('Can respond with Astro.redirect', async () => {
+ const controller = new AbortController();
+ setTimeout(() => controller.abort(), 1000);
+ const response = await fetch(new URL('/astro-redirect', baseUri), {
+ redirect: 'manual',
+ signal: controller.signal,
+ });
+ assert.equal(response.status, 303);
+ assert.equal(response.headers.get('location'), '/destination');
+ });
+
+ it('Can respond with Response.redirect', async () => {
+ const controller = new AbortController();
+ setTimeout(() => controller.abort(), 1000);
+ const response = await fetch(new URL('/response-redirect', baseUri), {
+ redirect: 'manual',
+ signal: controller.signal,
+ });
+ assert.equal(response.status, 307);
+ assert.equal(response.headers.get('location'), String(new URL('/destination', baseUri)));
+ });
});