UNPKG

@esmx/core

Version:

A high-performance microfrontend framework supporting Vue, React, Preact, Solid, and Svelte with SSR and Module Federation capabilities.

110 lines (109 loc) 3.46 kB
import { assert, test } from "vitest"; import { isImmutableFile, mergeMiddlewares } from "./middleware.mjs"; test("should identify immutable files with .final. extension", () => { assert.equal(isImmutableFile("script.final.js"), true); assert.equal(isImmutableFile("style.final.css"), true); assert.equal(isImmutableFile("app.final.mjs"), true); assert.equal(isImmutableFile("chunk.final.123abc.js"), false); }); test("should return false for non-immutable files", () => { assert.equal(isImmutableFile("script.js"), false); assert.equal(isImmutableFile("style.css"), false); assert.equal(isImmutableFile("app.mjs"), false); assert.equal(isImmutableFile(".final"), false); assert.equal(isImmutableFile("final.js"), false); assert.equal(isImmutableFile("test.finally.js"), false); }); test("should handle paths with directories", () => { assert.equal(isImmutableFile("/dist/js/main.final.js"), true); assert.equal(isImmutableFile("src/components/index.final.mjs"), true); assert.equal(isImmutableFile("src/styles/main.final.css"), true); }); test("middleware chain should execute in order", () => { const executed = []; const middleware1 = (_req, _res, next) => { executed.push("middleware1"); next(); }; const middleware2 = (_req, _res, next) => { executed.push("middleware2"); next(); }; const middleware3 = (_req, _res, next) => { executed.push("middleware3"); next(); }; const merged = mergeMiddlewares([middleware1, middleware2, middleware3]); merged({}, {}, () => { executed.push("final"); }); assert.deepEqual(executed, [ "middleware1", "middleware2", "middleware3", "final" ]); }); test("middleware chain should stop if next is not called", () => { const executed = []; const middleware1 = (_req, _res, next) => { executed.push("middleware1"); next(); }; const middleware2 = (_req, _res, _next) => { executed.push("middleware2"); }; const middleware3 = (_req, _res, next) => { executed.push("middleware3"); next(); }; const merged = mergeMiddlewares([middleware1, middleware2, middleware3]); merged({}, {}, () => { executed.push("final"); }); assert.deepEqual(executed, ["middleware1", "middleware2"]); }); test("empty middleware array should call final next", () => { const executed = []; const merged = mergeMiddlewares([]); merged({}, {}, () => { executed.push("final"); }); assert.deepEqual(executed, ["final"]); }); test("middleware should receive correct request and response objects", () => { const req = { url: "/test" }; const res = { statusCode: 200 }; let passedReq; let passedRes; const middleware = (req2, res2, next) => { passedReq = req2; passedRes = res2; next(); }; const merged = mergeMiddlewares([middleware]); merged(req, res, () => { }); assert.equal(passedReq, req); assert.equal(passedRes, res); }); test("should handle errors in middleware chain", () => { const executed = []; const errorMiddleware = (_req, _res, _next) => { executed.push("error"); throw new Error("Test error"); }; const nextMiddleware = (_req, _res, next) => { executed.push("next"); next(); }; const merged = mergeMiddlewares([errorMiddleware, nextMiddleware]); try { merged({}, {}, () => { executed.push("final"); }); } catch (err) { executed.push("caught"); } assert.deepEqual(executed, ["error", "caught"]); });