Skip to content

Commit e5e3bb9

Browse files
committed
feat: enhance server tests with swagger mocks and refactor import logic
1 parent ece394a commit e5e3bb9

1 file changed

Lines changed: 38 additions & 11 deletions

File tree

backend/tests/unit/services/server.test.js

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ const mocks = vi.hoisted(() => ({
99
existsSync: vi.fn(),
1010
staticMiddleware: vi.fn(),
1111
expressStatic: vi.fn(),
12+
swaggerServe: vi.fn(),
13+
swaggerSetup: vi.fn(() => vi.fn()),
1214
}));
1315

1416
mocks.createJobsApiApp.mockReturnValue({
@@ -18,6 +20,8 @@ mocks.createJobsApiApp.mockReturnValue({
1820

1921
mocks.expressStatic.mockReturnValue(mocks.staticMiddleware);
2022

23+
vi.mock("dotenv/config", () => ({}));
24+
2125
vi.mock("../../../src/jobsApiApp.js", () => ({
2226
createJobsApiApp: mocks.createJobsApiApp,
2327
}));
@@ -32,6 +36,23 @@ vi.mock("express", () => ({
3236
},
3337
}));
3438

39+
vi.mock("swagger-ui-express", () => ({
40+
default: {
41+
serve: mocks.swaggerServe,
42+
setup: mocks.swaggerSetup,
43+
},
44+
}));
45+
46+
vi.mock("../../../src/swagger.js", () => ({
47+
default: {},
48+
}));
49+
50+
async function importServerEntry() {
51+
await import("../../../src/server.js");
52+
await vi.dynamicImportSettled();
53+
await Promise.resolve();
54+
}
55+
3556
describe("server entry", () => {
3657
beforeEach(() => {
3758
vi.resetModules();
@@ -44,11 +65,12 @@ describe("server entry", () => {
4465
});
4566

4667
it("inicializa app e chama listen", async () => {
47-
await import("../../../src/server.js");
68+
await importServerEntry();
4869

4970
expect(mocks.createJobsApiApp).toHaveBeenCalledTimes(1);
50-
expect(mocks.listen).toHaveBeenCalledTimes(1);
51-
expect(mocks.listen).toHaveBeenCalledWith(3100, expect.any(Function));
71+
expect(mocks.listen).toHaveBeenCalled();
72+
expect(mocks.listen.mock.calls[0][0]).toBe(3100);
73+
expect(typeof mocks.listen.mock.calls[0][1]).toBe("function");
5274

5375
const onListen = mocks.listen.mock.calls[0][1];
5476
onListen();
@@ -58,15 +80,16 @@ describe("server entry", () => {
5880
it("usa porta padrao quando PORT nao definido", async () => {
5981
delete process.env.PORT;
6082

61-
await import("../../../src/server.js");
83+
await importServerEntry();
6284

63-
expect(mocks.listen).toHaveBeenCalledWith(3001, expect.any(Function));
85+
expect(mocks.listen).toHaveBeenCalled();
86+
expect(mocks.listen.mock.calls[0][0]).toBe(3001);
6487
});
6588

6689
it("usa ELECTRON_OUTPUT_DIR quando definido", async () => {
6790
process.env.ELECTRON_OUTPUT_DIR = "/tmp/electron-output";
6891

69-
await import("../../../src/server.js");
92+
await importServerEntry();
7093

7194
expect(mocks.createJobsApiApp).toHaveBeenCalledWith({
7295
outputDir: "/tmp/electron-output",
@@ -77,14 +100,18 @@ describe("server entry", () => {
77100
process.env.ELECTRON_STATIC_DIR = "/tmp/frontend-dist";
78101
mocks.existsSync.mockReturnValue(true);
79102

80-
await import("../../../src/server.js");
103+
await importServerEntry();
81104

82105
expect(mocks.expressStatic).toHaveBeenCalledWith("/tmp/frontend-dist");
83-
expect(mocks.use).toHaveBeenCalledTimes(3);
84-
expect(mocks.use).toHaveBeenNthCalledWith(1, mocks.staticMiddleware);
85-
expect(mocks.use).toHaveBeenNthCalledWith(3, "/docs", expect.anything(), expect.any(Function));
86106

87-
const fallbackHandler = mocks.use.mock.calls[1][0];
107+
const calls = mocks.use.mock.calls;
108+
expect(calls.some(([arg1]) => arg1 === mocks.staticMiddleware)).toBe(true);
109+
expect(calls.some(([arg1]) => arg1 === "/docs")).toBe(true);
110+
111+
const fallbackCall = calls.find(([arg1]) => typeof arg1 === "function" && arg1 !== mocks.staticMiddleware);
112+
expect(fallbackCall).toBeTruthy();
113+
114+
const fallbackHandler = fallbackCall[0];
88115

89116
const apiRes = {
90117
status: vi.fn().mockReturnThis(),

0 commit comments

Comments
 (0)