@getjones/test-infra 1.3.501 → 1.4.1

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.
Files changed (57) hide show
  1. package/package.json +1 -1
  2. package/src/common/validations/typeValidations.js +7 -1
  3. package/src/index.js +4 -4
  4. package/src/saas/internal-api/accounts/api/settings/{settings.setup.js → settings.service.js} +1 -1
  5. package/src/saas/internal-api/accounts/index.js +5 -4
  6. package/src/saas/internal-api/accounts/models/settings/update.settings.model.js +0 -2
  7. package/src/saas/internal-api/accounts/utils/utils.js +32 -0
  8. package/src/saas/internal-api/auth/api/{auth.setup.js → auth.service.js} +5 -5
  9. package/src/saas/internal-api/auth/index.js +1 -1
  10. package/src/saas/internal-api/coi/consts/uploaderTypes.js +7 -0
  11. package/src/saas/internal-api/coi/index.js +11 -4
  12. package/src/saas/internal-api/coi/utils/utils.js +48 -0
  13. package/src/saas/internal-api/compliance/index.js +6 -11
  14. package/src/saas/internal-api/contractors/api/contractors.api.js +3 -3
  15. package/src/saas/internal-api/contractors/api/{contractors.setup.js → contractors.service.js} +5 -3
  16. package/src/saas/internal-api/contractors/index.js +3 -2
  17. package/src/saas/internal-api/contractors/models/verification.contractor.model.js +33 -0
  18. package/src/saas/internal-api/globalRecord/api/global.record.api.js +10 -4
  19. package/src/saas/internal-api/globalRecord/api/{global.record.setup.js → global.record.service.js} +8 -3
  20. package/src/saas/internal-api/globalRecord/index.js +2 -2
  21. package/src/saas/internal-api/globalRecord/models/global.record.model.js +3 -1
  22. package/src/saas/internal-api/globalRecord/utils/util.js +55 -33
  23. package/src/saas/internal-api/homepageCharts/index.js +1 -1
  24. package/src/saas/internal-api/projects/api/core/{projects.setup.js → projects.service.js} +19 -20
  25. package/src/saas/internal-api/projects/consts/defaultProject.js +3 -0
  26. package/src/saas/internal-api/projects/index.js +8 -3
  27. package/src/saas/internal-api/projects/models/core/create.project.model.js +18 -3
  28. package/src/saas/internal-api/projects/models/core/update.project.model.js +20 -3
  29. package/src/saas/internal-api/projects/utils/utils.js +61 -0
  30. package/src/saas/internal-api/recordNotes/index.js +3 -0
  31. package/src/saas/internal-api/reports/index.js +1 -1
  32. package/src/saas/internal-api/requirements/index.js +1 -1
  33. package/src/saas/internal-api/tabs/index.js +1 -1
  34. package/src/saas/internal-api/users/index.js +1 -1
  35. package/src/saas/internal-api/vendorProfile/index.js +3 -0
  36. package/src/saas/openapi/requirements/index.js +1 -1
  37. package/tests/validation.test.js +42 -0
  38. /package/src/saas/internal-api/accounts/api/core/{accounts.core.setup.js → accounts.core.service.js} +0 -0
  39. /package/src/saas/internal-api/accounts/api/openapi/{accounts.openapi.setup.js → accounts.openapi.service.js} +0 -0
  40. /package/src/saas/internal-api/coi/api/{coi.setup.js → coi.service.js} +0 -0
  41. /package/src/saas/internal-api/compliance/api/audit/{audit.setup.js → audit.service.js} +0 -0
  42. /package/src/saas/internal-api/compliance/api/convert/{convert.setup.js → convert.service.js} +0 -0
  43. /package/src/saas/internal-api/compliance/api/coverage/{coverage.setup.js → coverage.service.js} +0 -0
  44. /package/src/saas/internal-api/compliance/api/waive/{waive.setup.js → waive.service.js} +0 -0
  45. /package/src/saas/internal-api/homepageCharts/api/{charts.setup.js → charts.service.js} +0 -0
  46. /package/src/saas/internal-api/projects/api/settings/{project.settings.setup.js → project.settings.service.js} +0 -0
  47. /package/src/saas/internal-api/recordNotes/api/{record.notes.setup.js → record.notes.service.js} +0 -0
  48. /package/src/saas/internal-api/reports/api/{reports.setup.js → reports.service.js} +0 -0
  49. /package/src/saas/internal-api/requirements/api/{requirements.setup.js → requirements.service.js} +0 -0
  50. /package/src/saas/internal-api/tabs/api/{tabs.setup.js → tabs.service.js} +0 -0
  51. /package/src/saas/internal-api/users/api/{users.setup.js → users.service.js} +0 -0
  52. /package/src/saas/internal-api/vendorProfile/api/{vendor.profile.setup.js → vendor.profile.service.js} +0 -0
  53. /package/src/saas/openapi/accounts/{accounts.setup.js → accounts.service.js} +0 -0
  54. /package/src/saas/openapi/contractors/{contractors.setup.js → contractors.service.js} +0 -0
  55. /package/src/saas/openapi/projects/{projects.setup.js → projects.service.js} +0 -0
  56. /package/src/saas/openapi/requirements/{requirements.setup.js → requirements.service.js} +0 -0
  57. /package/src/saas/openapi/tabs/{tabs.setup.js → tabs.service.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getjones/test-infra",
3
- "version": "1.3.501",
3
+ "version": "1.4.1",
4
4
  "description": "Providing internal and openapi interface",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -4,4 +4,10 @@ const validateType = (input, expectedType) => {
4
4
  }
5
5
  };
6
6
 
