diff options
Diffstat (limited to 'packages/integrations/netlify/test/functions/fixtures')
46 files changed, 425 insertions, 0 deletions
diff --git a/packages/integrations/netlify/test/functions/fixtures/.gitignore b/packages/integrations/netlify/test/functions/fixtures/.gitignore new file mode 100644 index 000000000..916f60644 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/.gitignore @@ -0,0 +1 @@ +**/netlify diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts new file mode 100644 index 000000000..03d7cc43f --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/.astro/types.d.ts @@ -0,0 +1,2 @@ +/// <reference types="astro/client" /> +/// <reference path="content.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs new file mode 100644 index 000000000..033024c1a --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/astro.config.mjs @@ -0,0 +1,11 @@ +import netlify from '@astrojs/netlify'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: 'server', + adapter: netlify(), + site: `http://example.com`, + security: { + checkOrigin: false + } +});
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/package.json b/packages/integrations/netlify/test/functions/fixtures/cookies/package.json new file mode 100644 index 000000000..14257a558 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/netlify-cookies", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/netlify": "workspace:" + } +} diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts new file mode 100644 index 000000000..9bc5cb41c --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/env.d.ts @@ -0,0 +1 @@ +/// <reference path="../.astro/types.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro new file mode 100644 index 000000000..9049fa0fb --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/404.astro @@ -0,0 +1,7 @@ +--- +export const prerender = false +const header = Astro.request.headers.get("x-test") +--- + +<p>This is my custom 404 page</p> +<p>x-test: {header}</p>
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro new file mode 100644 index 000000000..53e029f04 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/index.astro @@ -0,0 +1,6 @@ +<html> +<head><title>Testing</title></head> +<body> + <h1>Testing</h1> +</body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js new file mode 100644 index 000000000..3f1fe17b5 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/cookies/src/pages/login.js @@ -0,0 +1,12 @@ + +export function POST() { + const headers = new Headers(); + headers.append('Set-Cookie', `foo=foo; HttpOnly`); + headers.append('Set-Cookie', `bar=bar; HttpOnly`); + headers.append('Location', '/'); + + return new Response('', { + status: 301, + headers, + }); +} diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs new file mode 100644 index 000000000..26c74eda2 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/astro.config.mjs @@ -0,0 +1,8 @@ +import netlify from '@astrojs/netlify'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: 'server', + adapter: netlify(), + site: "http://example.com", +});
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv new file mode 100644 index 000000000..3fde4e202 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/also-this.csv @@ -0,0 +1 @@ +1,2,3
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json b/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/exclude-asset.json @@ -0,0 +1 @@ +{} diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-asset.json @@ -0,0 +1 @@ +{}
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt new file mode 100644 index 000000000..b6fc4c620 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/include-this.txt @@ -0,0 +1 @@ +hello
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv new file mode 100644 index 000000000..3fde4e202 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/and-this.csv @@ -0,0 +1 @@ +1,2,3
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv new file mode 100644 index 000000000..3fde4e202 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/not-this.csv @@ -0,0 +1 @@ +1,2,3
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt new file mode 100644 index 000000000..b6fc4c620 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/files/subdirectory/or-this.txt @@ -0,0 +1 @@ +hello
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/package.json b/packages/integrations/netlify/test/functions/fixtures/includes/package.json new file mode 100644 index 000000000..ea227a200 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/netlify-includes", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/netlify": "workspace:", + "cowsay": "1.6.0" + } +} diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro new file mode 100644 index 000000000..9049fa0fb --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/404.astro @@ -0,0 +1,7 @@ +--- +export const prerender = false +const header = Astro.request.headers.get("x-test") +--- + +<p>This is my custom 404 page</p> +<p>x-test: {header}</p>
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro new file mode 100644 index 000000000..0fd8b479f --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/includes/src/pages/index.astro @@ -0,0 +1,27 @@ +--- +import { promises as fs } from 'fs'; +import { fileURLToPath } from 'url'; +import { dirname, join } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const loadFile = Astro.url.searchParams.get('file'); + +const file = await fs.readFile(join(__dirname, `../../../files/${loadFile}`), 'utf-8'); + +async function moo() { + const cow = await import('cowsay'); + return cow.say({ text: 'Moo!' }); +} + +if (Astro.url.searchParams.get('moo')) { + await moo(); +} +--- +<html> +<head><title>Testing</title></head> +<body> + {loadFile && <h1>{file}</h1>} +</body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts new file mode 100644 index 000000000..03d7cc43f --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/.astro/types.d.ts @@ -0,0 +1,2 @@ +/// <reference types="astro/client" /> +/// <reference path="content.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs new file mode 100644 index 000000000..0da6bf580 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/astro.config.mjs @@ -0,0 +1,19 @@ +import netlify from '@astrojs/netlify'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: 'server', + adapter: netlify({ + edgeMiddleware: process.env.EDGE_MIDDLEWARE === 'true', + imageCDN: process.env.DISABLE_IMAGE_CDN ? false : undefined, + }), + image: { + remotePatterns: [{ + protocol: 'https', + hostname: '*.example.org', + pathname: '/images/*', + }], + domains: ['example.net', 'secret.example.edu'], + }, + site: `http://example.com`, +});
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/package.json b/packages/integrations/netlify/test/functions/fixtures/middleware/package.json new file mode 100644 index 000000000..ddc811223 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/netlify-middleware-without-handler-file", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/netlify": "workspace:", + "sharp": "^0.33.5" + } +} diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg b/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg Binary files differnew file mode 100644 index 000000000..d3326bcc7 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/astronaut.jpg diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts new file mode 100644 index 000000000..9bc5cb41c --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/env.d.ts @@ -0,0 +1 @@ +/// <reference path="../.astro/types.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts b/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts new file mode 100644 index 000000000..9790b8755 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/middleware.ts @@ -0,0 +1,8 @@ +import https from 'node:https'; + +export const onRequest = (context, next) => { + context.locals.title = 'Middleware'; + context.locals.nodePrefixedImportExists = !!https; + + return next(); +}; diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro new file mode 100644 index 000000000..b3da724c3 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/astronaut.astro @@ -0,0 +1,9 @@ +--- +import { Image } from 'astro:assets'; +import astronautImageĀ from "../astronaut.jpg" + +export const prerender = true; +--- + +<Image src={astronautImage} alt="an astronaut floating in space" /> + diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro new file mode 100644 index 000000000..d97f70698 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/index.astro @@ -0,0 +1,12 @@ +--- +const title = Astro.locals.title; +--- + +<html> +<head> + <title>{title}</title> +</head> +<body> +<h1>{title}</h1> +</body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro new file mode 100644 index 000000000..f0314c053 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/middleware/src/pages/prerender.astro @@ -0,0 +1,13 @@ +--- +export const prerender = true; +const title = Astro.locals.title; +--- + +<html> +<head> + <title>{title}</title> +</head> +<body> +<h1>{title}</h1> +</body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts b/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts new file mode 100644 index 000000000..03d7cc43f --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/.astro/types.d.ts @@ -0,0 +1,2 @@ +/// <reference types="astro/client" /> +/// <reference path="content.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs new file mode 100644 index 000000000..55613bd91 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/astro.config.mjs @@ -0,0 +1,11 @@ +import netlify from '@astrojs/netlify'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: 'static', + adapter: netlify(), + site: `http://example.com`, + redirects: { + '/other': '/', + }, +}); diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/package.json b/packages/integrations/netlify/test/functions/fixtures/redirects/package.json new file mode 100644 index 000000000..9970a81de --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/netlify-redirects", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/netlify": "workspace:" + } +} diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts b/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts new file mode 100644 index 000000000..9bc5cb41c --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/env.d.ts @@ -0,0 +1 @@ +/// <reference path="../.astro/types.d.ts" />
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro new file mode 100644 index 000000000..b9e3eda13 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/404.astro @@ -0,0 +1,5 @@ +--- +export const prerender = true +--- + +<p>This is my static 404 page</p>
\ No newline at end of file diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro new file mode 100644 index 000000000..41f740c4c --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/index.astro @@ -0,0 +1,9 @@ +--- +export const prerender = false; +--- +<html> +<head><title>Testing</title></head> +<body> + <h1>Testing</h1> +</body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro new file mode 100644 index 000000000..f48d767ee --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/nope.astro @@ -0,0 +1,3 @@ +--- +return Astro.redirect('/'); +--- diff --git a/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro new file mode 100644 index 000000000..996cd989e --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/redirects/src/pages/team/articles/[...slug].astro @@ -0,0 +1,27 @@ +--- +export const prerender = false; + +export const getStaticPaths = (async () => { + const posts = [ + { slug: 'one', data: {draft: false, title: 'One'} }, + { slug: 'two', data: {draft: false, title: 'Two'} } + ]; + return posts.map((post) => { + return { + params: { slug: post.slug }, + props: { draft: post.data.draft, title: post.data.title }, + }; + }); +}) + +const { slug } = Astro.params; +const { title } = Astro.props; +--- +<html> + <head> + <title>{ title }</title> + </head> + <body> + <h1>{ title }</h1> + </body> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs b/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs new file mode 100644 index 000000000..f7ac423c9 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/astro.config.mjs @@ -0,0 +1,8 @@ +import netlify from '@astrojs/netlify'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + output: 'server', + adapter: netlify(), + site: `http://example.com` +}); diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/package.json b/packages/integrations/netlify/test/functions/fixtures/sessions/package.json new file mode 100644 index 000000000..ed3de61f7 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/package.json @@ -0,0 +1,15 @@ +{ + "name": "@test/netlify-session", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/netlify": "workspace:*" + }, + "devDependencies": { + "astro": "workspace:*" + }, + "scripts": { + "build": "astro build", + "start": "astro dev" + } +} diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts new file mode 100644 index 000000000..856f68ba8 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/actions/index.ts @@ -0,0 +1,36 @@ +import { defineAction } from 'astro:actions'; +import { z } from 'astro:schema'; + +export const server = { + addToCart: defineAction({ + accept: 'form', + input: z.object({ productId: z.string() }), + handler: async (input, context) => { + const cart: Array<string> = (await context.session.get('cart')) || []; + cart.push(input.productId); + await context.session.set('cart', cart); + return { cart, message: 'Product added to cart at ' + new Date().toTimeString() }; + }, + }), + getCart: defineAction({ + handler: async (input, context) => { + return await context.session.get('cart'); + }, + }), + clearCart: defineAction({ + accept: 'json', + handler: async (input, context) => { + await context.session.set('cart', []); + return { cart: [], message: 'Cart cleared at ' + new Date().toTimeString() }; + }, + }), + addUrl: defineAction({ + input: z.object({ favoriteUrl: z.string().url() }), + handler: async (input, context) => { + const previousFavoriteUrl = await context.session.get<URL>('favoriteUrl'); + const url = new URL(input.favoriteUrl); + context.session.set('favoriteUrl', url); + return { message: 'Favorite URL set to ' + url.href + ' from ' + (previousFavoriteUrl?.href ?? "nothing") }; + } + }) +} diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts new file mode 100644 index 000000000..7f56f11f3 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/middleware.ts @@ -0,0 +1,49 @@ +import { defineMiddleware } from 'astro:middleware'; +import { getActionContext } from 'astro:actions'; + +const ACTION_SESSION_KEY = 'actionResult' + +export const onRequest = defineMiddleware(async (context, next) => { + // Skip requests for prerendered pages + if (context.isPrerendered) return next(); + + const { action, setActionResult, serializeActionResult } = + getActionContext(context); + + console.log(action?.name) + + const actionPayload = await context.session.get(ACTION_SESSION_KEY); + + if (actionPayload) { + setActionResult(actionPayload.actionName, actionPayload.actionResult); + context.session.delete(ACTION_SESSION_KEY); + return next(); + } + + // If an action was called from an HTML form action, + // call the action handler and redirect to the destination page + if (action?.calledFrom === "form") { + const actionResult = await action.handler(); + + context.session.set(ACTION_SESSION_KEY, { + actionName: action.name, + actionResult: serializeActionResult(actionResult), + }); + + + // Redirect back to the previous page on error + if (actionResult.error) { + const referer = context.request.headers.get("Referer"); + if (!referer) { + throw new Error( + "Internal: Referer unexpectedly missing from Action POST request.", + ); + } + return context.redirect(referer); + } + // Redirect to the destination page on success + return context.redirect(context.originPathname); + } + + return next(); +}); diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts new file mode 100644 index 000000000..21793c78a --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/api.ts @@ -0,0 +1,13 @@ +import type { APIRoute } from 'astro'; + +export const GET: APIRoute = async (context) => { + const url = new URL(context.url, 'http://localhost'); + let value = url.searchParams.get('set'); + if (value) { + context.session.set('value', value); + } else { + value = await context.session.get('value'); + } + const cart = await context.session.get('cart'); + return Response.json({ value, cart }); +}; diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro new file mode 100644 index 000000000..e69a9e5e1 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/cart.astro @@ -0,0 +1,24 @@ +--- +import { actions } from "astro:actions"; + +const result = Astro.getActionResult(actions.addToCart); + +const cart = result?.data?.cart ?? await Astro.session.get('cart'); +const message = result?.data?.message ?? 'Add something to your cart!'; +--- +<p>Cart: <span id="cart">{JSON.stringify(cart)}</span></p> +<p id="message">{message}</p> +<form action={actions.addToCart} method="POST"> + <input type="text" name="productId" value="shoe" /> + <button type="submit">Add to Cart</button> +</form> +<input type="button" value="Clear Cart" id="clearCart" /> +<script> + import { actions } from "astro:actions"; + async function clearCart() { + const result = await actions.clearCart({}); + document.getElementById('cart').textContent = JSON.stringify(result.data.cart); + document.getElementById('message').textContent = result.data.message; + } + document.getElementById('clearCart').addEventListener('click', clearCart); +</script> diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts new file mode 100644 index 000000000..e83f6e4b6 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/destroy.ts @@ -0,0 +1,6 @@ +import type { APIRoute } from 'astro'; + +export const GET: APIRoute = async (context) => { + await context.session.destroy(); + return Response.json({}); +}; diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro new file mode 100644 index 000000000..30d6a1618 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/index.astro @@ -0,0 +1,13 @@ +--- +const value = await Astro.session.get('value'); +--- +<html lang="en"> +<head> + <meta charset="utf-8" /> + <title>Hi</title> +</head> + +<h1>Hi</h1> +<p>{value}</p> +<a href="/cart" style="font-size: 36px">š</a> +</html> diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts new file mode 100644 index 000000000..6f2240588 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/regenerate.ts @@ -0,0 +1,6 @@ +import type { APIRoute } from 'astro'; + +export const GET: APIRoute = async (context) => { + await context.session.regenerate(); + return Response.json({}); +}; diff --git a/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts new file mode 100644 index 000000000..71b058e75 --- /dev/null +++ b/packages/integrations/netlify/test/functions/fixtures/sessions/src/pages/update.ts @@ -0,0 +1,10 @@ +import type { APIRoute } from 'astro'; + +export const GET: APIRoute = async (context) => { + const previousObject = await context.session.get("key") ?? { value: "none" }; + const previousValue = previousObject.value; + const sessionData = { value: "expected" }; + context.session.set("key", sessionData); + sessionData.value = "unexpected"; + return Response.json({previousValue}); +}; |