@getjones/test-infra 2.6.7 → 2.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/common/commonFlows/auth/auth.js +40 -0
- package/src/common/commonFlows/index.js +2 -1
- package/src/index.js +3 -0
- package/src/saas/internal-api/accounts/models/settings/update.settings.model.js +10 -1
- package/src/saas/internal-api/auth/api/auth.api.js +14 -5
- package/src/saas/internal-api/auth/api/auth.service.js +21 -5
- package/src/saas/internal-api/contractors/consts/consts.js +6 -0
- package/src/saas/internal-api/requests/api/requests.api.js +8 -2
- package/src/saas/internal-api/requests/api/requests.service.js +13 -0
- package/src/saas/internal-api/requestsTable/api/requests.table.api.js +14 -0
- package/src/saas/internal-api/requestsTable/api/requests.table.service.js +9 -0
- package/src/saas/internal-api/requestsTable/index.js +3 -0
- package/src/saas/internal-api/requirements/models/update.requirement.model.js +3 -1
- package/src/saas/internal-api/requirements/utils/utils.js +2 -2
package/package.json
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const { expect } = require('chai');
|
|
2
|
+
|
|
3
|
+
const env = require('../../../../../../src/env');
|
|
4
|
+
|
|
5
|
+
const { internalAPI } = require('../../../../src')(env);
|
|
6
|
+
const { dbEmails, auth } = internalAPI;
|
|
7
|
+
|
|
8
|
+
const httpResponseStatusCodes = require('../../../common/httpResponseStatusCodes.json');
|
|
9
|
+
|
|
10
|
+
const textInSubject = 'One-Time Security Code';
|
|
11
|
+
const textInBody = 'Please use the one-time code below to confirm your identity';
|
|
12
|
+
const codeLength = 6;
|
|
13
|
+
|
|
14
|
+
const getVendorHubAuthCookie = async email => {
|
|
15
|
+
const createOneTimeSessionResponse = await auth.services.createOneTimeSession(email);
|
|
16
|
+
expect(createOneTimeSessionResponse.status, `Create one-time session for email ${email} has failed`).to.equal(httpResponseStatusCodes.OK);
|
|
17
|
+
|
|
18
|
+
const recipients = {
|
|
19
|
+
from: env.credentials.superUser,
|
|
20
|
+
to: [email]
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const userEmailBody = await dbEmails.services.getLastMessage({ recipients, textInSubject });
|
|
24
|
+
expect(userEmailBody, 'Fetching user one-time security code email has failed').to.be.a('string').that.includes(textInBody);
|
|
25
|
+
|
|
26
|
+
const oneTimeCode = await extractOneTimeCode(userEmailBody);
|
|
27
|
+
expect(oneTimeCode.length, 'One-time security code extraction from email body has failed').to.equal(codeLength);
|
|
28
|
+
|
|
29
|
+
return auth.services.getHubUserCookie(email, oneTimeCode);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
async function extractOneTimeCode(inputString) {
|
|
33
|
+
const regex = '\s*(\\d{6})\n\s*';
|
|
34
|
+
const match = inputString.match(regex);
|
|
35
|
+
|
|
36
|
+
return match ? match[1] : null;
|
|
37
|
+
}
|
|
38
|
+
module.exports = {
|
|
39
|
+
getVendorHubAuthCookie
|
|
40
|
+
};
|
package/src/index.js
CHANGED
|
@@ -32,6 +32,8 @@ const getInternalAPI = () => {
|
|
|
32
32
|
const vendorProfile = require('./saas/internal-api/vendorProfile');
|
|
33
33
|
const serviceArea = require('./saas/internal-api/serviceArea');
|
|
34
34
|
|
|
35
|
+
const requestsTable = require('./saas/internal-api/requestsTable');
|
|
36
|
+
|
|
35
37
|
const threadScheduler = require('./saas/internal-api/thread-scheduler/runner');
|
|
36
38
|
const dbEmails = require('./saas/internal-api/dbEmails/index');
|
|
37
39
|
|
|
@@ -53,6 +55,7 @@ const getInternalAPI = () => {
|
|
|
53
55
|
globalRecord,
|
|
54
56
|
vendorProfile,
|
|
55
57
|
serviceArea,
|
|
58
|
+
requestsTable,
|
|
56
59
|
threadScheduler,
|
|
57
60
|
dbEmails,
|
|
58
61
|
factory
|
|
@@ -8,7 +8,9 @@ class UpdateAccountSettingsModel {
|
|
|
8
8
|
isExcludedFromNetwork = false,
|
|
9
9
|
isOcrEnabled = false,
|
|
10
10
|
isCoverageAudit = false,
|
|
11
|
-
isAccountRequirementsEnabled = false
|
|
11
|
+
isAccountRequirementsEnabled = false,
|
|
12
|
+
isAccountRequirementsAutoRenewalsEnabled = false,
|
|
13
|
+
autoGaps = {}
|
|
12
14
|
} = {}
|
|
13
15
|
) {
|
|
14
16
|
this.accountId = accountId;
|
|
@@ -19,7 +21,14 @@ class UpdateAccountSettingsModel {
|
|
|
19
21
|
this.isOcrEnabled = isOcrEnabled;
|
|
20
22
|
this.isCoverageAudit = isCoverageAudit;
|
|
21
23
|
this.isAccountRequirementsEnabled = isAccountRequirementsEnabled;
|
|
24
|
+
this.isAccountRequirementsAutoRenewalsEnabled = isAccountRequirementsAutoRenewalsEnabled;
|
|
25
|
+
this.autoGaps = { ... DEFAULT_AUTO_GAPS, ... autoGaps };
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
|
|
29
|
+
const DEFAULT_AUTO_GAPS = {
|
|
30
|
+
isAutoGapsEnabledForTenants: false,
|
|
31
|
+
isAutoGapsEnabledForVendors: false
|
|
32
|
+
};
|
|
33
|
+
|
|
25
34
|
module.exports = UpdateAccountSettingsModel;
|
|
@@ -3,16 +3,25 @@ const { backendUrl } = require('../../../../env').getEnv();
|
|
|
3
3
|
|
|
4
4
|
const Endpoints = {
|
|
5
5
|
login: `${backendUrl}/logincontroller`,
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
verifyEmail: `${backendUrl}/verify/email`,
|
|
7
|
+
createOneTimeSession: `${backendUrl}/vendor-app/one-time-session/create`,
|
|
8
|
+
verifyRecord: `${backendUrl}/vendor-app/one-time-session/verify/record/undefined`// Due to unused variable "recordId"
|
|
8
9
|
};
|
|
9
10
|
|
|
10
11
|
const login = (email, password) => {
|
|
11
12
|
return requests.postRequestHandler(Endpoints.login, { email, password });
|
|
12
13
|
};
|
|
13
14
|
|
|
14
|
-
const
|
|
15
|
-
return requests.postRequestHandler(Endpoints.
|
|
15
|
+
const verifyEmail = email => {
|
|
16
|
+
return requests.postRequestHandler(Endpoints.verifyEmail, { email });
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const createOneTimeSession = email => {
|
|
20
|
+
return requests.postRequestHandler(Endpoints.createOneTimeSession, { email });
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const verifyRecord = (email, oneTimeCode) => {
|
|
24
|
+
return requests.getRequestHandler(Endpoints.verifyRecord, { email, oneTimeCode });
|
|
16
25
|
};
|
|
17
26
|
|
|
18
|
-
module.exports = { login,
|
|
27
|
+
module.exports = { login, verifyEmail, createOneTimeSession, verifyRecord };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const { getEnv, requiredValidation, getSystemUserIdentity, addUserIdentity } = require('../../../../env');
|
|
2
|
+
const { credentials } = getEnv();
|
|
3
|
+
|
|
2
4
|
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
3
5
|
|
|
4
|
-
const { credentials } = getEnv();
|
|
5
6
|
const authApi = require('./auth.api');
|
|
6
7
|
|
|
7
8
|
const getAuthCookie = async (email, password) => {
|
|
@@ -28,10 +29,23 @@ const getAuthCookie = async (email, password) => {
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
31
|
|
|
31
|
-
const
|
|
32
|
+
const verifyEmail = email => {
|
|
33
|
+
return authApi.verifyEmail(email);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const createOneTimeSession = email => {
|
|
37
|
+
return authApi.createOneTimeSession(email);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const getHubUserCookie = async (email, oneTimeCode) => {
|
|
32
41
|
try {
|
|
33
|
-
const response = await authApi.
|
|
34
|
-
|
|
42
|
+
const response = await authApi.verifyRecord(email, oneTimeCode);
|
|
43
|
+
|
|
44
|
+
if (response.status !== httpResponseStatusCodes.OK) {
|
|
45
|
+
throw Error(`Error: ${JSON.stringify(response.data)}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
|
|
35
49
|
|
|
36
50
|
return authCookie;
|
|
37
51
|
} catch (error) {
|
|
@@ -67,7 +81,9 @@ const getOperatorCookie = () => {
|
|
|
67
81
|
|
|
68
82
|
module.exports = {
|
|
69
83
|
getAuthCookie,
|
|
70
|
-
|
|
84
|
+
verifyEmail,
|
|
85
|
+
createOneTimeSession,
|
|
86
|
+
getHubUserCookie,
|
|
71
87
|
getIcsCookie,
|
|
72
88
|
getAuditorCookie,
|
|
73
89
|
getOperatorCookie
|
|
@@ -10,7 +10,8 @@ const Endpoints = {
|
|
|
10
10
|
getAccountRequests: accountId => `${backendUrl}/saas/requests/${accountId}`,
|
|
11
11
|
getByTabId: `${backendUrl}/saas/requests`,
|
|
12
12
|
requestsGlobalSearch: (projectId, searchWord) =>
|
|
13
|
-
`${backendUrl}/saas/requests/search?&projectId=${projectId}&searchWord=${searchWord}
|
|
13
|
+
`${backendUrl}/saas/requests/search?&projectId=${projectId}&searchWord=${searchWord}`,
|
|
14
|
+
getAutocompleteAutoSelect: `${backendUrl}/saas/request/auto/selection`
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
const createRequest = (createRequestModel, context) => {
|
|
@@ -35,6 +36,10 @@ const getRequestById = (requestId, context) => {
|
|
|
35
36
|
return requests.getRequestHandler(Endpoints.getById(requestId), {}, context);
|
|
36
37
|
};
|
|
37
38
|
|
|
39
|
+
const getAutocompleteAutoSelect = (params, context) => {
|
|
40
|
+
return requests.getRequestHandler(Endpoints.getAutocompleteAutoSelect, params, context);
|
|
41
|
+
};
|
|
42
|
+
|
|
38
43
|
const getRequestsByAccountId = (accountId, context, params) => {
|
|
39
44
|
return requests.getRequestHandler(Endpoints.getAccountRequests(accountId), params, context);
|
|
40
45
|
};
|
|
@@ -56,5 +61,6 @@ module.exports = {
|
|
|
56
61
|
getRequestById,
|
|
57
62
|
getRequestsByAccountId,
|
|
58
63
|
getRequestsByTabId,
|
|
59
|
-
requestsGlobalSearch
|
|
64
|
+
requestsGlobalSearch,
|
|
65
|
+
getAutocompleteAutoSelect
|
|
60
66
|
};
|
|
@@ -2,6 +2,7 @@ const requestsAPI = require('./requests.api');
|
|
|
2
2
|
const { CreateRequestModel, ContractorInfo } = require('../models/create.request.model');
|
|
3
3
|
const { RequestModel } = require('../models/edit.request.model');
|
|
4
4
|
const { validateType } = require('../../../../common/validations/typeValidations');
|
|
5
|
+
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
5
6
|
|
|
6
7
|
const createRequest = async (createRequestModel, context) => {
|
|
7
8
|
validateType(createRequestModel, CreateRequestModel);
|
|
@@ -22,6 +23,17 @@ const editRequestAndRecordDetails = (editRequestModel, context) => {
|
|
|
22
23
|
return requestsAPI.editRequestAndRecordDetails(editRequestModel, context);
|
|
23
24
|
};
|
|
24
25
|
|
|
26
|
+
const getAutocompleteAutoSelect = async (params, context) => {
|
|
27
|
+
const { companyOrDba, tabId, requirementsId } = params;
|
|
28
|
+
const autoSelectedRequest = await requestsAPI.getAutocompleteAutoSelect({ companyOrDba, tabId, requirementsId }, context);
|
|
29
|
+
|
|
30
|
+
if (autoSelectedRequest.status != httpResponseStatusCodes.OK) {
|
|
31
|
+
throw Error('Failed to get the auto select request', autoSelectedRequest.data);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return autoSelectedRequest.data;
|
|
35
|
+
};
|
|
36
|
+
|
|
25
37
|
const getRequestsByTabId = (tabId, context, activityStatus = 'Active') => {
|
|
26
38
|
return requestsAPI.getRequestsByTabId(tabId, context, activityStatus);
|
|
27
39
|
};
|
|
@@ -77,6 +89,7 @@ const requestsGlobalSearch = (projectId, searchWord, context) => {
|
|
|
77
89
|
|
|
78
90
|
module.exports = {
|
|
79
91
|
createRequest,
|
|
92
|
+
getAutocompleteAutoSelect,
|
|
80
93
|
addRequestToRecord,
|
|
81
94
|
inviteRequestViaPublicLink,
|
|
82
95
|
editRequestAndRecordDetails,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const { backendUrl } = require('../../../../env').getEnv();
|
|
2
|
+
const requests = require('../../../../common/requests/cookieAuth/requests');
|
|
3
|
+
|
|
4
|
+
const Endpoints = {
|
|
5
|
+
getRequestsByEmail: email => `${backendUrl}/saas/records/email/${email}`
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const getRequestsByEmail = (email, context) => {
|
|
9
|
+
return requests.getRequestHandler(Endpoints.getRequestsByEmail(email), {}, context);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
module.exports = {
|
|
13
|
+
getRequestsByEmail
|
|
14
|
+
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
const { VENDORS } = require('../../../../common/consts/recordTypes');
|
|
1
2
|
const { validateType } = require('../../../../common/validations/typeValidations');
|
|
2
3
|
const { REQUIREMENT_SHARING_LEVELS } = require('../consts/consts');
|
|
3
4
|
const { PolicyModel } = require('./policy.model');
|
|
4
5
|
|
|
5
6
|
class UpdateRequirementModel {
|
|
6
|
-
constructor({ id, name, policies, dateModified, sharingLevel = REQUIREMENT_SHARING_LEVELS.TAB }) {
|
|
7
|
+
constructor({ id, name, policies, dateModified, sharingLevel = REQUIREMENT_SHARING_LEVELS.TAB, recordType = VENDORS }) {
|
|
7
8
|
this.id = id;
|
|
8
9
|
this.name = name;
|
|
9
10
|
this.policies = policies;
|
|
10
11
|
this.dateModified = dateModified;
|
|
11
12
|
this.sharingLevel = sharingLevel;
|
|
13
|
+
this.recordType = recordType;
|
|
12
14
|
|
|
13
15
|
validateType(policies, Array);
|
|
14
16
|
policies && validateType(policies[0], PolicyModel);
|
|
@@ -88,12 +88,12 @@ const getCreateRequirementModel = function(requirement) {
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
const getUpdateRequirementModel = function(updatedRequirement) {
|
|
91
|
-
const { id, policies, name, sharingLevel, dateModified } = updatedRequirement;
|
|
91
|
+
const { id, policies, name, recordType, sharingLevel, dateModified } = updatedRequirement;
|
|
92
92
|
|
|
93
93
|
const parsedPolicies = parseRequirementConfig(policies);
|
|
94
94
|
const policyModels = parsedPolicies.map(policy => getPolicyModel(policy));
|
|
95
95
|
|
|
96
|
-
return new UpdateRequirementModel({ id, name, policies: policyModels, dateModified, sharingLevel });
|
|
96
|
+
return new UpdateRequirementModel({ id, name, policies: policyModels, dateModified, sharingLevel, recordType });
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
module.exports = {
|