Skip to content

Commit c182a1d

Browse files
Merge pull request #18 from UserOfficeProject/rest-migration
Rest migration changes
2 parents e6f9917 + e362e10 commit c182a1d

79 files changed

Lines changed: 568 additions & 4473 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/mockserver.js

Lines changed: 94 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import fs from 'fs';
2-
32
import { promisify } from 'util';
43
import { logger } from '@user-office-software/duo-logger';
54
import { mockServerClient } from 'mockserver-client';
@@ -30,173 +29,115 @@ async function isMockServerRunning() {
3029
async 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+
201142
export { mockserver };
202-
mockserver();
143+
mockserver();

0 commit comments

Comments
 (0)