1
0
Fork 0
forked from svrjs/svrjs
This repository has been archived on 2024-11-10. You can view files and clone it, but cannot push or open issues or pull requests.
svrjs/tests/middleware/status.test.js

77 lines
2.6 KiB
JavaScript

const middleware = require("../../src/middleware/status.js");
const http = require("http");
const os = require("os");
describe("Status middleware", () => {
let req, res, logFacilities, config, next;
beforeEach(() => {
req = {
parsedURL: { pathname: "/svrjsstatus.svr" },
headers: { host: "localhost" }
};
res = {
writeHead: jest.fn(),
end: jest.fn(),
head: "",
foot: ""
};
logFacilities = {};
config = {
allowStatus: true,
generateServerString: () => "Test Server"
};
next = jest.fn();
process.reqcounter = 100;
process.err4xxcounter = 10;
process.err5xxcounter = 5;
process.malformedcounter = 2;
process.uptime = jest.fn(() => 1000);
process.memoryUsage = jest.fn(() => ({ rss: 1024 }));
process.cpuUsage = jest.fn(() => ({ user: 500000, system: 500000 }));
process.pid = 1234;
});
test("should set response headers and body when conditions are met", () => {
middleware(req, res, logFacilities, config, next);
expect(res.writeHead).toHaveBeenCalledWith(200, http.STATUS_CODES[200], {
"Content-Type": "text/html; charset=utf-8"
});
expect(res.end).toHaveBeenCalled();
});
test("should call next function when conditions are not met", () => {
req.parsedURL.pathname = "/";
middleware(req, res, logFacilities, config, next);
expect(next).toHaveBeenCalled();
});
test("should handle case insensitivity on Windows", () => {
req.parsedURL.pathname = "/SvrJsStatus.Svr";
jest.spyOn(os, "platform").mockReturnValue("win32");
middleware(req, res, logFacilities, config, next);
expect(res.writeHead).toHaveBeenCalledWith(200, http.STATUS_CODES[200], {
"Content-Type": "text/html; charset=utf-8"
});
expect(res.end).toHaveBeenCalled();
os.platform.mockRestore();
});
test("should handle undefined host header", () => {
req.headers.host = undefined;
middleware(req, res, logFacilities, config, next);
expect(res.writeHead).toHaveBeenCalledWith(200, http.STATUS_CODES[200], {
"Content-Type": "text/html; charset=utf-8"
});
expect(res.end).toHaveBeenCalled();
});
test("should handle custom head and foot", () => {
const headContents = "<style>body { background-color: red; }</style>";
res.head = `<head>${headContents}</head>`;
res.foot = "<footer>Copyright 2022</footer>";
middleware(req, res, logFacilities, config, next);
expect(res.end).toHaveBeenCalledWith(expect.stringContaining(headContents));
expect(res.end).toHaveBeenCalledWith(expect.stringContaining(res.foot));
});
});