@getjones/test-infra 2.8.14 → 2.8.15
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/utils/complianceUtil.js +7 -8
- package/src/common/utils/timeUtils.js +5 -29
- package/src/saas/internal-api/compliance/api/audit/audit.api.js +24 -8
- package/src/saas/internal-api/compliance/api/audit/audit.service.js +19 -3
- package/src/saas/internal-api/compliance/api/overrideGap/override.gap.api.js +15 -1
- package/src/saas/internal-api/compliance/api/overrideGap/override.gap.service.js +12 -0
- package/src/saas/internal-api/compliance/consts/audit.js +20 -1
- package/src/saas/internal-api/contractors/api/contractors.service.js +9 -2
- package/src/saas/internal-api/dbEmails/api/db.emails.service.js +8 -7
package/package.json
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
const { getEnv, getSystemUserIdentity } = require('../../env');
|
|
2
|
+
const auditApi = require('../../saas/internal-api/compliance/api/audit/audit.api');
|
|
2
3
|
const auditConfigs = require('../../defaults/configs/auditConfigs');
|
|
3
4
|
|
|
4
5
|
const { credentials } = getEnv();
|
|
5
6
|
|
|
6
|
-
const auditApi = require('../../saas/internal-api/compliance/api/audit/audit.api');
|
|
7
|
-
|
|
8
7
|
const complianceStatuses = {
|
|
9
8
|
complaint: 'complaint',
|
|
10
9
|
notCompliant: 'notCompliant',
|
|
@@ -44,16 +43,16 @@ const getAuditMetadata = async (
|
|
|
44
43
|
const isReauditResponse = await isReaudit(recordId, auditorContext);
|
|
45
44
|
metadata.isReaudit = isReauditResponse.data.isReaudit;
|
|
46
45
|
|
|
47
|
-
const recordDetailsResponse = await auditApi.
|
|
48
|
-
const
|
|
46
|
+
const recordDetailsResponse = await auditApi.getAuditRecordModel(recordId, auditorContext);
|
|
47
|
+
const recordDetails = recordDetailsResponse.data;
|
|
49
48
|
|
|
50
|
-
metadata.certificateId =
|
|
49
|
+
metadata.certificateId = recordDetails.certificateDetails.certificateuploadId;
|
|
51
50
|
metadata.auditDates = {
|
|
52
51
|
contractorId: recordId,
|
|
53
|
-
contractorDateModified:
|
|
52
|
+
contractorDateModified: recordDetails.dateModified,
|
|
54
53
|
dateStartedAudit: recordDetailsResponse.dateStartedAudit,
|
|
55
|
-
contractorOverrideDateModified:
|
|
56
|
-
contractCreateDate:
|
|
54
|
+
contractorOverrideDateModified: recordDetails.contractorOverrideDateModified,
|
|
55
|
+
contractCreateDate: recordDetails.contractCreateDate
|
|
57
56
|
};
|
|
58
57
|
|
|
59
58
|
metadata.auditorId = await getAuditorId();
|
|
@@ -7,6 +7,7 @@ const formats = {
|
|
|
7
7
|
dayMonthYear: 'DD/MM/YYYY',
|
|
8
8
|
numericMonthDayYear: 'MM/DD/YYYY',
|
|
9
9
|
monthDayYear: 'MMM DD, YYYY',
|
|
10
|
+
monthDYear: 'MMM D, YYYY',
|
|
10
11
|
monthDayYear_noZeroPrefix: 'MMM D, YYYY',
|
|
11
12
|
dateTime: 'YYYY/MM/DD-hh:mm:ss',
|
|
12
13
|
fullMonthDayYear: 'MMMM DD, YYYY',
|
|
@@ -24,7 +25,9 @@ const peroids = {
|
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
const getOneYearAgoDate = format => moment().utc().subtract(1, peroids.years).format(format || formats.threadScheduler);
|
|
28
|
+
const getTwoHundredDaysAgoDate = format => moment().utc().subtract(200, peroids.days).format(format || formats.threadScheduler);
|
|
27
29
|
const getSixMonthAgoDate = format => moment().utc().subtract(6, peroids.months).format(format || formats.threadScheduler);
|
|
30
|
+
const getFortyFiveDaysAgoDate = format => moment().utc().subtract(45, peroids.days).format(format || formats.threadScheduler);
|
|
28
31
|
const getOneMonthAgoDate = format => moment().utc().subtract(1, peroids.months).format(format || formats.threadScheduler);
|
|
29
32
|
const getFifteenDaysAgoDate = format => moment().utc().subtract(15, peroids.days).format(format || formats.threadScheduler);
|
|
30
33
|
const getTenDaysAgoDate = format => moment().utc().subtract(10, peroids.days).format(format || formats.threadScheduler);
|
|
@@ -46,31 +49,6 @@ const getLogTimestamp = () => {
|
|
|
46
49
|
return moment().format(formats.logTimeStampFormat);
|
|
47
50
|
};
|
|
48
51
|
|
|
49
|
-
const getCurrentFormattedDate = () => {
|
|
50
|
-
return new Date().toISOString();
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const getDateWithOffset = (date, offsetInDays) => {
|
|
54
|
-
date.setDate(date.getDate() + offsetInDays);
|
|
55
|
-
return date;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const getAuditDateFormat = date => {
|
|
59
|
-
const year = date.getUTCFullYear();
|
|
60
|
-
const month = date.getUTCMonth() + 1; //getMonth is zero-based
|
|
61
|
-
const day = date.getUTCDate();
|
|
62
|
-
|
|
63
|
-
return `${month}/${day}/${year}`;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const getYearMonthDayFormat = date => {
|
|
67
|
-
const year = date.getUTCFullYear();
|
|
68
|
-
const month = String(date.getUTCMonth() + 1).length === 1 ? `0${(date.getUTCMonth() + 1)}` : (date.getUTCMonth() + 1);
|
|
69
|
-
const day = String(date.getUTCDate()).length === 1 ? `0${date.getUTCDate()}` : date.getUTCDate();
|
|
70
|
-
|
|
71
|
-
return `${year}-${month}-${day}`;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
52
|
const extractDateFromDateTime = date => {
|
|
75
53
|
let extractedDate = date;
|
|
76
54
|
|
|
@@ -140,7 +118,9 @@ const convertDateToLongInt = value => {
|
|
|
140
118
|
module.exports = {
|
|
141
119
|
formats,
|
|
142
120
|
getOneYearAgoDate,
|
|
121
|
+
getTwoHundredDaysAgoDate,
|
|
143
122
|
getSixMonthAgoDate,
|
|
123
|
+
getFortyFiveDaysAgoDate,
|
|
144
124
|
getOneMonthAgoDate,
|
|
145
125
|
getFifteenDaysAgoDate,
|
|
146
126
|
getTenDaysAgoDate,
|
|
@@ -159,10 +139,6 @@ module.exports = {
|
|
|
159
139
|
getInvitationDatesForNotResponsiveTenant,
|
|
160
140
|
getAutomaticRenewalsExpirationDates,
|
|
161
141
|
getLogTimestamp,
|
|
162
|
-
getCurrentFormattedDate,
|
|
163
|
-
getAuditDateFormat,
|
|
164
|
-
getDateWithOffset,
|
|
165
|
-
getYearMonthDayFormat,
|
|
166
142
|
getDayInMilliseconds,
|
|
167
143
|
extractDateFromDateTime,
|
|
168
144
|
getPreviousDateByDays,
|
|
@@ -3,17 +3,22 @@ const { backendUrl } = require('../../../../../env').getEnv();
|
|
|
3
3
|
|
|
4
4
|
const Endpoints = {
|
|
5
5
|
auditorContractorList: `${backendUrl}/saas/auditor/contractors`,
|
|
6
|
-
preAudit: contractorId => `${backendUrl}/saas/auditor/contractors/${contractorId}/master-audit`,
|
|
7
6
|
audit: `${backendUrl}/saas/auditor/contractors/submit/audits`,
|
|
8
|
-
|
|
7
|
+
enterAudit: contractorId => `${backendUrl}/saas/auditor/contractors/${contractorId}/master-audit`,
|
|
8
|
+
getAuditRecordModelByRecordId: recordId => `${backendUrl}/saas/auditor/record/${recordId}/audit-record`,
|
|
9
9
|
requirementDetailsForAudit: contractorId => `${backendUrl}/saas/auditor/contractor/${contractorId}/requirement`,
|
|
10
10
|
isReaudit: contractorId => `${backendUrl}/saas/auditor/contractors/${contractorId}/isreaudit`,
|
|
11
11
|
revertCoi: contractorId => `${backendUrl}/saas/auditor/contractors/${contractorId}/coi/revert`,
|
|
12
|
-
wrongCoi: `${backendUrl}/saas/coi/wrong-coi
|
|
12
|
+
wrongCoi: `${backendUrl}/saas/coi/wrong-coi`,
|
|
13
|
+
getAudit: recordId => `${backendUrl}/saas/audit/${recordId}`
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
const audit = async (contractorId, auditRequestModel, context) => {
|
|
16
|
-
await
|
|
17
|
+
await enterAudit(contractorId, {}, context);
|
|
18
|
+
return submitAudit(auditRequestModel, context);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const submitAudit = async (auditRequestModel, context) => {
|
|
17
22
|
return requests.postRequestHandler(Endpoints.audit, auditRequestModel, context);
|
|
18
23
|
};
|
|
19
24
|
|
|
@@ -29,14 +34,22 @@ const getAuditorContractorList = (auditListParametersModel, context) => {
|
|
|
29
34
|
return requests.postRequestHandler(Endpoints.auditorContractorList, auditListParametersModel, context);
|
|
30
35
|
};
|
|
31
36
|
|
|
32
|
-
const
|
|
33
|
-
return requests.getRequestHandler(Endpoints.
|
|
37
|
+
const enterAudit = (contractorId, context) => {
|
|
38
|
+
return requests.getRequestHandler(Endpoints.enterAudit(contractorId), {}, context);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getAuditRecordModel = (recordId, context) => {
|
|
42
|
+
return requests.getRequestHandler(Endpoints.getAuditRecordModelByRecordId(recordId), {}, context);
|
|
34
43
|
};
|
|
35
44
|
|
|
36
45
|
const getRequirementDetailsForAudit = (contractorId, context) => {
|
|
37
46
|
return requests.getRequestHandler(Endpoints.requirementDetailsForAudit(contractorId), {}, context);
|
|
38
47
|
};
|
|
39
48
|
|
|
49
|
+
const getAuditByRecordId = (recordId, context, { isRecordDeleted } = {}) => {
|
|
50
|
+
return requests.getRequestHandler(Endpoints.getAudit(recordId), { isRecordDeleted }, context);
|
|
51
|
+
};
|
|
52
|
+
|
|
40
53
|
const wrongCoi = (recordId, context) => {
|
|
41
54
|
const params = { contractorId: recordId };
|
|
42
55
|
return requests.getRequestHandler(Endpoints.wrongCoi, params, context);
|
|
@@ -44,10 +57,13 @@ const wrongCoi = (recordId, context) => {
|
|
|
44
57
|
|
|
45
58
|
module.exports = {
|
|
46
59
|
audit,
|
|
60
|
+
submitAudit,
|
|
47
61
|
revertCoi,
|
|
48
62
|
wrongCoi,
|
|
49
63
|
isReaudit,
|
|
50
64
|
getAuditorContractorList,
|
|
51
|
-
|
|
52
|
-
|
|
65
|
+
enterAudit,
|
|
66
|
+
getAuditRecordModel,
|
|
67
|
+
getRequirementDetailsForAudit,
|
|
68
|
+
getAuditByRecordId
|
|
53
69
|
};
|
|
@@ -11,6 +11,11 @@ const audit = (auditRequestModel, context) => {
|
|
|
11
11
|
return auditApi.audit(auditRequestModel.auditData.contractorId, auditRequestModel, context);
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
+
const submitAudit = (auditRequestModel, context) => {
|
|
15
|
+
validateType(auditRequestModel, AuditRequestModel);
|
|
16
|
+
return auditApi.submitAudit(auditRequestModel, context);
|
|
17
|
+
};
|
|
18
|
+
|
|
14
19
|
const revertCoi = (contractorId, dateModified, context) => {
|
|
15
20
|
const dateModifiedObj = { dateModified };
|
|
16
21
|
return auditApi.revertCoi(contractorId, dateModifiedObj, context);
|
|
@@ -29,8 +34,12 @@ const getAuditorContractorList = (auditListParametersModel, context) => {
|
|
|
29
34
|
return auditApi.getAuditorContractorList(auditListParametersModel, context);
|
|
30
35
|
};
|
|
31
36
|
|
|
32
|
-
const
|
|
33
|
-
return auditApi.
|
|
37
|
+
const enterAudit = (contractorId, context) => {
|
|
38
|
+
return auditApi.enterAudit(contractorId, context);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const getAuditRecordModel = (recordId, context) => {
|
|
42
|
+
return auditApi.getAuditRecordModel(recordId, context);
|
|
34
43
|
};
|
|
35
44
|
|
|
36
45
|
const getRequirementDetailsForAudit = (contractorId, context) => {
|
|
@@ -61,6 +70,10 @@ const getAuditMetadata = async (
|
|
|
61
70
|
);
|
|
62
71
|
};
|
|
63
72
|
|
|
73
|
+
const getAuditByRecordId = async (recordId, context, { isRecordDeleted } = {}) => {
|
|
74
|
+
return auditApi.getAuditByRecordId(recordId, context, { isRecordDeleted });
|
|
75
|
+
};
|
|
76
|
+
|
|
64
77
|
const getAuditEntities = async (recordId, auditData, auditorContext) => {
|
|
65
78
|
const requirementDetailsForAuditResponse = await getRequirementDetailsForAudit(recordId, auditorContext);
|
|
66
79
|
const requirement = requirementDetailsForAuditResponse.data;
|
|
@@ -137,14 +150,17 @@ const auditRecord = async function(
|
|
|
137
150
|
|
|
138
151
|
module.exports = {
|
|
139
152
|
audit,
|
|
153
|
+
submitAudit,
|
|
140
154
|
revertCoi,
|
|
141
155
|
isReaudit,
|
|
142
156
|
wrongCoi,
|
|
143
157
|
getAuditorContractorList,
|
|
144
|
-
|
|
158
|
+
enterAudit,
|
|
145
159
|
getRequirementDetailsForAudit,
|
|
160
|
+
getAuditRecordModel,
|
|
146
161
|
getAuditEntities,
|
|
147
162
|
getAuditMetadata,
|
|
163
|
+
getAuditByRecordId,
|
|
148
164
|
getAuditRequestModel,
|
|
149
165
|
auditRecord
|
|
150
166
|
};
|
|
@@ -2,10 +2,24 @@ const requests = require('../../../../../common/requests/cookieAuth/requests');
|
|
|
2
2
|
const { backendUrl } = require('../../../../../env').getEnv();
|
|
3
3
|
|
|
4
4
|
const Endpoints = {
|
|
5
|
+
waive: contractorId => `${backendUrl}/saas/contractors/${contractorId}/waiver`,
|
|
6
|
+
retract: contractorId => `${backendUrl}/saas/contractors/${contractorId}/waiver`,
|
|
5
7
|
overrideGap: `${backendUrl}/saas/record/override-gap`,
|
|
6
8
|
retractOverride: `${backendUrl}/saas/record/retract-override`
|
|
7
9
|
};
|
|
8
10
|
|
|
11
|
+
const waive = async (contractorId, waiveRequestModel, context) => {
|
|
12
|
+
const status = waiveRequestModel.status;
|
|
13
|
+
delete waiveRequestModel.status;
|
|
14
|
+
return requests.postRequestHandler(Endpoints.waive(contractorId), waiveRequestModel, context, {}, { status });
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const retract = async (contractorId, retractRequestModel, context) => {
|
|
18
|
+
const status = retractRequestModel.status;
|
|
19
|
+
delete retractRequestModel.status;
|
|
20
|
+
return requests.postRequestHandler(Endpoints.retract(contractorId), retractRequestModel, context, {}, { status });
|
|
21
|
+
};
|
|
22
|
+
|
|
9
23
|
const overrideGap = ({ waiveRequestModel, isTestingBackwardCompatibility = false, context }) => {
|
|
10
24
|
const headers = {};
|
|
11
25
|
const params = { isTestingBackwardCompatibility };
|
|
@@ -16,4 +30,4 @@ const retractOverride = (retractRequestModel, context) => {
|
|
|
16
30
|
return requests.postRequestHandler(Endpoints.retractOverride, retractRequestModel, context);
|
|
17
31
|
};
|
|
18
32
|
|
|
19
|
-
module.exports = { overrideGap, retractOverride };
|
|
33
|
+
module.exports = { waive, retract, overrideGap, retractOverride };
|
|
@@ -9,6 +9,16 @@ const httpResponseStatusCodes = require('../../../../../common/httpResponseStatu
|
|
|
9
9
|
const { credentials } = env.getEnv();
|
|
10
10
|
const userTypes = require('../../../../../common/consts/userTypes');
|
|
11
11
|
|
|
12
|
+
const waive = (waiveRequestModel, context) => {
|
|
13
|
+
validateType(waiveRequestModel, WaiveRequestModel);
|
|
14
|
+
return overrideGapApi.waive(waiveRequestModel.contractorId, waiveRequestModel, context);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const retract = (retractRequestModel, context) => {
|
|
18
|
+
validateType(retractRequestModel, RetractRequestModel);
|
|
19
|
+
return overrideGapApi.retract(retractRequestModel.contractorId, retractRequestModel, context);
|
|
20
|
+
};
|
|
21
|
+
|
|
12
22
|
const overrideGap = ({ waiveRequestModel, isTestingBackwardCompatibility = false, context }) => {
|
|
13
23
|
validateType(waiveRequestModel, WaiveRequestModel);
|
|
14
24
|
return overrideGapApi.overrideGap({ waiveRequestModel, isTestingBackwardCompatibility, context });
|
|
@@ -119,8 +129,10 @@ const acceptAll = async (record, context, { note = 'ACCEPTED AUTOMATICALLY' } =
|
|
|
119
129
|
};
|
|
120
130
|
|
|
121
131
|
module.exports = {
|
|
132
|
+
waive,
|
|
122
133
|
waiveAll,
|
|
123
134
|
acceptAll,
|
|
135
|
+
retract,
|
|
124
136
|
getWaiveModel,
|
|
125
137
|
getRetractModel,
|
|
126
138
|
getWaiveModelByGap,
|
|
@@ -60,6 +60,23 @@ const ATTRIBUTE_NAMES_MAP = {
|
|
|
60
60
|
signature: 'signature'
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
+
const auditTriggerType = {
|
|
64
|
+
newAudit: 'NEW_AUDIT',
|
|
65
|
+
changeRequirements: 'CHANGE_REQUIREMENTS',
|
|
66
|
+
updateRequirements: 'UPDATE_REQUIREMENTS',
|
|
67
|
+
updateRequirementsWithNotifications: 'ENTITY_CHANGED',
|
|
68
|
+
gaps: 'GAPS',
|
|
69
|
+
renewal: 'RENEWAL'
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const auditStatus = {
|
|
73
|
+
pending: 'PENDING',
|
|
74
|
+
inProgress: 'IN_PROGRESS',
|
|
75
|
+
onHold: 'ON_HOLD',
|
|
76
|
+
done: 'DONE',
|
|
77
|
+
canceled: 'CANCELED'
|
|
78
|
+
};
|
|
79
|
+
|
|
63
80
|
module.exports = {
|
|
64
81
|
DEFAULT_POLICY_ID,
|
|
65
82
|
POLICY_NAMES_MAP,
|
|
@@ -67,5 +84,7 @@ module.exports = {
|
|
|
67
84
|
COI_AUDIT_STATUSES,
|
|
68
85
|
AUDITOR_ROLE,
|
|
69
86
|
AUDIT_ENTITY_STATUSES,
|
|
70
|
-
VALID_SCORES
|
|
87
|
+
VALID_SCORES,
|
|
88
|
+
auditTriggerType,
|
|
89
|
+
auditStatus
|
|
71
90
|
};
|
|
@@ -5,6 +5,7 @@ const { validateType } = require('../../../../common/validations/typeValidations
|
|
|
5
5
|
const { RecordModifyDateVerificationModel } = require('../models/verification.contractor.model');
|
|
6
6
|
const { AssignRequirementModel } = require('../models/assign.requirement.model');
|
|
7
7
|
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
8
|
+
const { waitFor } = require('../../../../common/utils/timeUtils');
|
|
8
9
|
|
|
9
10
|
const createContractor = async (createContractorModel, context) => {
|
|
10
11
|
validateType(createContractorModel, CreateContractorModel);
|
|
@@ -117,8 +118,14 @@ const deleteAllRecordsInAccount = async (accountId, context, { activationStatus
|
|
|
117
118
|
const response = await deleteByContractorId(record.id, context);
|
|
118
119
|
|
|
119
120
|
if (response.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
120
|
-
console.error(
|
|
121
|
-
|
|
121
|
+
console.error(`Failed to delete record: ${record.company}, retrying...`);
|
|
122
|
+
waitFor(1000);
|
|
123
|
+
const try2response = await deleteByContractorId(record.id, context);
|
|
124
|
+
|
|
125
|
+
if (try2response.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
126
|
+
console.error(`Failed to delete record: ${record.company} second time.`);
|
|
127
|
+
failed.push(response);
|
|
128
|
+
}
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
131
|
|
|
@@ -119,21 +119,22 @@ const getLastMessage = async (
|
|
|
119
119
|
return newestResult;
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
-
const waitForMail = async (emailModel, maxSecondToWait) => {
|
|
123
|
-
let
|
|
122
|
+
const waitForMail = async (emailModel, { maxSecondToWait = 30 } = {}) => {
|
|
123
|
+
let isFound = false;
|
|
124
124
|
const oneSecondInMilliseconds = 1000;
|
|
125
125
|
let timeFromTheStart = 0;
|
|
126
126
|
const started = new Date();
|
|
127
|
-
let
|
|
127
|
+
let foundMails;
|
|
128
128
|
|
|
129
|
-
while (
|
|
130
|
-
({ data:
|
|
131
|
-
|
|
129
|
+
while (!isFound && timeFromTheStart < maxSecondToWait) {
|
|
130
|
+
({ data: foundMails } = await getAllMessages(emailModel));
|
|
131
|
+
isFound = foundMails.length > 0;
|
|
132
132
|
const now = new Date();
|
|
133
133
|
timeFromTheStart = (now - started) / oneSecondInMilliseconds;
|
|
134
|
+
await timeUtils.waitFor(3).seconds;
|
|
134
135
|
}
|
|
135
136
|
|
|
136
|
-
return
|
|
137
|
+
return foundMails;
|
|
137
138
|
};
|
|
138
139
|
|
|
139
140
|
module.exports = {
|