UNPKG

@netlify/functions

Version:

JavaScript utilities for Netlify Functions

167 lines (165 loc) 5.82 kB
import { init_main, invokeLambda } from "../chunk-QG2PP5NG.mjs"; import { globalExpect, init_dist, test } from "../chunk-ZE4ZZELD.mjs"; import { init_builder, wrapHandler } from "../chunk-6V4VUZWK.mjs"; import "../chunk-7VFCQORF.mjs"; import { __commonJS } from "../chunk-C6P2IO65.mjs"; // src/lib/builder.test.ts var require_builder_test = __commonJS({ "src/lib/builder.test.ts"() { init_dist(); init_main(); init_builder(); var METADATA_OBJECT = { metadata: { version: 1, builder_function: true, ttl: 0 } }; test("Injects the metadata object into an asynchronous handler", async () => { const ttl = 3600; const originalResponse = { body: ":thumbsup:", statusCode: 200, ttl }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler)); globalExpect(response).toStrictEqual({ ...originalResponse, metadata: { version: 1, builder_function: true, ttl } }); }); test("Injects the metadata object into a synchronous handler", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = (event, context, callback) => { callback?.(null, originalResponse); }; const response = await invokeLambda(wrapHandler(myHandler)); globalExpect(response).toStrictEqual({ ...originalResponse, ...METADATA_OBJECT }); }); test("Injects the metadata object for non-200 responses", async () => { const originalResponse = { body: ":thumbsdown:", statusCode: 404 }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler)); globalExpect(response).toStrictEqual({ ...originalResponse, ...METADATA_OBJECT }); }); test("Returns a 405 error for requests using the POST method", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler), { method: "POST" }); globalExpect(response).toStrictEqual({ body: "Method Not Allowed", statusCode: 405 }); }); test("Returns a 405 error for requests using the PUT method", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler), { method: "PUT" }); globalExpect(response).toStrictEqual({ body: "Method Not Allowed", statusCode: 405 }); }); test("Returns a 405 error for requests using the DELETE method", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler), { method: "DELETE" }); globalExpect(response).toStrictEqual({ body: "Method Not Allowed", statusCode: 405 }); }); test("Returns a 405 error for requests using the PATCH method", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; return originalResponse; }; const response = await invokeLambda(wrapHandler(myHandler), { method: "PATCH" }); globalExpect(response).toStrictEqual({ body: "Method Not Allowed", statusCode: 405 }); }); test("Preserves errors thrown inside the wrapped handler", async () => { const error = new Error("Uh-oh!"); error.someProperty = ":thumbsdown:"; const myHandler = async () => { const asyncTask = new Promise((resolve) => { setTimeout(resolve, 0); }); await asyncTask; throw error; }; try { await invokeLambda(wrapHandler(myHandler)); throw new Error("Invocation should have failed"); } catch { } }); test("Does not pass query parameters to the wrapped handler", async () => { const originalResponse = { body: ":thumbsup:", statusCode: 200 }; const myHandler = async (event) => { globalExpect(event.multiValueQueryStringParameters).toStrictEqual({}); globalExpect(event.queryStringParameters).toStrictEqual({}); return originalResponse; }; const multiValueQueryStringParameters = { foo: ["bar"], bar: ["baz"] }; const queryStringParameters = { foo: "bar", bar: "baz" }; const response = await invokeLambda(wrapHandler(myHandler), { // @ts-expect-error TODO: Fic types. multiValueQueryStringParameters, queryStringParameters }); globalExpect(response).toStrictEqual({ ...originalResponse, ...METADATA_OBJECT }); }); } }); export default require_builder_test();