11import fs from 'fs' ;
2-
32import { promisify } from 'util' ;
43import { logger } from '@user-office-software/duo-logger' ;
54import { mockServerClient } from 'mockserver-client' ;
@@ -30,173 +29,115 @@ async function isMockServerRunning() {
3029async function mockserver ( ) {
3130 const mockServerReady = await isMockServerRunning ( ) ;
3231
32+ const roleMappings = {
33+ user : 1 , // Internal user
34+ officer : 2 ,
35+ reviewer : 3 ,
36+ internalUser : 4 , //Internal user 2
37+ externalUser : 5 ,
38+ secretary : 6
39+ } ;
40+
3341 if ( ! mockServerReady ) {
3442 logger . logError ( 'Mock server failed to start within the specified time.' ) ;
35-
3643 return ;
3744 }
3845
39- const respondToPostRequest = function ( request ) {
40- if ( request . method !== 'POST' ) {
41- return ;
42- }
43-
44- const roleMappings = {
45- user : 1 , // Internal user
46- officer : 2 ,
47- reviewer : 3 ,
48- internalUser : 4 , //Internal user 2
49- externalUser : 5 ,
50- secretary : 6
51- } ;
52-
53- let responsePath ;
54- const requestXml = String ( request . body . xml ) ;
55- const match = requestXml . match ( '<tns:(.*?)>' ) ;
56- const method = match [ 1 ] ;
57-
58- if (
59- method === 'getBasicPersonDetailsFromUserNumber' ||
60- method === 'getSearchableBasicPeopleDetailsFromUserNumbers'
61- ) {
62- let regexp = '' ;
63- method === 'getSearchableBasicPeopleDetailsFromUserNumbers'
64- ? ( regexp = '<UserNumbers>(.*?)<' )
65- : ( regexp = '<UserNumber>(.*?)<' ) ;
66- const match = requestXml . match ( regexp ) ;
67-
68- responsePath = 'src/responses/user/' + method + '/' + match [ 1 ] + '.xml' ;
69- }
70- if ( method === 'getSearchableBasicPersonDetailsFromEmail' ) {
71- const match = requestXml . match ( '<Email>(.*?)<' ) ;
72-
73- responsePath = 'src/responses/user/' + method + '/' + match [ 1 ] + '.xml' ;
74- }
75-
76- if (
77- method === 'getPersonDetailsFromSessionId' &&
78- requestXml . includes ( '<SessionId>' )
79- ) {
80- const match = requestXml . match ( "<SessionId>(.*?)<" ) ;
81- const sessionId = match [ 1 ] . toString ( ) ;
82- const userNumber = roleMappings [ sessionId ] || 1 ; // Default to 'user'
83-
84- responsePath = `src/responses/user/${ method } /${ userNumber } .xml` ;
85- }
86-
87- if ( method === 'getRolesForUser' ) {
88- const match = requestXml . match ( '<userNumber>(.*?)<' ) ;
89-
90- responsePath = 'src/responses/user/' + method + '/' + match [ 1 ] + '.xml' ;
91- }
92-
93- if (
94- method === 'getBasicPeopleDetailsFromUserNumbers' &&
95- requestXml . includes ( '<UserNumbers>' )
96- ) {
97- const match = requestXml . match ( '<UserNumbers>(.*?)<' ) ;
98- /**
99- * This will match user id of test users in the database form e2e cypress
100- * initialDBData users.
101- */
102- if ( match [ 1 ] === '1' || match [ 1 ] === '2' || match [ 1 ] === '3' || match [ 1 ] === '4' || match [ 1 ] === '5' || match [ '1' ] === '6' ) {
103- responsePath = 'src/responses/user/' + method + '/' + match [ 1 ] + '.xml' ;
104- } else {
105- responsePath = 'src/responses/user/notEmptyResponse' + '.xml' ;
106- }
107- }
108-
109- if (
110- method === 'getBasicPeopleDetailsFromSurname' &&
111- requestXml . includes ( '<Surname>' )
112- ) {
113- const match = requestXml . match ( '<Surname>(.*?)<' ) ;
114- if ( ( 'carlsson' ) . startsWith ( match [ 1 ] . toLowerCase ( ) ) ) {
115- responsePath = 'src/responses/user/' + method + '/Carlsson.xml' ;
116- }
117- else if ( ( 'beckley' ) . startsWith ( match [ 1 ] . toLowerCase ( ) ) ) {
118- responsePath = 'src/responses/user/' + method + '/Beckley.xml' ;
46+ const respondToRequest = function ( request ) {
47+ logger . logInfo ( 'Callback triggered with request' , { request } ) ;
48+
49+ let responsePath = null ;
50+
51+ const userNumber = request . queryStringParameters ?. userNumbers ;
52+ const surname = request . queryStringParameters ?. surname ;
53+ const emails = request . queryStringParameters ?. emails ;
54+
55+ if ( request . path === '/users-service/v1/basic-person-details' || request . path === '/users-service/v1/basic-person-details/searchable' ) {
56+ if ( userNumber ) {
57+ responsePath = `src/responses/user/getbasicpersondetails/${ userNumber [ 0 ] } .json` ;
11958 }
120- else if ( ( 'nilsson' ) . startsWith ( match [ 1 ] . toLowerCase ( ) ) ) {
121- responsePath = ' src/responses/user/' + method + '/Nilsson.xml' ;
59+ if ( surname ) {
60+ responsePath = ` src/responses/user/getbasicpersondetails/ ${ surname } .json` ;
12261 }
123- else {
124- responsePath = ' src/responses/user/' + method + '.xml' ;
62+ if ( emails ) {
63+ responsePath = ` src/responses/user/getbasicpersondetails/ ${ emails [ 0 ] } .json` ;
12564 }
126-
12765 }
128-
129- if ( responsePath === null || responsePath === undefined ) {
130- responsePath = 'src/responses/user/' + method + '.xml' ;
66+
67+ else if ( request . path . startsWith ( '/users-service/v1/sessions/' ) ) {
68+ const SessionUser = roleMappings [ request . path . replace ( '/users-service/v1/sessions/' , '' ) ] ;
69+ responsePath = `src/responses/user/getpersondetailsfromsessionid/${ SessionUser } .json` ;
13170 }
132-
133- if ( ! fs . existsSync ( responsePath ) ) {
71+
72+ else if ( request . path . startsWith ( '/users-service/v1/role/' ) ) {
73+ const Role = request . path . replace ( '/users-service/v1/role/' , '' ) ;
74+ responsePath = `src/responses/user/getrolesforuser/${ Role } .json` ;
75+ }
76+
77+ else if ( request . path === '/users-service/v1/token' ) {
78+ responsePath = 'src/responses/user/isTokenValid.json' ;
79+ }
80+
81+ else {
82+ return {
83+ statusCode : 400 ,
84+ body : JSON . stringify ( { error : 'Unknown method' } ) ,
85+ } ;
86+ }
87+
88+ if ( ! responsePath || ! fs . existsSync ( responsePath ) ) {
13489 logger . logError ( 'Response file does not exist' , { responsePath } ) ;
135-
136- return null ;
137- } else {
138- logger . logInfo ( 'Returning response file' , { responsePath } ) ;
139- logger . logInfo ( 'Returningfrom request' , { method } ) ;
140-
141- const file = fs . readFileSync ( responsePath , 'utf8' ) ;
142-
14390 return {
144- body : file ,
91+ statusCode : 404 ,
92+ body : JSON . stringify ( { error : 'Resource not found' } ) ,
14593 } ;
14694 }
147- } ;
148-
149- mockServerClient ( 'mockServer' , 1080 )
150- . mockWithCallback (
151- {
152- method : 'POST' ,
153- path : '/ws/UserOfficeWebService' ,
95+
96+ const file = fs . readFileSync ( responsePath , 'utf8' ) ;
97+ logger . logInfo ( 'Returning response file' , { responsePath } ) ;
98+
99+ return {
100+ statusCode : 200 ,
101+ headers : {
102+ 'Content-Type' : [ 'application/json' ] ,
154103 } ,
155- respondToPostRequest ,
156- {
157- unlimited : true ,
158- }
159- )
160- . then (
161- function ( ) {
162- logger . logInfo ( 'Created callback for POST requests' , { } ) ;
163- } ,
164- function ( error ) {
165- logger . logError ( 'Error while creating callback for POST requests' , {
166- error,
167- } ) ;
168- }
169- ) ;
104+ body : file ,
105+ } ;
106+ } ;
170107
171- mockServerClient ( 'mockServer' , 1080 )
172- . mockAnyResponse ( {
173- httpRequest : {
174- method : 'GET' ,
175- path : '/ws/UserOfficeWebService' ,
176- } ,
177- times : {
178- unlimited : true ,
179- } ,
180- timeToLive : {
181- unlimited : true ,
182- } ,
183- httpResponse : {
184- body : fs . readFileSync (
185- 'src/responses/UserOfficeWebService.wsdl' ,
186- 'utf8'
187- ) ,
188- } ,
189- } )
190- . then (
191- function ( ) {
192- logger . logInfo ( 'Created callback for GET request' , { } ) ;
193- } ,
194- function ( error ) {
195- logger . logError ( 'Error while creating callback for GET request' , {
196- error,
197- } ) ;
198- }
199- ) ;
108+ const endpoints = [
109+ '/users-service/v1/basic-person-details' ,
110+ '/users-service/v1/basic-person-details/searchable' ,
111+ '/users-service/v1/role/1' ,
112+ '/users-service/v1/role/2' ,
113+ '/users-service/v1/role/3' ,
114+ '/users-service/v1/role/4' ,
115+ '/users-service/v1/role/5' ,
116+ '/users-service/v1/role/6' ,
117+ '/users-service/v1/sessions/user' ,
118+ '/users-service/v1/sessions/officer' ,
119+ '/users-service/v1/sessions/reviewer' ,
120+ '/users-service/v1/sessions/internalUser' ,
121+ '/users-service/v1/sessions/externalUser' ,
122+ '/users-service/v1/sessions/secretary' ,
123+ '/users-service/v1/token'
124+ ] ;
125+
126+ endpoints . forEach ( ( endpoint ) => {
127+ mockServerClient ( 'mockServer' , 1080 )
128+ . mockWithCallback (
129+ {
130+ path : endpoint ,
131+ } ,
132+ respondToRequest ,
133+ { unlimited : true }
134+ )
135+ . then (
136+ ( ) => logger . logInfo ( `Newest change Created callback for ${ endpoint } ` , { } ) ,
137+ ( error ) => logger . logError ( `Error while creating callback for ${ endpoint } ` , { error } )
138+ ) ;
139+ } ) ;
200140}
141+
201142export { mockserver } ;
202- mockserver ( ) ;
143+ mockserver ( ) ;
0 commit comments