@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
JavaScript
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"]);
});