diff options
Diffstat (limited to 'packages/integrations/node/test')
91 files changed, 0 insertions, 2802 deletions
diff --git a/packages/integrations/node/test/api-route.test.js b/packages/integrations/node/test/api-route.test.js deleted file mode 100644 index 9743ce42d..000000000 --- a/packages/integrations/node/test/api-route.test.js +++ /dev/null @@ -1,153 +0,0 @@ -import * as assert from 'node:assert/strict'; -import crypto from 'node:crypto'; -import { after, 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; - /** @type {import('../../../astro/src/types/public/preview.js').PreviewServer} */ - let previewServer; - /** @type {URL} */ - let baseUri; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/api-route/', - output: 'server', - 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({ - method: 'POST', - url: '/recipes', - }); - - req.once('async_iterator', () => { - req.send(JSON.stringify({ id: 2 })); - }); - - handler(req, res); - - let [buffer] = await done; - - let json = JSON.parse(buffer.toString('utf-8')); - - assert.equal(json.length, 1); - - assert.equal(json[0].name, 'Broccoli Soup'); - }); - - it('Can get binary data', async () => { - const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); - - let { req, res, done } = createRequestAndResponse({ - method: 'POST', - url: '/binary', - }); - - req.once('async_iterator', () => { - req.send(Buffer.from(new Uint8Array([1, 2, 3, 4, 5]))); - }); - - handler(req, res); - - let [out] = await done; - let arr = Array.from(new Uint8Array(out.buffer)); - assert.deepEqual(arr, [5, 4, 3, 2, 1]); - }); - - it('Can post large binary data', async () => { - const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); - - let { req, res, done } = createRequestAndResponse({ - method: 'POST', - url: '/hash', - }); - - handler(req, res); - - let expectedDigest = null; - req.once('async_iterator', () => { - // Send 256MB of garbage data in 256KB chunks. This should be fast (< 1sec). - let remainingBytes = 256 * 1024 * 1024; - const chunkSize = 256 * 1024; - - const hash = crypto.createHash('sha256'); - while (remainingBytes > 0) { - const size = Math.min(remainingBytes, chunkSize); - const chunk = Buffer.alloc(size, Math.floor(Math.random() * 256)); - hash.update(chunk); - req.emit('data', chunk); - remainingBytes -= size; - } - - req.emit('end'); - expectedDigest = hash.digest(); - }); - - let [out] = await done; - assert.deepEqual(new Uint8Array(out.buffer), new Uint8Array(expectedDigest)); - }); - - it('Can bail on streaming', async () => { - const { handler } = await import('./fixtures/api-route/dist/server/entry.mjs'); - let { req, res, done } = createRequestAndResponse({ - url: '/streaming', - }); - - let locals = { cancelledByTheServer: false }; - - handler(req, res, () => {}, locals); - req.send(); - - await new Promise((resolve) => setTimeout(resolve, 500)); - res.emit('close'); - - await done; - - 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))); - }); -}); diff --git a/packages/integrations/node/test/assets.test.js b/packages/integrations/node/test/assets.test.js deleted file mode 100644 index 0b71f94cd..000000000 --- a/packages/integrations/node/test/assets.test.js +++ /dev/null @@ -1,44 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -describe('Assets', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let devPreview; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/image/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - vite: { - build: { - assetsInlineLimit: 0, - }, - }, - }); - await fixture.build(); - devPreview = await fixture.preview(); - }); - - after(async () => { - await devPreview.stop(); - }); - - it('Assets within the _astro folder should be given immutable headers', async () => { - let response = await fixture.fetch('/text-file'); - let cacheControl = response.headers.get('cache-control'); - assert.equal(cacheControl, null); - const html = await response.text(); - const $ = cheerio.load(html); - - // Fetch the asset - const fileURL = $('a').attr('href'); - response = await fixture.fetch(fileURL); - cacheControl = response.headers.get('cache-control'); - assert.equal(cacheControl, 'public, max-age=31536000, immutable'); - }); -}); diff --git a/packages/integrations/node/test/bad-urls.test.js b/packages/integrations/node/test/bad-urls.test.js deleted file mode 100644 index 9323516e8..000000000 --- a/packages/integrations/node/test/bad-urls.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -describe('Bad URLs', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let devPreview; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/bad-urls/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - devPreview = await fixture.preview(); - }); - - after(async () => { - await devPreview.stop(); - }); - - it('Does not crash on bad urls', async () => { - const weirdURLs = [ - '/\\xfs.bxss.me%3Fastrojs.com/hello-world', - '/asdasdasd@ax_zX=.zxczas🐥%/úadasd000%/', - '%', - '%80', - '%c', - '%c0%80', - '%20foobar%', - ]; - - const statusCodes = [400, 404, 500]; - for (const weirdUrl of weirdURLs) { - const fetchResult = await fixture.fetch(weirdUrl); - assert.equal( - statusCodes.includes(fetchResult.status), - true, - `${weirdUrl} returned something else than 400, 404, or 500`, - ); - } - const stillWork = await fixture.fetch('/'); - const text = await stillWork.text(); - assert.equal(text, '<!DOCTYPE html>Hello!'); - }); -}); diff --git a/packages/integrations/node/test/encoded.test.js b/packages/integrations/node/test/encoded.test.js deleted file mode 100644 index edc6ae78b..000000000 --- a/packages/integrations/node/test/encoded.test.js +++ /dev/null @@ -1,45 +0,0 @@ -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('Encoded Pathname', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/encoded/', - output: 'server', - adapter: nodejs({ mode: 'middleware' }), - }); - await fixture.build(); - }); - - it('Can get an Astro file', async () => { - const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - url: '/什么', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('什么</h1>'), true); - }); - - it('Can get a Markdown file', async () => { - const { handler } = await import('./fixtures/encoded/dist/server/entry.mjs'); - - let { req, res, text } = createRequestAndResponse({ - url: '/blog/什么', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('什么</h1>'), true); - }); -}); diff --git a/packages/integrations/node/test/errors.test.js b/packages/integrations/node/test/errors.test.js deleted file mode 100644 index 802fa6e25..000000000 --- a/packages/integrations/node/test/errors.test.js +++ /dev/null @@ -1,91 +0,0 @@ -import assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import { fileURLToPath } from 'node:url'; -import { Worker } from 'node:worker_threads'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -describe('Errors', () => { - /** @type {import('./test-utils.js').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/errors/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - }); - let devPreview; - - before(async () => { - // The two tests that need the server to run are skipped - // devPreview = await fixture.preview(); - }); - after(async () => { - await devPreview?.stop(); - }); - - it('stays alive after offshoot promise rejections', async () => { - // this test needs to happen in a worker because node test runner adds a listener for unhandled rejections in the main thread - const url = new URL('./fixtures/errors/dist/server/entry.mjs', import.meta.url); - const worker = new Worker(fileURLToPath(url), { - type: 'module', - env: { ASTRO_NODE_LOGGING: 'enabled' }, - }); - - await new Promise((resolve, reject) => { - worker.stdout.on('data', (data) => { - setTimeout(() => reject('Server took too long to start'), 1000); - if (data.toString().includes('Server listening on http://localhost:4321')) resolve(); - }); - }); - - await fetch('http://localhost:4321/offshoot-promise-rejection'); - - // if there was a crash, it becomes an error here - await worker.terminate(); - }); - - it( - 'rejected promise in template', - { skip: true, todo: 'Review the response from the in-stream' }, - async () => { - const res = await fixture.fetch('/in-stream'); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal($('p').text().trim(), 'Internal server error'); - }, - ); - - it( - 'generator that throws called in template', - { skip: true, todo: 'Review the response from the generator' }, - async () => { - const result = ['<!DOCTYPE html><h1>Astro</h1> 1', 'Internal server error']; - - /** @type {Response} */ - const res = await fixture.fetch('/generator'); - const reader = res.body.getReader(); - const decoder = new TextDecoder(); - const chunk1 = await reader.read(); - const chunk2 = await reader.read(); - const chunk3 = await reader.read(); - assert.equal(chunk1.done, false); - console.log(chunk1); - console.log(chunk2); - console.log(chunk3); - if (chunk2.done) { - assert.equal(decoder.decode(chunk1.value), result.join('')); - } else if (chunk3.done) { - assert.equal(decoder.decode(chunk1.value), result[0]); - assert.equal(decoder.decode(chunk2.value), result[1]); - } else { - throw new Error('The response should take at most 2 chunks.'); - } - }, - ); -}); diff --git a/packages/integrations/node/test/fixtures/api-route/package.json b/packages/integrations/node/test/fixtures/api-route/package.json deleted file mode 100644 index c4d9bdd2b..000000000 --- a/packages/integrations/node/test/fixtures/api-route/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-api-route", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro b/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro deleted file mode 100644 index 65a8765e8..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/astro-redirect.astro +++ /dev/null @@ -1,3 +0,0 @@ ---- -return Astro.redirect('/destination', 303); ---- diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts deleted file mode 100644 index b1c7ce263..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/binary.ts +++ /dev/null @@ -1,11 +0,0 @@ - -export async function POST({ request }: { request: Request }) { - let body = await request.arrayBuffer(); - let data = new Uint8Array(body); - let r = data.reverse(); - return new Response(r, { - headers: { - 'Content-Type': 'application/octet-stream' - } - }); -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts deleted file mode 100644 index 3f1b236de..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/hash.ts +++ /dev/null @@ -1,16 +0,0 @@ -import crypto from 'node:crypto'; - -export async function POST({ request }: { request: Request }) { - const hash = crypto.createHash('sha256'); - - const iterable = request.body as unknown as AsyncIterable<Uint8Array>; - for await (const chunk of iterable) { - hash.update(chunk); - } - - return new Response(hash.digest(), { - headers: { - 'Content-Type': 'application/octet-stream' - } - }); -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js b/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js deleted file mode 100644 index 7297b9643..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/recipes.js +++ /dev/null @@ -1,24 +0,0 @@ - -export async function POST({ request }) { - let body = await request.json(); - const recipes = [ - { - id: 1, - name: 'Potato Soup' - }, - { - id: 2, - name: 'Broccoli Soup' - } - ]; - - let out = recipes.filter(r => { - return r.id === body.id; - }); - - return new Response(JSON.stringify(out), { - headers: { - 'Content-Type': 'application/json' - } - }); -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts deleted file mode 100644 index baf22c93e..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/redirect.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { APIContext } from 'astro'; - -export async function GET({ redirect }: APIContext) { - return redirect('/destination'); -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts deleted file mode 100644 index 1dfa8bb3c..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/response-redirect.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { APIContext } from 'astro'; - -export async function GET({ url: requestUrl }: APIContext) { - return Response.redirect(new URL('/destination', requestUrl), 307); -} diff --git a/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts b/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts deleted file mode 100644 index 9ecb884bf..000000000 --- a/packages/integrations/node/test/fixtures/api-route/src/pages/streaming.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const GET = ({ locals }) => { - let sentChunks = 0; - - const readableStream = new ReadableStream({ - async pull(controller) { - if (sentChunks === 3) return controller.close(); - else sentChunks++; - - await new Promise(resolve => setTimeout(resolve, 1000)); - controller.enqueue(new TextEncoder().encode('hello\n')); - }, - cancel() { - locals.cancelledByTheServer = true; - } - }); - - return new Response(readableStream, { - headers: { - "Content-Type": "text/event-stream" - } - }); -} diff --git a/packages/integrations/node/test/fixtures/bad-urls/package.json b/packages/integrations/node/test/fixtures/bad-urls/package.json deleted file mode 100644 index 73c119663..000000000 --- a/packages/integrations/node/test/fixtures/bad-urls/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-badurls", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro b/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro deleted file mode 100644 index 10ddd6d25..000000000 --- a/packages/integrations/node/test/fixtures/bad-urls/src/pages/index.astro +++ /dev/null @@ -1 +0,0 @@ -Hello! diff --git a/packages/integrations/node/test/fixtures/encoded/package.json b/packages/integrations/node/test/fixtures/encoded/package.json deleted file mode 100644 index 350077973..000000000 --- a/packages/integrations/node/test/fixtures/encoded/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-encoded", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/encoded/src/pages/blog/什么.md b/packages/integrations/node/test/fixtures/encoded/src/pages/blog/什么.md deleted file mode 100644 index 2820cf17e..000000000 --- a/packages/integrations/node/test/fixtures/encoded/src/pages/blog/什么.md +++ /dev/null @@ -1 +0,0 @@ -# 什么 diff --git a/packages/integrations/node/test/fixtures/encoded/src/pages/什么.astro b/packages/integrations/node/test/fixtures/encoded/src/pages/什么.astro deleted file mode 100644 index c8473f594..000000000 --- a/packages/integrations/node/test/fixtures/encoded/src/pages/什么.astro +++ /dev/null @@ -1 +0,0 @@ -<h1>什么</h1> diff --git a/packages/integrations/node/test/fixtures/errors/package.json b/packages/integrations/node/test/fixtures/errors/package.json deleted file mode 100644 index e9fcfe654..000000000 --- a/packages/integrations/node/test/fixtures/errors/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-errors", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro b/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro deleted file mode 100644 index 65b8ae62c..000000000 --- a/packages/integrations/node/test/fixtures/errors/src/pages/generator.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -function * generator () { - yield 1 - throw Error('ohnoes') -} ---- -<h1>Astro</h1> -{generator()} -<footer> - Footer -</footer>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro b/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro deleted file mode 100644 index b7ee6b4ef..000000000 --- a/packages/integrations/node/test/fixtures/errors/src/pages/in-stream.astro +++ /dev/null @@ -1,13 +0,0 @@ ---- ---- -<html> - <head> - <title>One</title> - </head> - <body> - <h1>One</h1> - <p> - {Promise.reject('Error in the stream')} - </p> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro b/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro deleted file mode 100644 index be702d5ef..000000000 --- a/packages/integrations/node/test/fixtures/errors/src/pages/offshoot-promise-rejection.astro +++ /dev/null @@ -1,2 +0,0 @@ -{new Promise(async _ => (await {}, Astro.props.undefined.alsoAPropertyOfUndefined))} -{Astro.props.undefined.propertyOfUndefined}
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/package.json b/packages/integrations/node/test/fixtures/headers/package.json deleted file mode 100644 index 6a0858521..000000000 --- a/packages/integrations/node/test/fixtures/headers/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-headers", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro deleted file mode 100644 index a9ff193df..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-multi.astro +++ /dev/null @@ -1,5 +0,0 @@ ---- -Astro.cookies.set('from1', 'astro1'); -Astro.cookies.set('from2', 'astro2'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro deleted file mode 100644 index c469fd66f..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-cookies-single.astro +++ /dev/null @@ -1,4 +0,0 @@ ---- -Astro.cookies.set('from1', 'astro1'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro deleted file mode 100644 index 91244e838..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-multi.astro +++ /dev/null @@ -1,7 +0,0 @@ ---- -Astro.response.headers.append('set-cookie', 'from1=response1'); -Astro.response.headers.append('set-cookie', 'from2=response2'); -Astro.cookies.set('from3', 'astro1'); -Astro.cookies.set('from4', 'astro2'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro deleted file mode 100644 index 97719dfa9..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-astro-response-cookie-single.astro +++ /dev/null @@ -1,5 +0,0 @@ ---- -Astro.response.headers.append('set-cookie', 'from1=response1'); -Astro.cookies.set('from1', 'astro1'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro deleted file mode 100644 index 133cbd423..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-multi.astro +++ /dev/null @@ -1,5 +0,0 @@ ---- -Astro.response.headers.append('set-cookie', 'from1=value1'); -Astro.response.headers.append('set-cookie', 'from2=value2'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro b/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro deleted file mode 100644 index dc76082db..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/astro/component-response-cookies-single.astro +++ /dev/null @@ -1,4 +0,0 @@ ---- -Astro.response.headers.append('set-cookie', 'from1=value1'); ---- -<p>hello world</p>
\ No newline at end of file diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts deleted file mode 100644 index aaae88e59..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-multi.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { APIContext } from 'astro'; - -export async function GET({ request, cookies }: APIContext) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - cookies.set('from1', 'astro1'); - cookies.set('from2', 'astro2'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts deleted file mode 100644 index 03e74c604..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-cookies-single.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { APIContext } from 'astro'; - -export async function GET({ request, cookies }: APIContext) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - cookies.set('from1', 'astro1'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts deleted file mode 100644 index 36906da3a..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-multi.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { APIContext } from 'astro'; - -export async function GET({ request, cookies }: APIContext) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('set-cookie', 'from1=response1'); - headers.append('set-cookie', 'from2=response2'); - cookies.set('from3', 'astro1'); - cookies.set('from4', 'astro2'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts deleted file mode 100644 index 3c1fc4775..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/astro-response-cookie-single.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { APIContext } from 'astro'; - -export async function GET({ request, cookies }: APIContext) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('set-cookie', 'from1=response1'); - cookies.set('from1', 'astro1'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts deleted file mode 100644 index fb7c30cbc..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/kitchen-sink.ts +++ /dev/null @@ -1,11 +0,0 @@ -export async function GET({ request }: { request: Request }) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('x-SINGLE', 'single'); - headers.append('X-triple', 'one'); - headers.append('x-Triple', 'two'); - headers.append('x-TRIPLE', 'three'); - headers.append('SET-cookie', 'hello1=world1'); - headers.append('Set-Cookie', 'hello2=world2'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts deleted file mode 100644 index d974737ee..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-multi.ts +++ /dev/null @@ -1,7 +0,0 @@ -export async function GET({ request }: { request: Request }) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('Set-Cookie', 'hello1=world1'); - headers.append('SET-COOKIE', 'hello2=world2'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts deleted file mode 100644 index f543ae062..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-cookies-single.ts +++ /dev/null @@ -1,6 +0,0 @@ -export async function GET({ request }: { request: Request }) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('Set-Cookie', 'hello1=world1'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts deleted file mode 100644 index b8a9e122e..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-empty-headers-object.ts +++ /dev/null @@ -1,4 +0,0 @@ -export async function GET({ request }: { request: Request }) { - const headers = new Headers(); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts deleted file mode 100644 index 72f7af071..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/response-undefined-headers-object.ts +++ /dev/null @@ -1,3 +0,0 @@ -export async function GET({ request }: { request: Request }) { - return new Response('hello world', { headers: undefined }); -} diff --git a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts b/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts deleted file mode 100644 index 9c6bcacaa..000000000 --- a/packages/integrations/node/test/fixtures/headers/src/pages/endpoints/simple.ts +++ /dev/null @@ -1,6 +0,0 @@ -export async function GET({ request }: { request: Request }) { - const headers = new Headers(); - headers.append('content-type', 'text/plain;charset=utf-8'); - headers.append('X-HELLO', 'world'); - return new Response('hello world', { headers }); -} diff --git a/packages/integrations/node/test/fixtures/image/package.json b/packages/integrations/node/test/fixtures/image/package.json deleted file mode 100644 index 94066576d..000000000 --- a/packages/integrations/node/test/fixtures/image/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "@test/nodejs-image", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - }, - "scripts": { - "build": "astro build", - "preview": "astro preview" - } -} diff --git a/packages/integrations/node/test/fixtures/image/src/assets/file.txt b/packages/integrations/node/test/fixtures/image/src/assets/file.txt deleted file mode 100644 index e9ea42a12..000000000 --- a/packages/integrations/node/test/fixtures/image/src/assets/file.txt +++ /dev/null @@ -1 +0,0 @@ -this is a text file diff --git a/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png b/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png Binary files differdeleted file mode 100644 index a09d7f894..000000000 --- a/packages/integrations/node/test/fixtures/image/src/assets/some_penguin.png +++ /dev/null diff --git a/packages/integrations/node/test/fixtures/image/src/pages/index.astro b/packages/integrations/node/test/fixtures/image/src/pages/index.astro deleted file mode 100644 index 474a2f0c9..000000000 --- a/packages/integrations/node/test/fixtures/image/src/pages/index.astro +++ /dev/null @@ -1,6 +0,0 @@ ---- -import { Image } from "astro:assets"; -import penguin from "../assets/some_penguin.png"; ---- - -<Image src={penguin} alt="Penguins" width={50} /> diff --git a/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro b/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro deleted file mode 100644 index 893250360..000000000 --- a/packages/integrations/node/test/fixtures/image/src/pages/text-file.astro +++ /dev/null @@ -1,14 +0,0 @@ ---- -import txt from '../assets/file.txt?url'; ---- -<html> - <head> - <title>Testing</title> - </head> - <body> - <h1>Testing</h1> - <main> - <a href={txt} download>Download text file</a> - </main> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/locals/package.json b/packages/integrations/node/test/fixtures/locals/package.json deleted file mode 100644 index 35be7dc01..000000000 --- a/packages/integrations/node/test/fixtures/locals/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/locals", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/locals/src/middleware.ts b/packages/integrations/node/test/fixtures/locals/src/middleware.ts deleted file mode 100644 index e349ca41d..000000000 --- a/packages/integrations/node/test/fixtures/locals/src/middleware.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { defineMiddleware } from 'astro:middleware'; - -export const onRequest = defineMiddleware(({ url, locals }, next) => { - if (url.pathname === "/from-astro-middleware") locals.foo = "baz"; - return next(); -}) diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/api.js b/packages/integrations/node/test/fixtures/locals/src/pages/api.js deleted file mode 100644 index 3c279e37b..000000000 --- a/packages/integrations/node/test/fixtures/locals/src/pages/api.js +++ /dev/null @@ -1,10 +0,0 @@ - -export async function POST({ locals }) { - const out = { ...locals }; - - return new Response(JSON.stringify(out), { - headers: { - 'Content-Type': 'application/json' - } - }); -} diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro b/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro deleted file mode 100644 index 224a875ec..000000000 --- a/packages/integrations/node/test/fixtures/locals/src/pages/from-astro-middleware.astro +++ /dev/null @@ -1,4 +0,0 @@ ---- -const { foo } = Astro.locals; ---- -<h1>{foo}</h1> diff --git a/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro b/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro deleted file mode 100644 index 224a875ec..000000000 --- a/packages/integrations/node/test/fixtures/locals/src/pages/from-node-middleware.astro +++ /dev/null @@ -1,4 +0,0 @@ ---- -const { foo } = Astro.locals; ---- -<h1>{foo}</h1> diff --git a/packages/integrations/node/test/fixtures/node-middleware/package.json b/packages/integrations/node/test/fixtures/node-middleware/package.json deleted file mode 100644 index 7a49010f1..000000000 --- a/packages/integrations/node/test/fixtures/node-middleware/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/node-middleware", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro b/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro deleted file mode 100644 index 79f4944bc..000000000 --- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/404.astro +++ /dev/null @@ -1,13 +0,0 @@ ---- ---- - -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>404</title> -</head> -<body>Page does not exist</body> -</html> diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro b/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro deleted file mode 100644 index 28ff7d223..000000000 --- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/index.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- ---- - -<html lang="en"> -<head><title>node-middleware</title></head> -<style> -</style> -<body> -<div>1</div> -</body> -</html> diff --git a/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts b/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts deleted file mode 100644 index 423db341a..000000000 --- a/packages/integrations/node/test/fixtures/node-middleware/src/pages/ssr.ts +++ /dev/null @@ -1,7 +0,0 @@ -export async function GET() { - let number = Math.random(); - return Response.json({ - number, - message: `Here's a random number: ${number}`, - }); -} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/package.json b/packages/integrations/node/test/fixtures/prerender-404-500/package.json deleted file mode 100644 index f962fe991..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@test/nodejs-prerender-404-500", - "version": "0.0.0", - "private": true, - "type": "module", - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css b/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css deleted file mode 100644 index 5f331948a..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/external-stylesheet.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - background-color: ivory; -} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts b/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts deleted file mode 100644 index 1795c26b0..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-404.ts +++ /dev/null @@ -1,17 +0,0 @@ -// This module is only used by the prerendered 404.astro. -// It exhibits different behavior if it's called more than once, -// which is detected by a test and interpreted as a failure. - -let usedOnce = false -let dynamicMessage = "Page was not prerendered" - -export default function () { - if (usedOnce === false) { - usedOnce = true - return "Page does not exist" - } - - dynamicMessage += "+" - - return dynamicMessage -} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts b/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts deleted file mode 100644 index 8f8024a60..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/nondeterminism-500.ts +++ /dev/null @@ -1,17 +0,0 @@ -// This module is only used by the prerendered 500.astro. -// It exhibits different behavior if it's called more than once, -// which is detected by a test and interpreted as a failure. - -let usedOnce = false -let dynamicMessage = "Page was not prerendered" - -export default function () { - if (usedOnce === false) { - usedOnce = true - return "Something went wrong" - } - - dynamicMessage += "+" - - return dynamicMessage -} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro deleted file mode 100644 index 37fd1c1d3..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/404.astro +++ /dev/null @@ -1,5 +0,0 @@ ---- -import message from "../nondeterminism-404" -export const prerender = true; ---- -{message()} diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro deleted file mode 100644 index ef91ad0ff..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/500.astro +++ /dev/null @@ -1,6 +0,0 @@ ---- -import "../external-stylesheet.css" -import message from "../nondeterminism-500" -export const prerender = true ---- -<h1>{message()}</h1> diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro deleted file mode 100644 index 99d103567..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/fivehundred.astro +++ /dev/null @@ -1,4 +0,0 @@ ---- -return new Response(null, { status: 500 }) ---- -<p>This html will not be served</p> diff --git a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro b/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro deleted file mode 100644 index af6bad2fb..000000000 --- a/packages/integrations/node/test/fixtures/prerender-404-500/src/pages/static.astro +++ /dev/null @@ -1,12 +0,0 @@ ---- -export const prerender = true; ---- - -<html> -<head> - <title>Static Page</title> -</head> - <body> - <h1>Hello world!</h1> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/prerender/package.json b/packages/integrations/node/test/fixtures/prerender/package.json deleted file mode 100644 index 0ae3211ab..000000000 --- a/packages/integrations/node/test/fixtures/prerender/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-prerender", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/prerender/src/middleware.ts b/packages/integrations/node/test/fixtures/prerender/src/middleware.ts deleted file mode 100644 index 13d619d78..000000000 --- a/packages/integrations/node/test/fixtures/prerender/src/middleware.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { shared } from './shared'; -export const onRequest = (ctx, next) => { - ctx.locals = { - name: shared, - }; - return next(); -}; diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro deleted file mode 100644 index f3a26721d..000000000 --- a/packages/integrations/node/test/fixtures/prerender/src/pages/one.astro +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- -<html> - <head> - <title>One</title> - </head> - <body> - <h1>One</h1> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro deleted file mode 100644 index e29377d88..000000000 --- a/packages/integrations/node/test/fixtures/prerender/src/pages/third.astro +++ /dev/null @@ -1,15 +0,0 @@ ---- -import { shared} from "../shared"; -export const prerender = false; - -const shared = Astro.locals.name; ---- - -<html> -<head> - <title>One</title> -</head> -<body> -<h1>{shared}</h1> -</body> -</html> diff --git a/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro b/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro deleted file mode 100644 index c0e5d07aa..000000000 --- a/packages/integrations/node/test/fixtures/prerender/src/pages/two.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -export const prerender = import.meta.env.PRERENDER; ---- -<html> - <head> - <title>Two</title> - </head> - <body> - <h1>Two</h1> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/prerender/src/shared.ts b/packages/integrations/node/test/fixtures/prerender/src/shared.ts deleted file mode 100644 index cd35843de..000000000 --- a/packages/integrations/node/test/fixtures/prerender/src/shared.ts +++ /dev/null @@ -1 +0,0 @@ -export const shared = 'shared'; diff --git a/packages/integrations/node/test/fixtures/preview-headers/package.json b/packages/integrations/node/test/fixtures/preview-headers/package.json deleted file mode 100644 index ec2d5e3cf..000000000 --- a/packages/integrations/node/test/fixtures/preview-headers/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/nodejs-preview-headers", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro b/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro deleted file mode 100644 index 10ddd6d25..000000000 --- a/packages/integrations/node/test/fixtures/preview-headers/src/pages/index.astro +++ /dev/null @@ -1 +0,0 @@ -Hello! diff --git a/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs b/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs deleted file mode 100644 index 7ee28f213..000000000 --- a/packages/integrations/node/test/fixtures/trailing-slash/astro.config.mjs +++ /dev/null @@ -1,8 +0,0 @@ -import node from '@astrojs/node' - -export default { - base: '/some-base', - output: 'hybrid', - trailingSlash: 'never', - adapter: node({ mode: 'standalone' }) -}; diff --git a/packages/integrations/node/test/fixtures/trailing-slash/package.json b/packages/integrations/node/test/fixtures/trailing-slash/package.json deleted file mode 100644 index 50b7b7201..000000000 --- a/packages/integrations/node/test/fixtures/trailing-slash/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/node-trailingslash", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/trailing-slash/public/one.css b/packages/integrations/node/test/fixtures/trailing-slash/public/one.css deleted file mode 100644 index 5ce768ca5..000000000 --- a/packages/integrations/node/test/fixtures/trailing-slash/public/one.css +++ /dev/null @@ -1 +0,0 @@ -h1 { color: red; } diff --git a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro b/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro deleted file mode 100644 index a4c415519..000000000 --- a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/index.astro +++ /dev/null @@ -1,8 +0,0 @@ -<html> - <head> - <title>Index</title> - </head> - <body> - <h1>Index</h1> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro b/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro deleted file mode 100644 index aa370d18d..000000000 --- a/packages/integrations/node/test/fixtures/trailing-slash/src/pages/one.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -export const prerender = true; ---- -<html> - <head> - <title>One</title> - </head> - <body> - <h1>One</h1> - </body> -</html> diff --git a/packages/integrations/node/test/fixtures/url/package.json b/packages/integrations/node/test/fixtures/url/package.json deleted file mode 100644 index f349011fd..000000000 --- a/packages/integrations/node/test/fixtures/url/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/url", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/url/src/pages/index.astro b/packages/integrations/node/test/fixtures/url/src/pages/index.astro deleted file mode 100644 index 003429f52..000000000 --- a/packages/integrations/node/test/fixtures/url/src/pages/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- ---- - -<html lang="en"> - <head> - <title>URL</title> - </head> - <body>{Astro.url.href}</body> -</html> diff --git a/packages/integrations/node/test/fixtures/well-known-locations/package.json b/packages/integrations/node/test/fixtures/well-known-locations/package.json deleted file mode 100644 index f018b6ec7..000000000 --- a/packages/integrations/node/test/fixtures/well-known-locations/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@test/well-known-locations", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*", - "@astrojs/node": "workspace:*" - } -} diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json b/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json deleted file mode 100644 index 0967ef424..000000000 --- a/packages/integrations/node/test/fixtures/well-known-locations/public/.hidden/file.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association b/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association deleted file mode 100644 index daae260f1..000000000 --- a/packages/integrations/node/test/fixtures/well-known-locations/public/.well-known/apple-app-site-association +++ /dev/null @@ -1,3 +0,0 @@ -{ - "applinks": {} -} diff --git a/packages/integrations/node/test/headers.test.js b/packages/integrations/node/test/headers.test.js deleted file mode 100644 index 00b1766c7..000000000 --- a/packages/integrations/node/test/headers.test.js +++ /dev/null @@ -1,148 +0,0 @@ -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('Node Adapter Headers', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/headers/', - output: 'server', - adapter: nodejs({ mode: 'middleware' }), - }); - await fixture.build(); - }); - - it('Endpoint Simple Headers', async () => { - await runTest('/endpoints/simple', { - 'content-type': 'text/plain;charset=utf-8', - 'x-hello': 'world', - }); - }); - - it('Endpoint Astro Single Cookie Header', async () => { - await runTest('/endpoints/astro-cookies-single', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': 'from1=astro1', - }); - }); - - it('Endpoint Astro Multi Cookie Header', async () => { - await runTest('/endpoints/astro-cookies-multi', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': ['from1=astro1', 'from2=astro2'], - }); - }); - - it('Endpoint Response Single Cookie Header', async () => { - await runTest('/endpoints/response-cookies-single', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': 'hello1=world1', - }); - }); - - it('Endpoint Response Multi Cookie Header', async () => { - await runTest('/endpoints/response-cookies-multi', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': ['hello1=world1', 'hello2=world2'], - }); - }); - - it('Endpoint Complex Headers Kitchen Sink', async () => { - await runTest('/endpoints/kitchen-sink', { - 'content-type': 'text/plain;charset=utf-8', - 'x-single': 'single', - 'x-triple': 'one, two, three', - 'set-cookie': ['hello1=world1', 'hello2=world2'], - }); - }); - - it('Endpoint Astro and Response Single Cookie Header', async () => { - await runTest('/endpoints/astro-response-cookie-single', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': ['from1=response1', 'from1=astro1'], - }); - }); - - it('Endpoint Astro and Response Multi Cookie Header', async () => { - await runTest('/endpoints/astro-response-cookie-multi', { - 'content-type': 'text/plain;charset=utf-8', - 'set-cookie': ['from1=response1', 'from2=response2', 'from3=astro1', 'from4=astro2'], - }); - }); - - it('Endpoint Response Empty Headers Object', async () => { - await runTest('/endpoints/response-empty-headers-object', { - 'content-type': 'text/plain;charset=UTF-8', - }); - }); - - it('Endpoint Response undefined Headers Object', async () => { - await runTest('/endpoints/response-undefined-headers-object', { - 'content-type': 'text/plain;charset=UTF-8', - }); - }); - - it('Component Astro Single Cookie Header', async () => { - await runTest('/astro/component-astro-cookies-single', { - 'content-type': 'text/html', - 'set-cookie': 'from1=astro1', - }); - }); - - it('Component Astro Multi Cookie Header', async () => { - await runTest('/astro/component-astro-cookies-multi', { - 'content-type': 'text/html', - 'set-cookie': ['from1=astro1', 'from2=astro2'], - }); - }); - - it('Component Response Single Cookie Header', async () => { - await runTest('/astro/component-response-cookies-single', { - 'content-type': 'text/html', - 'set-cookie': 'from1=value1', - }); - }); - - it('Component Response Multi Cookie Header', async () => { - await runTest('/astro/component-response-cookies-multi', { - 'content-type': 'text/html', - 'set-cookie': ['from1=value1', 'from2=value2'], - }); - }); - - it('Component Astro and Response Single Cookie Header', async () => { - await runTest('/astro/component-astro-response-cookie-single', { - 'content-type': 'text/html', - 'set-cookie': ['from1=response1', 'from1=astro1'], - }); - }); - - it('Component Astro and Response Multi Cookie Header', async () => { - await runTest('/astro/component-astro-response-cookie-multi', { - 'content-type': 'text/html', - 'set-cookie': ['from1=response1', 'from2=response2', 'from3=astro1', 'from4=astro2'], - }); - }); -}); - -async function runTest(url, expectedHeaders) { - const { handler } = await import('./fixtures/headers/dist/server/entry.mjs'); - - let { req, res, done } = createRequestAndResponse({ - method: 'GET', - url, - }); - - handler(req, res); - - req.send(); - - await done; - const headers = res.getHeaders(); - - assert.deepEqual(headers, expectedHeaders); -} diff --git a/packages/integrations/node/test/image.test.js b/packages/integrations/node/test/image.test.js deleted file mode 100644 index 5303fe37e..000000000 --- a/packages/integrations/node/test/image.test.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -// Temporary skip until we figure out the "Could not find Sharp" issue as `sharp` is bundled -describe.skip('Image endpoint', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let devPreview; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/image/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - devPreview = await fixture.preview(); - }); - - after(async () => { - await devPreview.stop(); - }); - - it('it returns images', async () => { - const res = await fixture.fetch('/'); - assert.equal(res.status, 200); - - const resImage = await fixture.fetch( - '/_image?href=/_astro/some_penguin.97ef5f92.png&w=50&f=webp', - ); - - assert.equal(resImage.status, 200); - }); -}); diff --git a/packages/integrations/node/test/locals.test.js b/packages/integrations/node/test/locals.test.js deleted file mode 100644 index 6d2776079..000000000 --- a/packages/integrations/node/test/locals.test.js +++ /dev/null @@ -1,81 +0,0 @@ -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'); - let { req, res, text } = createRequestAndResponse({ - url: '/from-node-middleware', - }); - - let locals = { foo: 'bar' }; - - handler(req, res, () => {}, locals); - req.send(); - - let 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'); - let { 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'); - let { req, res, done } = createRequestAndResponse({ - method: 'POST', - url: '/api', - }); - - let locals = { foo: 'bar' }; - - handler(req, res, () => {}, locals); - req.send(); - - let [buffer] = await done; - - let json = JSON.parse(buffer.toString('utf-8')); - - assert.equal(json.foo, 'bar'); - }); -}); diff --git a/packages/integrations/node/test/node-middleware.test.js b/packages/integrations/node/test/node-middleware.test.js deleted file mode 100644 index d1b016a51..000000000 --- a/packages/integrations/node/test/node-middleware.test.js +++ /dev/null @@ -1,88 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import * as cheerio from 'cheerio'; -import express from 'express'; -import nodejs from '../dist/index.js'; -import { loadFixture, waitServerListen } from './test-utils.js'; - -/** - * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture - */ - -describe('behavior from middleware, standalone', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - root: './fixtures/node-middleware/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - describe('404', async () => { - it('when mode is standalone', async () => { - const res = await fetch(`http://${server.host}:${server.port}/error-page`); - - assert.equal(res.status, 404); - - const html = await res.text(); - const $ = cheerio.load(html); - - const body = $('body'); - assert.equal(body.text().includes('Page does not exist'), true); - }); - }); -}); - -describe('behavior from middleware, middleware', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - root: './fixtures/node-middleware/', - output: 'server', - adapter: nodejs({ mode: 'middleware' }), - }); - await fixture.build(); - const { handler } = await fixture.loadAdapterEntryModule(); - const app = express(); - app.use(handler); - server = app.listen(8888); - }); - - after(async () => { - server.close(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('when mode is standalone', async () => { - const res = await fetch(`http://localhost:8888/ssr`); - - assert.equal(res.status, 200); - - const html = await res.text(); - const $ = cheerio.load(html); - - const body = $('body'); - assert.equal(body.text().includes("Here's a random number"), true); - }); -}); diff --git a/packages/integrations/node/test/prerender-404-500.test.js b/packages/integrations/node/test/prerender-404-500.test.js deleted file mode 100644 index 2535fcb35..000000000 --- a/packages/integrations/node/test/prerender-404-500.test.js +++ /dev/null @@ -1,300 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { loadFixture, waitServerListen } from './test-utils.js'; - -/** - * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture - */ - -describe('Prerender 404', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - describe('With base', async () => { - before(async () => { - process.env.PRERENDER = true; - - fixture = await loadFixture({ - // inconsequential config that differs between tests - // to bust cache and prevent modules and their state - // from being reused - site: 'https://test.dev/', - base: '/some-base', - root: './fixtures/prerender-404-500/', - output: 'server', - outDir: './dist/server-with-base', - build: { - client: './dist/server-with-base/client', - server: './dist/server-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/static`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Hello world!'); - }); - - it('Can handle prerendered 404', async () => { - const url = `http://${server.host}:${server.port}/some-base/missing`; - const res1 = await fetch(url); - const res2 = await fetch(url); - const res3 = await fetch(url); - - assert.equal(res1.status, 404); - assert.equal(res2.status, 404); - assert.equal(res3.status, 404); - - const html1 = await res1.text(); - const html2 = await res2.text(); - const html3 = await res3.text(); - - assert.equal(html1, html2); - assert.equal(html2, html3); - - const $ = cheerio.load(html1); - - assert.equal($('body').text(), 'Page does not exist'); - }); - - it(' Can handle prerendered 500 called indirectly', async () => { - const url = `http://${server.host}:${server.port}/some-base/fivehundred`; - const response1 = await fetch(url); - const response2 = await fetch(url); - const response3 = await fetch(url); - - assert.equal(response1.status, 500); - - const html1 = await response1.text(); - const html2 = await response2.text(); - const html3 = await response3.text(); - - assert.equal(html1.includes('Something went wrong'), true); - - assert.equal(html1, html2); - assert.equal(html2, html3); - }); - - it('prerendered 500 page includes expected styles', async () => { - const response = await fetch(`http://${server.host}:${server.port}/some-base/fivehundred`); - const html = await response.text(); - const $ = cheerio.load(html); - - // length will be 0 if the stylesheet does not get included - assert.equal($('style').length, 1); - }); - }); - - describe('Without base', async () => { - before(async () => { - process.env.PRERENDER = true; - - fixture = await loadFixture({ - // inconsequential config that differs between tests - // to bust cache and prevent modules and their state - // from being reused - site: 'https://test.info/', - root: './fixtures/prerender-404-500/', - output: 'server', - outDir: './dist/server-without-base', - build: { - client: './dist/server-without-base/client', - server: './dist/server-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/static`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Hello world!'); - }); - - it('Can handle prerendered 404', async () => { - const url = `http://${server.host}:${server.port}/some-base/missing`; - const res1 = await fetch(url); - const res2 = await fetch(url); - const res3 = await fetch(url); - - assert.equal(res1.status, 404); - assert.equal(res2.status, 404); - assert.equal(res3.status, 404); - - const html1 = await res1.text(); - const html2 = await res2.text(); - const html3 = await res3.text(); - - assert.equal(html1, html2); - assert.equal(html2, html3); - - const $ = cheerio.load(html1); - - assert.equal($('body').text(), 'Page does not exist'); - }); - }); -}); - -describe('Hybrid 404', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - describe('With base', async () => { - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - // inconsequential config that differs between tests - // to bust cache and prevent modules and their state - // from being reused - site: 'https://test.com/', - base: '/some-base', - root: './fixtures/prerender-404-500/', - output: 'hybrid', - outDir: './dist/hybrid-with-base', - build: { - client: './dist/hybrid-with-base/client', - server: './dist/hybrid-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/static`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Hello world!'); - }); - - it('Can handle prerendered 404', async () => { - const url = `http://${server.host}:${server.port}/some-base/missing`; - const res1 = await fetch(url); - const res2 = await fetch(url); - const res3 = await fetch(url); - - assert.equal(res1.status, 404); - assert.equal(res2.status, 404); - assert.equal(res3.status, 404); - - const html1 = await res1.text(); - const html2 = await res2.text(); - const html3 = await res3.text(); - - assert.equal(html1, html2); - assert.equal(html2, html3); - - const $ = cheerio.load(html1); - - assert.equal($('body').text(), 'Page does not exist'); - }); - }); - - describe('Without base', async () => { - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - // inconsequential config that differs between tests - // to bust cache and prevent modules and their state - // from being reused - site: 'https://test.net/', - root: './fixtures/prerender-404-500/', - output: 'hybrid', - outDir: './dist/hybrid-without-base', - build: { - client: './dist/hybrid-without-base/client', - server: './dist/hybrid-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/static`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Hello world!'); - }); - - it('Can handle prerendered 404', async () => { - const url = `http://${server.host}:${server.port}/missing`; - const res1 = await fetch(url); - const res2 = await fetch(url); - const res3 = await fetch(url); - - assert.equal(res1.status, 404); - assert.equal(res2.status, 404); - assert.equal(res3.status, 404); - - const html1 = await res1.text(); - const html2 = await res2.text(); - const html3 = await res3.text(); - - assert.equal(html1, html2); - assert.equal(html2, html3); - - const $ = cheerio.load(html1); - - assert.equal($('body').text(), 'Page does not exist'); - }); - }); -}); diff --git a/packages/integrations/node/test/prerender.test.js b/packages/integrations/node/test/prerender.test.js deleted file mode 100644 index e699a1b3c..000000000 --- a/packages/integrations/node/test/prerender.test.js +++ /dev/null @@ -1,438 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { loadFixture, waitServerListen } from './test-utils.js'; - -/** - * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture - */ - -describe('Prerendering', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - describe('With base', async () => { - before(async () => { - process.env.PRERENDER = true; - - fixture = await loadFixture({ - base: '/some-base', - root: './fixtures/prerender/', - output: 'server', - outDir: './dist/with-base', - build: { - client: './dist/with-base/client', - server: './dist/with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/two`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - assert.ok(fixture.pathExists('/client/two/index.html')); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/two?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/two/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - - it('Can render prerendered route without trailing slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/two`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - }); - - describe('Without base', async () => { - before(async () => { - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/prerender/', - output: 'server', - outDir: './dist/without-base', - build: { - client: './dist/without-base/client', - server: './dist/without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/two`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - assert.ok(fixture.pathExists('/client/two/index.html')); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/two?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/two/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - }); - - describe('Via integration', () => { - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - root: './fixtures/prerender/', - output: 'server', - outDir: './dist/via-integration', - build: { - client: './dist/via-integration/client', - server: './dist/via-integration/server', - }, - adapter: nodejs({ mode: 'standalone' }), - integrations: [ - { - name: 'test', - hooks: { - 'astro:route:setup': ({ route }) => { - if (route.component.endsWith('two.astro')) { - route.prerender = true; - } - }, - }, - }, - ], - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/two`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - assert.ok(fixture.pathExists('/client/two/index.html')); - }); - }); - - describe('Dev', () => { - let devServer; - - before(async () => { - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/prerender/', - output: 'server', - outDir: './dist/dev', - build: { - client: './dist/dev/client', - server: './dist/dev/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - devServer = await fixture.startDevServer(); - }); - - after(async () => { - await devServer.stop(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fixture.fetch(`/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route', async () => { - const res = await fixture.fetch(`/two`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - }); -}); - -describe('Hybrid rendering', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - - describe('With base', () => { - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - base: '/some-base', - root: './fixtures/prerender/', - output: 'hybrid', - outDir: './dist/hybrid-with-base', - build: { - client: './dist/hybrid-with-base/client', - server: './dist/hybrid-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/two`); - const html = await res.text(); - const $ = cheerio.load(html); - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - - it('Can render prerendered route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - assert.ok(fixture.pathExists('/client/one/index.html')); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route without trailing slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - - describe('Without base', () => { - before(async () => { - process.env.PRERENDER = false; - fixture = await loadFixture({ - root: './fixtures/prerender/', - output: 'hybrid', - outDir: './dist/hybrid-without-base', - build: { - client: './dist/hybrid-without-base/client', - server: './dist/hybrid-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/two`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Two'); - }); - - it('Can render prerendered route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - assert.ok(fixture.pathExists('/client/one/index.html')); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - - describe('Shared modules', () => { - before(async () => { - process.env.PRERENDER = false; - - fixture = await loadFixture({ - root: './fixtures/prerender/', - output: 'hybrid', - outDir: './dist/hybrid-shared-modules', - build: { - client: './dist/hybrid-shared-modules/client', - server: './dist/hybrid-shared-modules/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render SSR route', async () => { - const res = await fetch(`http://${server.host}:${server.port}/third`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'shared'); - }); - }); -}); diff --git a/packages/integrations/node/test/preview-headers.test.js b/packages/integrations/node/test/preview-headers.test.js deleted file mode 100644 index 3fd9d0508..000000000 --- a/packages/integrations/node/test/preview-headers.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -describe('Astro preview headers', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let devPreview; - const headers = { - astro: 'test', - }; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/preview-headers/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - server: { - headers, - }, - }); - await fixture.build(); - devPreview = await fixture.preview(); - }); - - after(async () => { - await devPreview.stop(); - }); - - describe('Preview Headers', () => { - it('returns custom headers for valid URLs', async () => { - const result = await fixture.fetch('/'); - assert.equal(result.status, 200); - assert.equal(Object.fromEntries(result.headers).astro, headers.astro); - }); - }); -}); diff --git a/packages/integrations/node/test/server-host.test.js b/packages/integrations/node/test/server-host.test.js deleted file mode 100644 index facd32d47..000000000 --- a/packages/integrations/node/test/server-host.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { describe, it } from 'node:test'; -import { hostOptions } from '../dist/standalone.js'; - -describe('host', () => { - it('returns "0.0.0.0" when host is true', () => { - const options = { host: true }; - assert.equal(hostOptions(options.host), '0.0.0.0'); - }); - - it('returns "localhost" when host is false', () => { - const options = { host: false }; - assert.equal(hostOptions(options.host), 'localhost'); - }); - - it('returns the value of host when host is a string', () => { - const host = '1.1.1.1'; - const options = { host }; - assert.equal(hostOptions(options.host), host); - }); -}); diff --git a/packages/integrations/node/test/test-utils.js b/packages/integrations/node/test/test-utils.js deleted file mode 100644 index 10faba5cf..000000000 --- a/packages/integrations/node/test/test-utils.js +++ /dev/null @@ -1,81 +0,0 @@ -import { EventEmitter } from 'node:events'; -import httpMocks from 'node-mocks-http'; -import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js'; - -process.env.ASTRO_NODE_AUTOSTART = 'disabled'; -process.env.ASTRO_NODE_LOGGING = 'disabled'; -/** - * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture - */ - -export function loadFixture(inlineConfig) { - if (!inlineConfig?.root) throw new Error("Must provide { root: './fixtures/...' }"); - - // resolve the relative root (i.e. "./fixtures/tailwindcss") to a full filepath - // without this, the main `loadFixture` helper will resolve relative to `packages/astro/test` - return baseLoadFixture({ - ...inlineConfig, - root: new URL(inlineConfig.root, import.meta.url).toString(), - }); -} - -export function createRequestAndResponse(reqOptions) { - let req = httpMocks.createRequest(reqOptions); - - let res = httpMocks.createResponse({ - eventEmitter: EventEmitter, - req, - }); - - let done = toPromise(res); - - // Get the response as text - const text = async () => { - let chunks = await done; - return buffersToString(chunks); - }; - - return { req, res, done, text }; -} - -export function toPromise(res) { - return new Promise((resolve) => { - // node-mocks-http doesn't correctly handle non-Buffer typed arrays, - // so override the write method to fix it. - const write = res.write; - res.write = function (data, encoding) { - if (ArrayBuffer.isView(data) && !Buffer.isBuffer(data)) { - data = Buffer.from(data.buffer); - } - return write.call(this, data, encoding); - }; - res.on('end', () => { - let chunks = res._getChunks(); - resolve(chunks); - }); - }); -} - -export function buffersToString(buffers) { - let decoder = new TextDecoder(); - let str = ''; - for (const buffer of buffers) { - str += decoder.decode(buffer); - } - return str; -} - -export function waitServerListen(server) { - return new Promise((resolve, reject) => { - function onListen() { - server.off('error', onError); - resolve(); - } - function onError(error) { - server.off('listening', onListen); - reject(error); - } - server.once('listening', onListen); - server.once('error', onError); - }); -} diff --git a/packages/integrations/node/test/trailing-slash.test.js b/packages/integrations/node/test/trailing-slash.test.js deleted file mode 100644 index 9ea8fcddd..000000000 --- a/packages/integrations/node/test/trailing-slash.test.js +++ /dev/null @@ -1,452 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { loadFixture, waitServerListen } from './test-utils.js'; - -/** - * @typedef {import('../../../astro/test/test-utils').Fixture} Fixture - */ - -describe('Trailing slash', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - let server; - describe('Always', async () => { - describe('With base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - base: '/some-base', - output: 'hybrid', - trailingSlash: 'always', - outDir: './dist/always-with-base', - build: { - client: './dist/always-with-base/client', - server: './dist/always-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with redirect', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/some-base/one/'); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/some-base/one/?foo=bar'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Does not add trailing slash to subresource urls', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one.css`); - const css = await res.text(); - - assert.equal(res.status, 200); - assert.equal(css, 'h1 { color: red; }\n'); - }); - }); - describe('Without base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - output: 'hybrid', - trailingSlash: 'always', - outDir: './dist/always-without-base', - build: { - client: './dist/always-without-base/client', - server: './dist/always-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with redirect', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/one/'); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/one/?foo=bar'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Does not add trailing slash to subresource urls', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one.css`); - const css = await res.text(); - - assert.equal(res.status, 200); - assert.equal(css, 'h1 { color: red; }\n'); - }); - }); - }); - describe('Never', async () => { - describe('With base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - base: '/some-base', - output: 'hybrid', - trailingSlash: 'never', - outDir: './dist/never-with-base', - build: { - client: './dist/never-with-base/client', - server: './dist/never-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with redirect', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/some-base/one'); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, { - redirect: 'manual', - }); - - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/some-base/one?foo=bar'); - }); - - it('Can render prerendered route with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - describe('Without base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - output: 'hybrid', - trailingSlash: 'never', - outDir: './dist/never-without-base', - build: { - client: './dist/never-without-base/client', - server: './dist/never-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with redirect', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/`, { - redirect: 'manual', - }); - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/one'); - }); - - it('Can render prerendered route with redirect and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, { - redirect: 'manual', - }); - - assert.equal(res.status, 301); - assert.equal(res.headers.get('location'), '/one?foo=bar'); - }); - - it('Can render prerendered route and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - }); - describe('Ignore', async () => { - describe('With base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - base: '/some-base', - output: 'hybrid', - trailingSlash: 'ignore', - outDir: './dist/ignore-with-base', - build: { - client: './dist/ignore-with-base/client', - server: './dist/ignore-with-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route without slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route with slash and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one/?foo=bar`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route without slash and with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/some-base/one?foo=bar`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - describe('Without base', async () => { - before(async () => { - process.env.ASTRO_NODE_AUTOSTART = 'disabled'; - process.env.PRERENDER = true; - - fixture = await loadFixture({ - root: './fixtures/trailing-slash/', - output: 'hybrid', - trailingSlash: 'ignore', - outDir: './dist/ignore-without-base', - build: { - client: './dist/ignore-without-base/client', - server: './dist/ignore-without-base/server', - }, - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - const { startServer } = await fixture.loadAdapterEntryModule(); - let res = startServer(); - server = res.server; - await waitServerListen(server.server); - }); - - after(async () => { - await server.stop(); - await fixture.clean(); - delete process.env.PRERENDER; - }); - - it('Can render prerendered base route', async () => { - const res = await fetch(`http://${server.host}:${server.port}`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'Index'); - }); - - it('Can render prerendered route with slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route without slash', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route with slash and query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one/?foo=bar`, { - redirect: 'manual', - }); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - - it('Can render prerendered route without slash and with query params', async () => { - const res = await fetch(`http://${server.host}:${server.port}/one?foo=bar`); - const html = await res.text(); - const $ = cheerio.load(html); - - assert.equal(res.status, 200); - assert.equal($('h1').text(), 'One'); - }); - }); - }); -}); diff --git a/packages/integrations/node/test/url.test.js b/packages/integrations/node/test/url.test.js deleted file mode 100644 index 77ca45836..000000000 --- a/packages/integrations/node/test/url.test.js +++ /dev/null @@ -1,115 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { before, describe, it } from 'node:test'; -import { TLSSocket } from 'node:tls'; -import * as cheerio from 'cheerio'; -import nodejs from '../dist/index.js'; -import { createRequestAndResponse, loadFixture } from './test-utils.js'; - -describe('URL', () => { - /** @type {import('./test-utils.js').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/url/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - }); - - it('return http when non-secure', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('http:'), true); - }); - - it('return https when secure', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - socket: new TLSSocket(), - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('https:'), true); - }); - - it('return http when the X-Forwarded-Proto header is set to http', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - headers: { 'X-Forwarded-Proto': 'http' }, - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('http:'), true); - }); - - it('return https when the X-Forwarded-Proto header is set to https', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - headers: { 'X-Forwarded-Proto': 'https' }, - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - assert.equal(html.includes('https:'), true); - }); - - it('includes forwarded host and port in the url', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - headers: { - 'X-Forwarded-Proto': 'https', - 'X-Forwarded-Host': 'abc.xyz', - 'X-Forwarded-Port': '444', - }, - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - const $ = cheerio.load(html); - - assert.equal($('body').text(), 'https://abc.xyz:444/'); - }); - - it('accepts port in forwarded host and forwarded port', async () => { - const { handler } = await import('./fixtures/url/dist/server/entry.mjs'); - let { req, res, text } = createRequestAndResponse({ - headers: { - 'X-Forwarded-Proto': 'https', - 'X-Forwarded-Host': 'abc.xyz:444', - 'X-Forwarded-Port': '444', - }, - url: '/', - }); - - handler(req, res); - req.send(); - - const html = await text(); - const $ = cheerio.load(html); - - assert.equal($('body').text(), 'https://abc.xyz:444/'); - }); -}); diff --git a/packages/integrations/node/test/well-known-locations.test.js b/packages/integrations/node/test/well-known-locations.test.js deleted file mode 100644 index 0951d6c27..000000000 --- a/packages/integrations/node/test/well-known-locations.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { after, before, describe, it } from 'node:test'; -import nodejs from '../dist/index.js'; -import { loadFixture } from './test-utils.js'; - -describe('test URIs beginning with a dot', () => { - /** @type {import('./test-utils').Fixture} */ - let fixture; - - before(async () => { - fixture = await loadFixture({ - root: './fixtures/well-known-locations/', - output: 'server', - adapter: nodejs({ mode: 'standalone' }), - }); - await fixture.build(); - }); - - describe('can load well-known URIs', async () => { - let devPreview; - - before(async () => { - devPreview = await fixture.preview(); - }); - - after(async () => { - await devPreview.stop(); - }); - - it('can load a valid well-known URI', async () => { - const res = await fixture.fetch('/.well-known/apple-app-site-association'); - - assert.equal(res.status, 200); - - const json = await res.json(); - - assert.notEqual(json.applinks, {}); - }); - - it('cannot load a dot folder that is not a well-known URI', async () => { - const res = await fixture.fetch('/.hidden/file.json'); - - assert.equal(res.status, 404); - }); - }); -}); |