@@ -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
1416mocks . createJobsApiApp . mockReturnValue ( {
@@ -18,6 +20,8 @@ mocks.createJobsApiApp.mockReturnValue({
1820
1921mocks . expressStatic . mockReturnValue ( mocks . staticMiddleware ) ;
2022
23+ vi . mock ( "dotenv/config" , ( ) => ( { } ) ) ;
24+
2125vi . 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+
3556describe ( "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