7
- module.exports = { validateType };
7
+ const validateDateString = dateString => {
8
+ if (isNaN(Date.parse(dateString))) {
9
+ throw TypeError(`Invalid date string '${dateString}'`);
10
+ }
11
+ };
12
+
13
+ module.exports = { validateType, validateDateString };
package/src/index.js CHANGED
@@ -49,10 +49,10 @@ const getInternalAPI = () => {
49
49
  };
50
50
 
51
51
  const getOpenAPI = () => {
52
- const accounts = require('./saas/openapi/accounts/accounts.setup');
53
- const tabs = require('./saas/openapi/tabs/tabs.setup');
54
- const contractors = require('./saas/openapi/contractors/contractors.setup');
55
- const projects = require('./saas/openapi/projects/projects.setup');
52
+ const accounts = require('./saas/openapi/accounts/accounts.service');
53
+ const tabs = require('./saas/openapi/tabs/tabs.service');
54
+ const contractors = require('./saas/openapi/contractors/contractors.service');
55
+ const projects = require('./saas/openapi/projects/projects.service');
56
56
  const requirements = require('./saas/openapi/requirements');
57
57
  const openAPI = { accounts, tabs, contractors, projects, requirements };
58
58
  return openAPI;
@@ -12,7 +12,7 @@ const updateAccountSettings = (updateAccountSettingsModel, context) => {
12
12
  };
13
13
 
14
14
  const restoreAccountSettings = (accountId, context) => {
15
- const updateAccountSettingsModel = new UpdateAccountSettingsModel(accountId, false, false, false, false);
15
+ const updateAccountSettingsModel = new UpdateAccountSettingsModel(accountId, false, false, false);
16
16
  return accountsAPI.updateAccountSettings(updateAccountSettingsModel, context);
17
17
  };
18
18
 
@@ -5,10 +5,11 @@ const UpdateAccountSettingsModel = require('./models/settings/update.settings.mo
5
5
  const settingsModels = { UpdateAccountSettingsModel };
6
6
 
7
7
  const models = { core: coreModels, settings: settingsModels };
8
+ const utils = require('./utils/utils');
8
9
 
9
- const coreService = require('./api/core/accounts.core.setup');
10
- const openApiServices = require('./api/openapi/accounts.openapi.setup');
11
- const settingsServices = require('./api/settings/settings.setup');
10
+ const coreService = require('./api/core/accounts.core.service');
11
+ const openApiServices = require('./api/openapi/accounts.openapi.service');
12
+ const settingsServices = require('./api/settings/settings.service');
12
13
 
13
14
  const services = {
14
15
  core: coreService,
@@ -16,4 +17,4 @@ const services = {
16
17
  settings: settingsServices
17
18
  };
18
19
 
19
- module.exports = { services, models };
20
+ module.exports = { services, models, utils };
@@ -1,13 +1,11 @@
1
1
  class UpdateAccountSettingsModel {
2
2
  constructor(
3
3
  accountId,
4
- isMultiPropertyTenants,
5
4
  isHighPriority,
6
5
  hasAnalyticsDashboard,
7
6
  isExcludedFromNetwork
8
7
  ) {
9
8
  this.accountId = accountId;
10
- this.isMultiPropertyTenants = isMultiPropertyTenants;
11
9
  this.isHighPriority = isHighPriority;
12
10
  this.hasAnalyticsDashboard = hasAnalyticsDashboard;
13
11
  this.isExcludedFromNetwork = isExcludedFromNetwork;
@@ -0,0 +1,32 @@
1
+ const coreService = require('../api/core/accounts.core.service');
2
+ const CreateAccountModel = require('../models/core/create.account.model');
3
+
4
+ const getOrCreateAccount = (context, accountName, email, { password, type } = {}) => {
5
+ const createAccountModel = new CreateAccountModel(
6
+ accountName,
7
+ email,
8
+ password,
9
+ propertyType = type
10
+ );
11
+ return coreService.getOrCreateAccount(createAccountModel, context);
12
+ };
13
+
14
+ const createAccount = async (context, accountName, email, { password, type } = {}) => {
15
+ const createAccountModel = new CreateAccountModel(
16
+ accountName,
17
+ email,
18
+ password,
19
+ propertyType = type
20
+ );
21
+
22
+ const response = await coreService.createAccount(createAccountModel, context);
23
+ return response.data;
24
+ };
25
+
26
+ const deleteAccountByName = async (context, accountName) => {
27
+ const existingAccount = await coreService.getAccount(accountName, context);
28
+
29
+ return existingAccount && coreService.deleteAccountById(existingAccount.userId, context);
30
+ };
31
+
32
+ module.exports = { getOrCreateAccount, createAccount, deleteAccountByName };
@@ -4,8 +4,8 @@ const authApi = require('./auth.api');
4
4
 
5
5
  const getAuthCookie = async (email, password) => {
6
6
  try {
7
- const res = await authApi.login(email, password);
8
- const authCookie = res.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
7
+ const response = await authApi.login(email, password);
8
+ const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
9
9
 
10
10
  return authCookie;
11
11
  } catch (error) {
@@ -13,7 +13,7 @@ const getAuthCookie = async (email, password) => {
13
13
  }
14
14
  };
15
15
 
16
- const getIcsCookie = async () => {
16
+ const getIcsCookie = () => {
17
17
  requiredValidation({
18
18
  'credentials.superUser': credentials.superUser,
19
19
  'credentials.superUserPassword': credentials.superUserPassword
@@ -21,7 +21,7 @@ const getIcsCookie = async () => {
21
21
  return getAuthCookie(credentials.superUser, credentials.superUserPassword);
22
22
  };
23
23
 
24
- const getAuditorCookie = async () => {
24
+ const getAuditorCookie = () => {
25
25
  const { auditorUser, auditorPassword } = credentials;
26
26
  requiredValidation({
27
27
  'credentials.auditorUser': auditorUser,
@@ -30,7 +30,7 @@ const getAuditorCookie = async () => {
30
30
  return getAuthCookie(auditorUser, auditorPassword);
31
31
  };
32
32
 
33
- const getOperatorCookie = async () => {
33
+ const getOperatorCookie = () => {
34
34
  const { operatorUser, operatorPassword } = credentials;
35
35
  requiredValidation({
36
36
  'credentials.operatorUser': operatorUser,
@@ -1,3 +1,3 @@
1
- const services = require('./api/auth.setup');
1
+ const services = require('./api/auth.service');
2
2
 
3
3
  module.exports = { services };
@@ -0,0 +1,7 @@
1
+ const UPLOADER_TYPES = {
2
+ ICS: 'ICS',
3
+ PM: 'PM',
4
+ AUDITOR: 'AUDITOR'
5
+ };
6
+
7
+ module.exports = UPLOADER_TYPES;
@@ -1,6 +1,13 @@
1
- const submitCoiModel = require('./models/submit.coi.model');
2
- const services = require('./api/coi.setup');
1
+ const services = require('./api/coi.service');
3
2
 
4
- const models = { submit: submitCoiModel };
3
+ const models = {
4
+ submit: require('./models/submit.coi.model')
5
+ };
5
6
 
6
- module.exports = { services, models };
7
+ const utils = require('./utils/utils');
8
+
9
+ const consts = {
10
+ UPLOADER_TYPES: require('./consts/uploaderTypes')
11
+ };
12
+
13
+ module.exports = { services, models, utils, consts };
@@ -0,0 +1,48 @@
1
+ const fs = require('fs');
2
+
3
+ const services = require('../api/coi.service');
4
+ const { SubmitCoiModel } = require('../models/submit.coi.model');
5
+
6
+ const uploadFileToStorage = (recordId, filePath) => {
7
+ const fileData = fs.createReadStream(filePath);
8
+ return services.uploadToS3(recordId, fileData);
9
+ };
10
+
11
+ const submitCoiFilesUpload = (recordId, fileIds, uploaderType, uploaderEmail) => {
12
+ const submitCoiModel = new SubmitCoiModel(
13
+ recordId,
14
+ fileIds,
15
+ uploaderType,
16
+ uploaderEmail
17
+ );
18
+ return services.submitCoi(submitCoiModel);
19
+ };
20
+
21
+ const uploadCoi = async (
22
+ recordId,
23
+ filePath,
24
+ uploaderType,
25
+ uploaderEmail,
26
+ {
27
+ markAsScaned, // Should be passed with context
28
+ context
29
+ } = {}
30
+ ) => {
31
+ const uploadResponse = await uploadFileToStorage(recordId, filePath);
32
+ const fileId = uploadResponse.data.fileId;
33
+
34
+ const submitResponse = fileId && await submitCoiFilesUpload(recordId, [fileId], uploaderType, uploaderEmail);
35
+ const uploadedCoi = !!submitResponse.data.fileName && { id: fileId, name: submitResponse.data.fileName };
36
+
37
+ if (uploadedCoi.name && markAsScaned && context) {
38
+ await services.completeScan(recordId, uploadedCoi.name, context);
39
+ }
40
+
41
+ return uploadedCoi;
42
+ };
43
+
44
+ module.exports = {
45
+ uploadCoi,
46
+ uploadFileToStorage,
47
+ submitCoiFilesUpload
48
+ };
@@ -1,27 +1,22 @@
1
1
  const auditModels = require('./models/audit/audit.model');
2
- const auditServices = require('./api/audit/audit.setup');
2
+ const auditServices = require('./api/audit/audit.service');
3
3
 
4
4
  const waiveModels = require('./models/waive/waive.model');
5
- const waiveServices = require('./api/waive/waive.setup');
5
+ const waiveServices = require('./api/waive/waive.service');
6
6
 
7
- const convertServices = require('./api/convert/convert.setup');
8
- const coverageServices = require('./api/coverage/coverage.setup');
9
-
10
- const globalRecordModels = require('../globalRecord/models/global.record.model');
11
- const globalRecordServices = require('../globalRecord/api/global.record.setup');
7
+ const convertServices = require('./api/convert/convert.service');
8
+ const coverageServices = require('./api/coverage/coverage.service');
12
9
 
13
10
  const models = {
14
11
  audit: auditModels,
15
- waive: waiveModels,
16
- globalRecord: globalRecordModels
12
+ waive: waiveModels
17
13
  };
18
14
 
19
15
  const services = {
20
16
  audit: auditServices,
21
17
  waive: waiveServices,
22
18
  convert: convertServices,
23
- coverage: coverageServices,
24
- globalRecord: globalRecordServices
19
+ coverage: coverageServices
25
20
  };
26
21
 
27
22
  module.exports = { services, models };
@@ -35,8 +35,8 @@ const archiveByContractorId = (contractorId, context) => {
35
35
  return requests.deleteRequestHandler(Endpoints.archive(contractorId), context);
36
36
  };
37
37
 
38
- const restoreByContractorId = (contractorId, context) => {
39
- return requests.postRequestHandler(Endpoints.restore(contractorId), {}, context);
38
+ const restoreContractor = (recordVerificationModel, context) => {
39
+ return requests.postRequestHandler(Endpoints.restore(recordVerificationModel.contractorId), recordVerificationModel, context);
40
40
  };
41
41
 
42
42
  const editContractor = (editContractorModel, context) => {
@@ -75,7 +75,7 @@ module.exports = {
75
75
  getContractorById,
76
76
  deleteByContractorId,
77
77
  archiveByContractorId,
78
- restoreByContractorId,
78
+ restoreContractor,
79
79
  editContractor,
80
80
  updateExpiryDate,
81
81
  assignMptToProperties,
@@ -2,6 +2,7 @@ const contractorsAPI = require('./contractors.api');
2
2
  const { CreateContractorModel } = require('../models/create.contractor.model');
3
3
  const { ContractorModel, MptModel } = require('../models/edit.contractor.model');
4
4
  const { validateType } = require('../../../../common/validations/typeValidations');
5
+ const { RecordModifyDateVerificationModel } = require('../models/verification.contractor.model');
5
6
 
6
7
  const createContractor = async (createContractorModel, context) => {
7
8
  validateType(createContractorModel, CreateContractorModel);
@@ -28,8 +29,9 @@ const archiveByContractorId = (contractorId, context) => {
28
29
  return contractorsAPI.archiveByContractorId(contractorId, context);
29
30
  };
30
31
 
31
- const restoreByContractorId = (contractorId, context) => {
32
- return contractorsAPI.restoreByContractorId(contractorId, context);
32
+ const restoreContractor = (recordVerificationModel, context) => {
33
+ validateType(recordVerificationModel, RecordModifyDateVerificationModel);
34
+ return contractorsAPI.restoreContractor(recordVerificationModel, context);
33
35
  };
34
36
 
35
37
  const editContractor = (editContractorModel, context) => {
@@ -60,7 +62,7 @@ module.exports = {
60
62
  getContractorById,
61
63
  deleteByContractorId,
62
64
  archiveByContractorId,
63
- restoreByContractorId,
65
+ restoreContractor,
64
66
  editContractor,
65
67
  updateExpiryDate,
66
68
  getContractorsByTabId,
@@ -1,7 +1,8 @@
1
1
  const createModel = require('./models/create.contractor.model');
2
2
  const editModel = require('./models/edit.contractor.model');
3
- const services = require('./api/contractors.setup');
3
+ const verificationModel = require('./models/verification.contractor.model');
4
+ const services = require('./api/contractors.service');
4
5
 
5
- const models = { create: createModel, edit: editModel };
6
+ const models = { create: createModel, edit: editModel, verification: verificationModel };
6
7
 
7
8
  module.exports = { services, models };
@@ -0,0 +1,33 @@
1
+ const { validateDateString } = require('../../../../common/validations/typeValidations');
2
+
3
+ class RecordModifyDateVerificationModel {
4
+ constructor(
5
+ contractorId,
6
+ contractorDateModified,
7
+ {
8
+ contractorOverrideDateModified,
9
+ requirementId,
10
+ requirementDateModified
11
+ } = {}
12
+ ) {
13
+ validateDateString(contractorDateModified);
14
+
15
+ if (contractorOverrideDateModified) {
16
+ validateDateString(contractorOverrideDateModified);
17
+ }
18
+
19
+ if (requirementId) {
20
+ validateDateString(requirementDateModified);
21
+ }
22
+
23
+ this.contractorId = contractorId;
24
+ this.contractorDateModified = contractorDateModified;
25
+ this.contractorOverrideDateModified = contractorOverrideDateModified;
26
+ this.requirementId = requirementId;
27
+ this.requirementDateModified = requirementDateModified;
28
+ }
29
+ }
30
+
31
+ module.exports = {
32
+ RecordModifyDateVerificationModel
33
+ };
@@ -12,7 +12,8 @@ const Endpoints = {
12
12
  updateGlobalRecord: id => `${nodeBackendUrl}/global-record/id/${id}`,
13
13
  getRecordProfileDetails: id => `${nodeBackendUrl}/global-record/record-profile/id/${id}`,
14
14
  getGlobalRecordByPolicyNumber: policyNumber => `${nodeBackendUrl}/global-record/policyNumber/${policyNumber}`,
15
- publishGlobalRecord: `${backendUrl}/saas/global-record/publish`
15
+ publishGlobalRecord: `${backendUrl}/saas/global-record/publish`,
16
+ getGlobalRecordLinkedRequests: id => `${backendUrl}/saas/global-record/${id}/linked-requests`
16
17
  };
17
18
 
18
19
  const getGlobalRecord = async (id, nodeBackendSecret) => {
@@ -27,8 +28,8 @@ const getAllGlobalRecords = async (data, pageNumber, itemsInPage, context) => {
27
28
  return cookieAuthRequests.postRequestHandler(Endpoints.getAllGlobalRecords(pageNumber, itemsInPage), data, context);
28
29
  };
29
30
 
30
- const deleteGlobalRecord = async (id, nodeBackendSecret) => {
31
- return apiKeyAuthRequests.deleteRequestHandler(Endpoints.deleteGlobalRecord(id), nodeBackendSecret);
31
+ const deleteGlobalRecord = async (id, nodeBackendSecret, globalRecordModel) => {
32
+ return apiKeyAuthRequests.deleteRequestHandler(Endpoints.deleteGlobalRecord(id), nodeBackendSecret, {}, {}, globalRecordModel);
32
33
  };
33
34
 
34
35
  const updateGlobalRecord = async (id, nodeBackendSecret, updatedGlobalRecord) => {
@@ -51,6 +52,10 @@ const getGlobalRecordByPolicyNumber = async (policyNumber, nodeBackendSecret) =>
51
52
  return apiKeyAuthRequests.getRequestHandler(Endpoints.getGlobalRecordByPolicyNumber(policyNumber), nodeBackendSecret);
52
53
  };
53
54
 
55
+ const getGlobalRecordLinkedRequests = async (id, context) => {
56
+ return cookieAuthRequests.getRequestHandler(Endpoints.getGlobalRecordLinkedRequests(id), {}, context);
57
+ };
58
+
54
59
  module.exports = {
55
60
  createGlobalRecord,
56
61
  getGlobalRecord,
@@ -60,5 +65,6 @@ module.exports = {
60
65
  updateGlobalRecord,
61
66
  getRecordProfileDetails,
62
67
  getGlobalRecordByPolicyNumber,
63
- publishGlobalRecord
68
+ publishGlobalRecord,
69
+ getGlobalRecordLinkedRequests
64
70
  };
@@ -40,8 +40,8 @@ const getGlobalRecordServiceAreas = async context => {
40
40
  return globalRecordAPI.getGlobalRecordServiceAreas(context);
41
41
  };
42
42
 
43
- const deleteGlobalRecord = async id => {
44
- return globalRecordAPI.deleteGlobalRecord(id, nodeBackendSecret);
43
+ const deleteGlobalRecord = async (id, globalRecordModel) => {
44
+ return globalRecordAPI.deleteGlobalRecord(id, nodeBackendSecret, globalRecordModel);
45
45
  };
46
46
 
47
47
  const updateGlobalRecord = async (id, updatedGlobalRecordModel) => {
@@ -56,6 +56,10 @@ const publishGlobalRecord = async (globalRecordDetails, context) => {
56
56
  return globalRecordAPI.publishGlobalRecord(globalRecordDetails, context);
57
57
  };
58
58
 
59
+ const getGlobalRecordLinkedRequests = async (id, context) => {
60
+ return globalRecordAPI.getGlobalRecordLinkedRequests(id, context);
61
+ };
62
+
59
63
  module.exports = {
60
64
  createGlobalRecord,
61
65
  getGlobalRecordById,
@@ -68,5 +72,6 @@ module.exports = {
68
72
  updateGlobalRecord,
69
73
  getRecordProfileDetails,
70
74
  getGlobalRecordByPolicyNumber,
71
- publishGlobalRecord
75
+ publishGlobalRecord,
76
+ getGlobalRecordLinkedRequests
72
77
  };
@@ -1,5 +1,5 @@
1
- const models = require('../globalRecord/models/global.record.model');
2
- const services = require('../globalRecord/api/global.record.setup');
1
+ const models = require('./models/global.record.model');
2
+ const services = require('./api/global.record.service');
3
3
  const consts = require('./consts');
4
4
  const utils = require('./utils/util');
5
5
 
@@ -14,7 +14,8 @@ class CreateGlobalRecordModel {
14
14
  serviceAreas,
15
15
  primaryEmail,
16
16
  dba,
17
- lastPublishUserName
17
+ lastPublishUserName,
18
+ __v
18
19
  } = {}
19
20
  ) {
20
21
  this.id = id;
@@ -31,6 +32,7 @@ class CreateGlobalRecordModel {
31
32
  this.primaryEmail = primaryEmail;
32
33
  this.dba = dba;
33
34
  this.lastPublishUserName = lastPublishUserName;
35
+ this.__v = __v;
34
36
  }
35
37
  }
36
38
 
@@ -1,51 +1,61 @@
1
- const globalRecordServices = require('../api/global.record.setup');
1
+ const globalRecordServices = require('../api/global.record.service');
2
2
  const globalRecordModels = require('../models/global.record.model');
3
3
 
4
4
  const { CreateGlobalRecordModel } = globalRecordModels;
5
5
  const { createGlobalRecord, getAllGlobalRecordsInPage } = globalRecordServices;
6
6
 
7
- const { getCapitalLetterUnicodeValueList, getUniqueNumber } = require('../../../../common/utils/numberUtils');
7
+ const {
8
+ getCapitalLetterUnicodeValueList,
9
+ getUniqueNumber
10
+ } = require('../../../../common/utils/numberUtils');
8
11
 
9
12
  const { SERVICE_AREAS } = require('../consts');
10
13
 
11
- const createGlobalRecordConfig = (name, { stateIndex, glPolicyNumbers } = {}) => {
14
+ const createGlobalRecordConfig = (
15
+ name,
16
+ { stateIndex, glPolicyNumbers } = {}
17
+ ) => {
12
18
  const serviceArea = getServiceAreaByIndex(stateIndex || 0);
13
19
  const uniqueNumbers = glPolicyNumbers || getUniqueNumber();
14
20
  const emailBase = name.replace(/\s+/g, '').toLowerCase();
15
21
  return {
16
- 'header': `${name}Header`,
17
- 'recordName': `${name}Name`,
18
- 'additionalContacts': [`${emailBase}@additional1.jon`, `${emailBase}@additional2.jon`],
19
- 'brokerEmails': [`${emailBase}@broker1.jon`, `${emailBase}@broker2.jon`],
20
- 'expirationDate': '2030-12-09',
21
- 'publishDate': '',
22
- 'lastPublishUserName': '',
23
- 'glPolicyNumbers': [uniqueNumbers.toString()],
24
- 'numberOfAssociatedRequests': 0,
25
- 'numberOfFilledMandatory': 0,
26
- 'dba': '',
27
- 'primaryEmail': '',
28
- 'serviceAreas': [
29
- getServiceArea(serviceArea)
30
- ]
22
+ header: `${name}Header`,
23
+ recordName: `${name}Name`,
24
+ additionalContacts: [
25
+ `${emailBase}@additional1.jon`,
26
+ `${emailBase}@additional2.jon`
27
+ ],
28
+ brokerEmails: [`${emailBase}@broker1.jon`, `${emailBase}@broker2.jon`],
29
+ expirationDate: '2030-12-09',
30
+ publishDate: '',
31
+ lastPublishUserName: '',
32
+ glPolicyNumbers: [uniqueNumbers.toString()],
33
+ numberOfAssociatedRequests: 0,
34
+ numberOfFilledMandatory: 0,
35
+ dba: '',
36
+ primaryEmail: '',
37
+ serviceAreas: [getServiceArea(serviceArea)],
38
+ __v: 0
31
39
  };
32
40
  };
33
41
 
34
42
  const getServiceArea = state => {
35
43
  return {
36
- 'city': `${state}TestCity`,
37
- 'state': state
44
+ city: `${state}TestCity`,
45
+ state: state
38
46
  };
39
47
  };
40
48
 
41
- const createGlobalRecordConfigs = (nameList, { stateIndexes, glPolicyNumbers } = {}) => {
42
- return nameList.map((name, index) => createGlobalRecordConfig(
43
- name,
44
- {
49
+ const createGlobalRecordConfigs = (
50
+ nameList,
51
+ { stateIndexes, glPolicyNumbers } = {}
52
+ ) => {
53
+ return nameList.map((name, index) =>
54
+ createGlobalRecordConfig(name, {
45
55
  stateIndex: stateIndexes ? stateIndexes[index] : index,
46
56
  glPolicyNumbers: glPolicyNumbers ? glPolicyNumbers[index] : null
47
- }
48
- ));
57
+ })
58
+ );
49
59
  };
50
60
 
51
61
  const createGlobalRecordModel = config => {
@@ -64,7 +74,8 @@ const createGlobalRecordModel = config => {
64
74
  serviceAreas: config.serviceAreas,
65
75
  primaryEmail: config.primaryEmail,
66
76
  dba: config.dba,
67
- lastPublishUserName: config.lastPublishUserName
77
+ lastPublishUserName: config.lastPublishUserName,
78
+ __v: config.__v
68
79
  }
69
80
  );
70
81
  };
@@ -81,18 +92,24 @@ const getCreateRandomGlobalRecordModels = nameList => {
81
92
  const createGlobalRecords = async (globalRecordModelList, context) => {
82
93
  const newGlobalRecodDetailsList = new Array();
83
94
  for (globalRecordModel of globalRecordModelList) {
84
- const newGlobalRecordDetails = await createGlobalRecord(globalRecordModel, context);
95
+ const newGlobalRecordDetails = await createGlobalRecord(
96
+ globalRecordModel,
97
+ context
98
+ );
85
99
  newGlobalRecodDetailsList.push(newGlobalRecordDetails);
86
100
  }
87
101
 
88
102
  return newGlobalRecodDetailsList;
89
103
  };
90
104
 
91
- const getAllGlobalRecords = async (numberOfPages, context) => {
105
+ const getGlobalRecordsByNumberOfPages = async (numberOfPages, context) => {
92
106
  const allGlobalRecords = new Array();
93
107
 
94
108
  for (let pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) {
95
- const allGlobalRecordsInPage = await getAllGlobalRecordsInPage(pageNumber, context);
109
+ const allGlobalRecordsInPage = await getAllGlobalRecordsInPage(
110
+ pageNumber,
111
+ context
112
+ );
96
113
  allGlobalRecords.push(allGlobalRecordsInPage);
97
114
  }
98
115
 
@@ -104,11 +121,16 @@ const getServiceAreaByIndex = stateIndex => {
104
121
  };
105
122
 
106
123
  const getGlobalRecordsDefaultNameList = (nameBase, listLength) => {
107
- const letterUnicodeValueList = getCapitalLetterUnicodeValueList({ listLength });
124
+ const letterUnicodeValueList = getCapitalLetterUnicodeValueList({
125
+ listLength
126
+ });
108
127
 
109
128
  //How much times same letter will appear in one index on the array
110
129
  const repeatTimes = 4;
111
- return letterUnicodeValueList.map(unicode => `${nameBase} ${String.fromCharCode(unicode).repeat(repeatTimes)}`);
130
+ return letterUnicodeValueList.map(
131
+ unicode =>
132
+ `${nameBase} ${String.fromCharCode(unicode).repeat(repeatTimes)}`
133
+ );
112
134
  };
113
135
 
114
136
  module.exports = {
@@ -119,6 +141,6 @@ module.exports = {
119
141
  createGlobalRecordModels,
120
142
  getCreateRandomGlobalRecordModels,
121
143
  getGlobalRecordsDefaultNameList,
122
- getAllGlobalRecords,
144
+ getGlobalRecordsByNumberOfPages,
123
145
  getServiceArea
124
146
  };
@@ -1,3 +1,3 @@
1
- const services = require('./api/charts.setup');
1
+ const services = require('./api/charts.service');
2
2
 
3
3
  module.exports = { services };
@@ -1,14 +1,8 @@
1
1
  const projectsApi = require('./projects.api');
2
- const accounts = require('../../../accounts/api/core/accounts.core.setup');
3
2
  const { validateType } = require('../../../../../common/validations/typeValidations');
4
3
  const CreateProjectModel = require('../../models/core/create.project.model');
5
4
  const UpdateProjectModel = require('../../models/core/update.project.model');
6
5
 
7
- const getProjectsByAccountName = async (accountName, context) => {
8
- const accountId = await accounts.getAccountId(accountName, context);
9
- return getProjectsByAccountId(accountId, context);
10
- };
11
-
12
6
  const getProjectsByAccountId = (accountId, context) => {
13
7
  return projectsApi.getProjectsByAccountId(accountId, context);
14
8
  };
@@ -17,15 +11,21 @@ const getProjectByProjectId = (projectId, context) => {
17
11
  return projectsApi.getProjectByProjectId(projectId, context);
18
12
  };
19
13
 
20
- const getProjectsByName = async (accountId, projectName, context) => {
14
+ const getProjectByName = async (accountId, projectName, context) => {
21
15
  const { data: projects } = await getProjectsByAccountId(accountId, context);
22
- const filteredProjects = projects.filter(project => project.projectName === projectName);
23
- return filteredProjects;
16
+ const requestedProject = projects.find(project => project.projectName === projectName);
17
+ return requestedProject ? requestedProject : null;
24
18
  };
25
19
 
26
20
  const deleteProjectByName = async (accountId, projectName, context) => {
27
- const projects = await getProjectsByName(accountId, projectName, context);
28
- projects.map(async project => await projectsApi.deleteProjectById(project.projectId, context));
21
+ const { data: projects } = await getProjectsByAccountId(accountId, context);
22
+ const filteredProjects = projects.filter(project => project.projectName === projectName);
23
+
24
+ await Promise.all(
25
+ filteredProjects.map(
26
+ async project => await projectsApi.deleteProjectById(project.projectId, context)
27
+ )
28
+ );
29
29
  };
30
30
 
31
31
  const createProject = (createProjectModel, context) => {
@@ -34,14 +34,14 @@ const createProject = (createProjectModel, context) => {
34
34
  };
35
35
 
36
36
  const getOrCreateProject = async (createProjectModel, context) => {
37
- let existingProjects = await getProjectsByName(createProjectModel.userId, createProjectModel.projectName, context);
37
+ let project = await getProjectByName(createProjectModel.userId, createProjectModel.projectName, context);
38
38
 
39
- if (!existingProjects.length) {
39
+ if (!project) {
40
40
  await createProject(createProjectModel, context);
41
- existingProjects = await getProjectsByName(createProjectModel.userId, createProjectModel.projectName, context);
41
+ project = await getProjectByName(createProjectModel.userId, createProjectModel.projectName, context);
42
42
  }
43
43
 
44
- return existingProjects[0] || null;
44
+ return project;
45
45
  };
46
46
 
47
47
  const updateProject = (updateProjectModel, context) => {
@@ -50,12 +50,11 @@ const updateProject = (updateProjectModel, context) => {
50
50
  };
51
51
 
52
52
  module.exports = {
53
- getProjectsByAccountName,
53
+ getOrCreateProject,
54
54
  getProjectsByAccountId,
55
+ getProjectByProjectId,
56
+ getProjectByName,
55
57
  createProject,
56
58
  deleteProjectByName,
57
- getOrCreateProject,
58
- updateProject,
59
- getProjectsByName,
60
- getProjectByProjectId
59
+ updateProject
61
60
  };
@@ -0,0 +1,3 @@
1
+ const DEFAULT_PROJECT_NAME = 'My First Project';
2
+
3
+ module.exports = { NAME: DEFAULT_PROJECT_NAME };
@@ -1,5 +1,5 @@
1
- const projectService = require('./api/core/projects.setup');
2
- const projectSettingsService = require('./api/settings/project.settings.setup');
1
+ const projectService = require('./api/core/projects.service');
2
+ const projectSettingsService = require('./api/settings/project.settings.service');
3
3
  const CreateProjectModel = require('./models/core/create.project.model');
4
4
  const UpdateProjectModel = require('./models/core/update.project.model');
5
5
  const UpdateProjectSettingsModel = require('./models/settings/update.project.settings.model');
@@ -16,4 +16,9 @@ const models = {
16
16
  settings: settingsModels
17
17
  };
18
18
 
19
- module.exports = { models, services };
19
+ const utils = require('./utils/utils');
20
+ const consts = {
21
+ DEFAULT_PROJECT: require('./consts/defaultProject')
22
+ };
23
+
24
+ module.exports = { models, services, utils, consts };
@@ -1,6 +1,21 @@
1
- function CreateProjectModel(accountId, name, description, address, number, startDate, endDate,
2
- city, state, zipCode, companyNameForProject, certificateHolder = '', additionalInsured = '',
3
- tenantSolutionEnabled = 0, onboardingEnabled = 0, automaticRenewalEnabled = 0) {
1
+ function CreateProjectModel(
2
+ accountId,
3
+ name,
4
+ description,
5
+ address,
6
+ number,
7
+ startDate,
8
+ endDate,
9
+ city,
10
+ state,
11
+ zipCode,
12
+ companyNameForProject,
13
+ certificateHolder = '',
14
+ additionalInsured = '',
15
+ tenantSolutionEnabled = 0,
16
+ onboardingEnabled = 0,
17
+ automaticRenewalEnabled = 0
18
+ ) {
4
19
  this.projectName = name;
5
20
  this.userId = accountId;
6
21
  this.regionOrDivision = description;
@@ -1,6 +1,23 @@
1
- function UpdateProjectModel(accountId, projectId, name, description, address, number, startDate, endDate,
2
- city, state, zipCode, companyNameForProject, certificateHolder = '', additionalInsured = '',
3
- tenantSolutionEnabled = 0, onboardingEnabled = 0, automaticRenewalEnabled = 0, onboardedVendors = 0) {
1
+ function UpdateProjectModel(
2
+ accountId,
3
+ projectId,
4
+ name,
5
+ description,
6
+ address,
7
+ number,
8
+ startDate,
9
+ endDate,
10
+ city,
11
+ state,
12
+ zipCode,
13
+ companyNameForProject,
14
+ certificateHolder = '',
15
+ additionalInsured = '',
16
+ tenantSolutionEnabled = 0,
17
+ onboardingEnabled = 0,
18
+ automaticRenewalEnabled = 0,
19
+ onboardedVendors = 0
20
+ ) {
4
21
  this.projectId = projectId;
5
22
  this.projectName = name;
6
23
  this.userId = accountId;
@@ -0,0 +1,61 @@
1
+ const services = require('../api/core/projects.service');
2
+
3
+ const CreateProjectModel = require('../models/core/create.project.model');
4
+ const UpdateProjectModel = require('../models/core/update.project.model');
5
+
6
+ const { NAME: DEFAULT_PROJECT_NAME } = require('../consts/defaultProject');
7
+
8
+ const getDefaultProjectId = async (accountId, context) => {
9
+ const defaultProject = await services.getProjectByName(accountId, DEFAULT_PROJECT_NAME, context);
10
+ return defaultProject ? defaultProject.projectId : null;
11
+ };
12
+
13
+ const getOrCreateProject = (accountId, projectConfig, context) => {
14
+ const createProjectModel = getCreateProjectModel(accountId, projectConfig);
15
+ return services.getOrCreateProject(createProjectModel, context);
16
+ };
17
+
18
+ const getCreateProjectModel = (accountId, projectData) => {
19
+ const createProjectModel = new CreateProjectModel(
20
+ accountId,
21
+ projectData.name || projectData['Property Name'] || projectData['Project Name'],
22
+ projectData.description || projectData['Region/Division'] || 'N/A',
23
+ projectData.address || projectData['Address'] || 'N/A',
24
+ projectData.number || projectData['Property Number'] || projectData['Project Number'] || 'N/A',
25
+ projectData.startDate || projectData['Start Date'] || '01/01/2021',
26
+ projectData.endDate || projectData['End Date'] || '01/01/2021',
27
+ projectData.city || projectData['City'] || 'N/A',
28
+ projectData.state || projectData['State'] || 'Alabama',
29
+ projectData.zipCode || projectData['Zip Code'] || '11111',
30
+ projectData.companyNameForProject || projectData['Company Name (for external communications)']
31
+ );
32
+ return createProjectModel;
33
+ };
34
+
35
+ const getUpdateProjectModel = (accountId, projectId, projectData) => {
36
+ const updateProjectModel = new UpdateProjectModel(
37
+ accountId,
38
+ projectId,
39
+ projectData.name || projectData['Property Name'] || projectData['Project Name'],
40
+ projectData.description || projectData['Region/Division'],
41
+ projectData.address || projectData['Address'],
42
+ projectData.number || projectData['Property Number'] || projectData['Project Number'],
43
+ projectData.startDate || projectData['Start Date'],
44
+ projectData.endDate || projectData['End Date'],
45
+ projectData.city || projectData['City'],
46
+ projectData.state || projectData['State'],
47
+ projectData.zipCode || projectData['Zip Code'] || '11111',
48
+ projectData.companyNameForProject || projectData['Company Name (for external communications)']
49
+ );
50
+
51
+ return updateProjectModel;
52
+ };
53
+
54
+ // combine the config handling in single func
55
+
56
+ module.exports = {
57
+ getOrCreateProject,
58
+ getDefaultProjectId,
59
+ getCreateProjectModel,
60
+ getUpdateProjectModel
61
+ };
@@ -0,0 +1,3 @@
1
+ const services = require('./api/record.notes.service');
2
+
3
+ module.exports = { services };
@@ -1,4 +1,4 @@
1
- const reportService = require('./api/reports.setup');
1
+ const reportService = require('./api/reports.service');
2
2
  const reportModels = require('./models/report.model');
3
3
 
4
4
  const services = {
@@ -1,5 +1,5 @@
1
1
  const createModel = require('./models/create.requirement.model');
2
- const services = require('./api/requirements.setup');
2
+ const services = require('./api/requirements.service');
3
3
 
4
4
  const models = { create: createModel };
5
5
 
@@ -1,3 +1,3 @@
1
- const services = require('./api/tabs.setup');
1
+ const services = require('./api/tabs.service');
2
2
 
3
3
  module.exports = { services };
@@ -3,6 +3,6 @@ const coreModels = { EditUserModel };
3
3
 
4
4
  const models = { core: coreModels };
5
5
 
6
- const services = require('./api/users.setup');
6
+ const services = require('./api/users.service');
7
7
 
8
8
  module.exports = { services, models };
@@ -0,0 +1,3 @@
1
+ const services = require('./api/vendor.profile.service');
2
+
3
+ module.exports = { services };
@@ -1,4 +1,4 @@
1
- const services = require('./requirements.setup');
1
+ const services = require('./requirements.service');
2
2
 
3
3
  const CopyRequirementModel = require('./models/copy.requirement.model');
4
4
  const models = { CopyRequirementModel };
@@ -0,0 +1,42 @@
1
+ const { expect } = require('chai');;
2
+
3
+ const { validateDateString } = require('../src/common/validations/typeValidations');
4
+ const VALID_DATE_STRINGS = Object.freeze([
5
+ '2022-08-03T11:47:07.499Z',
6
+ '2022-08-03T14:16:27.000+0000'
7
+
8
+ ]);
9
+ const INVALID_DATE_STRINGS = Object.freeze([
10
+ '2022-08-03T11:47:07.',
11
+ '2022-08-03T11:47:07.499Z1',
12
+ '2022-08-03T11:47:07.Z',
13
+ '2022-08-03T11:47:07.499Za',
14
+ '2022-0803T11:47:07.499Z',
15
+ '2022-08-03T100:47:07.499Z',
16
+ '2022-08-03T11:4:07.499Z',
17
+ '2022-08-03T11:47:7z.499Z',
18
+ '2022-08-03T11:47:07.a499Z',
19
+ '2022-0803T14:16:27.000+0000',
20
+ '2022-08-03T14:16:27.000+000a',
21
+ '2022-08-03T14:16:27.000+0000c',
22
+ '2022-08-0314:16:27.000+0000',
23
+ '2022-08-03x14:16:27.000+0000',
24
+ '2022-08-03a14:16:27.000+0000',
25
+ '2022-08-03T14:16:2.000+0000',
26
+ 'asd1q2123'
27
+
28
+ ]);
29
+
30
+ describe('Validation | Test Validation functions', function() {
31
+ it('Should validate date strings', () => {
32
+ for (const dateString of VALID_DATE_STRINGS) {
33
+ expect(() => validateDateString(dateString), `Expect string: '${dateString}' to pass date validation.`).to.not.throw(TypeError);
34
+ }
35
+ });
36
+
37
+ it('Should throw error for invalid date strings', () => {
38
+ for (const dateString of INVALID_DATE_STRINGS) {
39
+ expect(() => validateDateString(dateString), `Expect string: '${dateString}' to fail date validation.`).to.throw(TypeError);
40
+ }
41
+ });
42
+ });