@itentialopensource/adapter-microsoft_office365 0.1.1 → 0.2.0

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 (56) hide show
  1. package/AUTH.md +41 -0
  2. package/BROKER.md +199 -0
  3. package/CALLS.md +222 -0
  4. package/CHANGELOG.md +8 -1
  5. package/CODE_OF_CONDUCT.md +12 -17
  6. package/CONTRIBUTING.md +3 -148
  7. package/ENHANCE.md +69 -0
  8. package/PROPERTIES.md +641 -0
  9. package/README.md +235 -576
  10. package/SUMMARY.md +9 -0
  11. package/SYSTEMINFO.md +20 -0
  12. package/TROUBLESHOOT.md +47 -0
  13. package/adapter.js +391 -263
  14. package/adapterBase.js +854 -408
  15. package/changelogs/changelog.md +9 -0
  16. package/entities/.generic/action.json +110 -5
  17. package/entities/.generic/schema.json +6 -1
  18. package/error.json +6 -0
  19. package/metadata.json +57 -0
  20. package/package.json +28 -22
  21. package/pronghorn.json +691 -88
  22. package/propertiesDecorators.json +14 -0
  23. package/propertiesSchema.json +829 -8
  24. package/refs?service=git-upload-pack +0 -0
  25. package/report/adapter-openapi.json +509 -0
  26. package/report/adapter-openapi.yaml +349 -0
  27. package/report/adapterInfo.json +10 -0
  28. package/report/updateReport1691511327831.json +120 -0
  29. package/report/updateReport1692202817366.json +120 -0
  30. package/report/updateReport1694463941759.json +120 -0
  31. package/report/updateReport1698421603077.json +120 -0
  32. package/sampleProperties.json +153 -3
  33. package/test/integration/adapterTestBasicGet.js +3 -5
  34. package/test/integration/adapterTestConnectivity.js +91 -42
  35. package/test/integration/adapterTestIntegration.js +166 -114
  36. package/test/unit/adapterBaseTestUnit.js +388 -308
  37. package/test/unit/adapterTestUnit.js +490 -252
  38. package/utils/adapterInfo.js +206 -0
  39. package/utils/addAuth.js +94 -0
  40. package/utils/artifactize.js +1 -1
  41. package/utils/basicGet.js +1 -14
  42. package/utils/checkMigrate.js +1 -1
  43. package/utils/entitiesToDB.js +179 -0
  44. package/utils/findPath.js +1 -1
  45. package/utils/methodDocumentor.js +273 -0
  46. package/utils/modify.js +14 -16
  47. package/utils/packModificationScript.js +1 -1
  48. package/utils/patches2bundledDeps.js +90 -0
  49. package/utils/pre-commit.sh +5 -0
  50. package/utils/removeHooks.js +20 -0
  51. package/utils/taskMover.js +309 -0
  52. package/utils/tbScript.js +129 -53
  53. package/utils/tbUtils.js +125 -25
  54. package/utils/testRunner.js +17 -17
  55. package/utils/troubleshootingAdapter.js +10 -31
  56. package/workflows/README.md +0 -3
@@ -4,36 +4,48 @@
4
4
  /* global describe it log pronghornProps */
5
5
  /* eslint global-require: warn */
6
6
  /* eslint no-unused-vars: warn */
7
+ /* eslint import/no-dynamic-require:warn */
7
8
 
8
9
  // include required items for testing & logging
9
10
  const assert = require('assert');
10
- const fs = require('fs-extra');
11
- const mocha = require('mocha');
12
11
  const path = require('path');
13
12
  const util = require('util');
14
- const winston = require('winston');
15
13
  const execute = require('child_process').execSync;
14
+ const fs = require('fs-extra');
15
+ const mocha = require('mocha');
16
+ const winston = require('winston');
16
17
  const { expect } = require('chai');
17
18
  const { use } = require('chai');
18
19
  const td = require('testdouble');
20
+ const Ajv = require('ajv');
19
21
 
22
+ const ajv = new Ajv({ strictSchema: false, allErrors: true, allowUnionTypes: true });
20
23
  const anything = td.matchers.anything();
21
-
22
- // stub and attemptTimeout are used throughout the code so set them here
23
24
  let logLevel = 'none';
24
- const stub = true;
25
25
  const isRapidFail = false;
26
- const attemptTimeout = 600000;
26
+
27
+ // read in the properties from the sampleProperties files
28
+ let adaptdir = __dirname;
29
+ if (adaptdir.endsWith('/test/integration')) {
30
+ adaptdir = adaptdir.substring(0, adaptdir.length - 17);
31
+ } else if (adaptdir.endsWith('/test/unit')) {
32
+ adaptdir = adaptdir.substring(0, adaptdir.length - 10);
33
+ }
34
+ const samProps = require(`${adaptdir}/sampleProperties.json`).properties;
27
35
 
28
36
  // these variables can be changed to run in integrated mode so easier to set them here
29
37
  // always check these in with bogus data!!!
30
- const host = 'replace.hostorip.here';
31
- const username = 'username';
32
- const password = 'password';
33
- const protocol = 'http';
34
- const port = 80;
35
- const sslenable = false;
36
- const sslinvalid = false;
38
+ samProps.stub = true;
39
+ samProps.host = 'replace.hostorip.here';
40
+ samProps.authentication.username = 'username';
41
+ samProps.authentication.password = 'password';
42
+ samProps.protocol = 'http';
43
+ samProps.port = 80;
44
+ samProps.ssl.enabled = false;
45
+ samProps.ssl.accept_invalid_cert = false;
46
+ samProps.request.attempt_timeout = 1200000;
47
+ const attemptTimeout = samProps.request.attempt_timeout;
48
+ const { stub } = samProps;
37
49
 
38
50
  // these are the adapter properties. You generally should not need to alter
39
51
  // any of these after they are initially set up
@@ -43,101 +55,9 @@ global.pronghornProps = {
43
55
  },
44
56
  adapterProps: {
45
57
  adapters: [{
46
- id: 'Test-MicrosoftOffice365',
58
+ id: 'Test-microsoft_office365',
47
59
  type: 'MicrosoftOffice365',
48
- properties: {
49
- host,
50
- port,
51
- base_path: '/v1.0',
52
- version: '',
53
- cache_location: 'none',
54
- encode_pathvars: true,
55
- save_metric: false,
56
- stub,
57
- protocol,
58
- authentication: {
59
- auth_method: 'no_authentication',
60
- username,
61
- password,
62
- token: '',
63
- invalid_token_error: 401,
64
- token_timeout: -1,
65
- token_cache: 'local',
66
- auth_field: 'header.headers.Authorization',
67
- auth_field_format: 'Basic {b64}{username}:{password}{/b64}',
68
- auth_logging: false
69
- },
70
- healthcheck: {
71
- type: 'none',
72
- frequency: 60000,
73
- query_object: {}
74
- },
75
- throttle: {
76
- throttle_enabled: false,
77
- number_pronghorns: 1,
78
- sync_async: 'sync',
79
- max_in_queue: 1000,
80
- concurrent_max: 1,
81
- expire_timeout: 0,
82
- avg_runtime: 200,
83
- priorities: [
84
- {
85
- value: 0,
86
- percent: 100
87
- }
88
- ]
89
- },
90
- request: {
91
- number_redirects: 0,
92
- number_retries: 3,
93
- limit_retry_error: [0],
94
- failover_codes: [],
95
- attempt_timeout: attemptTimeout,
96
- global_request: {
97
- payload: {},
98
- uriOptions: {},
99
- addlHeaders: {},
100
- authData: {}
101
- },
102
- healthcheck_on_timeout: true,
103
- return_raw: true,
104
- archiving: false,
105
- return_request: false
106
- },
107
- proxy: {
108
- enabled: false,
109
- host: '',
110
- port: 1,
111
- protocol: 'http',
112
- username: '',
113
- password: ''
114
- },
115
- ssl: {
116
- ecdhCurve: '',
117
- enabled: sslenable,
118
- accept_invalid_cert: sslinvalid,
119
- ca_file: '',
120
- key_file: '',
121
- cert_file: '',
122
- secure_protocol: '',
123
- ciphers: ''
124
- },
125
- mongo: {
126
- host: '',
127
- port: 0,
128
- database: '',
129
- username: '',
130
- password: '',
131
- replSet: '',
132
- db_ssl: {
133
- enabled: false,
134
- accept_invalid_cert: false,
135
- ca_file: '',
136
- key_file: '',
137
- cert_file: ''
138
- }
139
- }
140
- }
60
+ properties: samProps
141
61
  }]
142
62
  }
143
63
  };
@@ -268,10 +188,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
268
188
  });
269
189
 
270
190
  let wffunctions = [];
271
- describe('#getWorkflowFunctions', () => {
191
+ describe('#iapGetAdapterWorkflowFunctions', () => {
272
192
  it('should retrieve workflow functions', (done) => {
273
193
  try {
274
- wffunctions = a.getWorkflowFunctions([]);
194
+ wffunctions = a.iapGetAdapterWorkflowFunctions([]);
275
195
 
276
196
  try {
277
197
  assert.notEqual(0, wffunctions.length);
@@ -302,19 +222,24 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
302
222
  it('package.json should be validated', (done) => {
303
223
  try {
304
224
  const packageDotJson = require('../../package.json');
305
- const { PJV } = require('package-json-validator');
306
- const options = {
307
- warnings: true, // show warnings
308
- recommendations: true // show recommendations
225
+ // Define the JSON schema for package.json
226
+ const packageJsonSchema = {
227
+ type: 'object',
228
+ properties: {
229
+ name: { type: 'string' },
230
+ version: { type: 'string' }
231
+ // May need to add more properties as needed
232
+ },
233
+ required: ['name', 'version']
309
234
  };
310
- const results = PJV.validate(JSON.stringify(packageDotJson), 'npm', options);
235
+ const validate = ajv.compile(packageJsonSchema);
236
+ const isValid = validate(packageDotJson);
311
237
 
312
- if (results.valid === false) {
313
- log.error('The package.json contains the following errors: ');
314
- log.error(util.inspect(results));
315
- assert.equal(true, results.valid);
238
+ if (isValid === false) {
239
+ log.error('The package.json contains errors');
240
+ assert.equal(true, isValid);
316
241
  } else {
317
- assert.equal(true, results.valid);
242
+ assert.equal(true, isValid);
318
243
  }
319
244
 
320
245
  done();
@@ -361,7 +286,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
361
286
  assert.equal('mocha test/integration/adapterTestIntegration.js --LOG=error', packageDotJson.scripts['test:integration']);
362
287
  assert.equal('nyc --reporter html --reporter text mocha --reporter dot test/*', packageDotJson.scripts['test:cover']);
363
288
  assert.equal('npm run test:baseunit && npm run test:unit && npm run test:integration', packageDotJson.scripts.test);
364
- assert.equal('npm publish --registry=http://registry.npmjs.org --access=public', packageDotJson.scripts.deploy);
289
+ assert.equal('npm publish --registry=https://registry.npmjs.org --access=public', packageDotJson.scripts.deploy);
365
290
  assert.equal('npm run deploy', packageDotJson.scripts.build);
366
291
  done();
367
292
  } catch (error) {
@@ -390,17 +315,17 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
390
315
  assert.notEqual(undefined, packageDotJson.dependencies);
391
316
  assert.notEqual(null, packageDotJson.dependencies);
392
317
  assert.notEqual('', packageDotJson.dependencies);
393
- assert.equal('^6.12.0', packageDotJson.dependencies.ajv);
394
- assert.equal('^0.21.0', packageDotJson.dependencies.axios);
395
- assert.equal('^2.20.0', packageDotJson.dependencies.commander);
396
- assert.equal('^8.1.0', packageDotJson.dependencies['fs-extra']);
397
- assert.equal('^9.0.1', packageDotJson.dependencies.mocha);
318
+ assert.equal('^8.12.0', packageDotJson.dependencies.ajv);
319
+ assert.equal('^1.4.0', packageDotJson.dependencies.axios);
320
+ assert.equal('^11.0.0', packageDotJson.dependencies.commander);
321
+ assert.equal('^11.1.1', packageDotJson.dependencies['fs-extra']);
322
+ assert.equal('^10.2.0', packageDotJson.dependencies.mocha);
398
323
  assert.equal('^2.0.1', packageDotJson.dependencies['mocha-param']);
399
- assert.equal('^0.5.3', packageDotJson.dependencies['network-diagnostics']);
400
324
  assert.equal('^15.1.0', packageDotJson.dependencies.nyc);
325
+ assert.equal('^0.4.4', packageDotJson.dependencies.ping);
401
326
  assert.equal('^1.4.10', packageDotJson.dependencies['readline-sync']);
402
- assert.equal('^7.3.2', packageDotJson.dependencies.semver);
403
- assert.equal('^3.3.3', packageDotJson.dependencies.winston);
327
+ assert.equal('^7.5.3', packageDotJson.dependencies.semver);
328
+ assert.equal('^3.9.0', packageDotJson.dependencies.winston);
404
329
  done();
405
330
  } catch (error) {
406
331
  log.error(`Test Failure: ${error}`);
@@ -413,13 +338,12 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
413
338
  assert.notEqual(undefined, packageDotJson.devDependencies);
414
339
  assert.notEqual(null, packageDotJson.devDependencies);
415
340
  assert.notEqual('', packageDotJson.devDependencies);
416
- assert.equal('^4.3.4', packageDotJson.devDependencies.chai);
417
- assert.equal('^7.29.0', packageDotJson.devDependencies.eslint);
418
- assert.equal('^14.2.1', packageDotJson.devDependencies['eslint-config-airbnb-base']);
419
- assert.equal('^2.23.4', packageDotJson.devDependencies['eslint-plugin-import']);
420
- assert.equal('^3.0.0', packageDotJson.devDependencies['eslint-plugin-json']);
421
- assert.equal('^0.6.3', packageDotJson.devDependencies['package-json-validator']);
422
- assert.equal('^3.16.1', packageDotJson.devDependencies.testdouble);
341
+ assert.equal('^4.3.7', packageDotJson.devDependencies.chai);
342
+ assert.equal('^8.44.0', packageDotJson.devDependencies.eslint);
343
+ assert.equal('^15.0.0', packageDotJson.devDependencies['eslint-config-airbnb-base']);
344
+ assert.equal('^2.27.5', packageDotJson.devDependencies['eslint-plugin-import']);
345
+ assert.equal('^3.1.0', packageDotJson.devDependencies['eslint-plugin-json']);
346
+ assert.equal('^3.18.0', packageDotJson.devDependencies.testdouble);
423
347
  done();
424
348
  } catch (error) {
425
349
  log.error(`Test Failure: ${error}`);
@@ -462,16 +386,31 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
462
386
  assert.notEqual('', pronghornDotJson.methods);
463
387
  assert.equal(true, Array.isArray(pronghornDotJson.methods));
464
388
  assert.notEqual(0, pronghornDotJson.methods.length);
465
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'updateAdapterConfiguration'));
466
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'findPath'));
467
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'troubleshoot'));
468
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runHealthcheck'));
469
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runConnectivity'));
470
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'runBasicGet'));
471
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'suspend'));
472
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'unsuspend'));
473
- assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getQueue'));
389
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapUpdateAdapterConfiguration'));
390
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapSuspendAdapter'));
391
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapUnsuspendAdapter'));
392
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetAdapterQueue'));
393
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapFindAdapterPath'));
394
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapTroubleshootAdapter'));
395
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterHealthcheck'));
396
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterConnectivity'));
397
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterBasicGet'));
398
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapMoveAdapterEntitiesToDB'));
399
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapDeactivateTasks'));
400
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapActivateTasks'));
401
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapPopulateEntityCache'));
402
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRetrieveEntitiesCache'));
403
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getDevice'));
404
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getDevicesFiltered'));
405
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'isAlive'));
406
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'getConfig'));
407
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetDeviceCount'));
408
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapExpandedGenericAdapterRequest'));
474
409
  assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequest'));
410
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'genericAdapterRequestNoBasePath'));
411
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterLint'));
412
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapRunAdapterTests'));
413
+ assert.notEqual(undefined, pronghornDotJson.methods.find((e) => e.name === 'iapGetAdapterInventory'));
475
414
  done();
476
415
  } catch (error) {
477
416
  log.error(`Test Failure: ${error}`);
@@ -592,6 +531,39 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
592
531
  done(error);
593
532
  }
594
533
  });
534
+ it('pronghorn.json verify input/output schema objects', (done) => {
535
+ const verifySchema = (methodName, schema) => {
536
+ try {
537
+ ajv.compile(schema);
538
+ } catch (error) {
539
+ const errorMessage = `Invalid schema found in '${methodName}' method.
540
+ Schema => ${JSON.stringify(schema)}.
541
+ Details => ${error.message}`;
542
+ throw new Error(errorMessage);
543
+ }
544
+ };
545
+
546
+ try {
547
+ const pronghornDotJson = require('../../pronghorn.json');
548
+ const { methods } = pronghornDotJson;
549
+ for (let i = 0; i < methods.length; i += 1) {
550
+ for (let j = 0; j < methods[i].input.length; j += 1) {
551
+ const inputSchema = methods[i].input[j].schema;
552
+ if (inputSchema) {
553
+ verifySchema(methods[i].name, inputSchema);
554
+ }
555
+ }
556
+ const outputSchema = methods[i].output.schema;
557
+ if (outputSchema) {
558
+ verifySchema(methods[i].name, outputSchema);
559
+ }
560
+ }
561
+ done();
562
+ } catch (error) {
563
+ log.error(`Adapter Exception: ${error}`);
564
+ done(error);
565
+ }
566
+ });
595
567
  });
596
568
 
597
569
  describe('propertiesSchema.json', () => {
@@ -627,6 +599,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
627
599
  assert.equal('string', propertiesDotJson.properties.host.type);
628
600
  assert.equal('integer', propertiesDotJson.properties.port.type);
629
601
  assert.equal('boolean', propertiesDotJson.properties.stub.type);
602
+ assert.equal('string', propertiesDotJson.properties.protocol.type);
630
603
  assert.notEqual(undefined, propertiesDotJson.definitions.authentication);
631
604
  assert.notEqual(null, propertiesDotJson.definitions.authentication);
632
605
  assert.notEqual('', propertiesDotJson.definitions.authentication);
@@ -643,6 +616,8 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
643
616
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_id.type);
644
617
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.client_secret.type);
645
618
  assert.equal('string', propertiesDotJson.definitions.authentication.properties.grant_type.type);
619
+ assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
620
+ assert.notEqual(null, propertiesDotJson.definitions.ssl);
646
621
  assert.notEqual('', propertiesDotJson.definitions.ssl);
647
622
  assert.equal('string', propertiesDotJson.definitions.ssl.properties.ecdhCurve.type);
648
623
  assert.equal('boolean', propertiesDotJson.definitions.ssl.properties.enabled.type);
@@ -656,8 +631,8 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
656
631
  assert.equal('string', propertiesDotJson.properties.version.type);
657
632
  assert.equal('string', propertiesDotJson.properties.cache_location.type);
658
633
  assert.equal('boolean', propertiesDotJson.properties.encode_pathvars.type);
634
+ assert.equal('boolean', propertiesDotJson.properties.encode_queryvars.type);
659
635
  assert.equal(true, Array.isArray(propertiesDotJson.properties.save_metric.type));
660
- assert.equal('string', propertiesDotJson.properties.protocol.type);
661
636
  assert.notEqual(undefined, propertiesDotJson.definitions);
662
637
  assert.notEqual(null, propertiesDotJson.definitions);
663
638
  assert.notEqual('', propertiesDotJson.definitions);
@@ -704,8 +679,6 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
704
679
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.protocol.type);
705
680
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.username.type);
706
681
  assert.equal('string', propertiesDotJson.definitions.proxy.properties.password.type);
707
- assert.notEqual(undefined, propertiesDotJson.definitions.ssl);
708
- assert.notEqual(null, propertiesDotJson.definitions.ssl);
709
682
  assert.notEqual(undefined, propertiesDotJson.definitions.mongo);
710
683
  assert.notEqual(null, propertiesDotJson.definitions.mongo);
711
684
  assert.notEqual('', propertiesDotJson.definitions.mongo);
@@ -721,6 +694,12 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
721
694
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.ca_file.type);
722
695
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.key_file.type);
723
696
  assert.equal('string', propertiesDotJson.definitions.mongo.properties.db_ssl.properties.cert_file.type);
697
+ assert.notEqual('', propertiesDotJson.definitions.devicebroker);
698
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevice.type);
699
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getDevicesFiltered.type);
700
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.isAlive.type);
701
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getConfig.type);
702
+ assert.equal('array', propertiesDotJson.definitions.devicebroker.properties.getCount.type);
724
703
  done();
725
704
  } catch (error) {
726
705
  log.error(`Test Failure: ${error}`);
@@ -810,6 +789,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
810
789
  assert.notEqual(undefined, sampleDotJson.properties.host);
811
790
  assert.notEqual(undefined, sampleDotJson.properties.port);
812
791
  assert.notEqual(undefined, sampleDotJson.properties.stub);
792
+ assert.notEqual(undefined, sampleDotJson.properties.protocol);
813
793
  assert.notEqual(undefined, sampleDotJson.properties.authentication);
814
794
  assert.notEqual(null, sampleDotJson.properties.authentication);
815
795
  assert.notEqual('', sampleDotJson.properties.authentication);
@@ -837,17 +817,12 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
837
817
  assert.notEqual(undefined, sampleDotJson.properties.ssl.cert_file);
838
818
  assert.notEqual(undefined, sampleDotJson.properties.ssl.secure_protocol);
839
819
  assert.notEqual(undefined, sampleDotJson.properties.ssl.ciphers);
840
-
841
820
  assert.notEqual(undefined, sampleDotJson.properties.base_path);
842
821
  assert.notEqual(undefined, sampleDotJson.properties.version);
843
822
  assert.notEqual(undefined, sampleDotJson.properties.cache_location);
844
823
  assert.notEqual(undefined, sampleDotJson.properties.encode_pathvars);
824
+ assert.notEqual(undefined, sampleDotJson.properties.encode_queryvars);
845
825
  assert.notEqual(undefined, sampleDotJson.properties.save_metric);
846
- assert.notEqual(undefined, sampleDotJson.properties.protocol);
847
- assert.notEqual(undefined, sampleDotJson.properties.stub);
848
- assert.notEqual(undefined, sampleDotJson.properties.stub);
849
- assert.notEqual(undefined, sampleDotJson.properties.stub);
850
- assert.notEqual(undefined, sampleDotJson.properties.stub);
851
826
  assert.notEqual(undefined, sampleDotJson.properties.healthcheck);
852
827
  assert.notEqual(null, sampleDotJson.properties.healthcheck);
853
828
  assert.notEqual('', sampleDotJson.properties.healthcheck);
@@ -906,6 +881,14 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
906
881
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.ca_file);
907
882
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.key_file);
908
883
  assert.notEqual(undefined, sampleDotJson.properties.mongo.db_ssl.cert_file);
884
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker);
885
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevice);
886
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getDevicesFiltered);
887
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.isAlive);
888
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getConfig);
889
+ assert.notEqual(undefined, sampleDotJson.properties.devicebroker.getCount);
890
+ assert.notEqual(undefined, sampleDotJson.properties.cache);
891
+ assert.notEqual(undefined, sampleDotJson.properties.cache.entities);
909
892
  done();
910
893
  } catch (error) {
911
894
  log.error(`Test Failure: ${error}`);
@@ -999,10 +982,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
999
982
  });
1000
983
  });
1001
984
 
1002
- describe('#updateAdapterConfiguration', () => {
1003
- it('should have a updateAdapterConfiguration function', (done) => {
985
+ describe('#iapUpdateAdapterConfiguration', () => {
986
+ it('should have a iapUpdateAdapterConfiguration function', (done) => {
1004
987
  try {
1005
- assert.equal(true, typeof a.updateAdapterConfiguration === 'function');
988
+ assert.equal(true, typeof a.iapUpdateAdapterConfiguration === 'function');
1006
989
  done();
1007
990
  } catch (error) {
1008
991
  log.error(`Test Failure: ${error}`);
@@ -1011,44 +994,34 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1011
994
  });
1012
995
  });
1013
996
 
1014
- describe('#findPath', () => {
1015
- it('should have a findPath function', (done) => {
997
+ describe('#iapSuspendAdapter', () => {
998
+ it('should have a iapSuspendAdapter function', (done) => {
1016
999
  try {
1017
- assert.equal(true, typeof a.findPath === 'function');
1000
+ assert.equal(true, typeof a.iapSuspendAdapter === 'function');
1018
1001
  done();
1019
1002
  } catch (error) {
1020
1003
  log.error(`Test Failure: ${error}`);
1021
1004
  done(error);
1022
1005
  }
1023
1006
  });
1024
- it('findPath should find atleast one path that matches', (done) => {
1007
+ });
1008
+
1009
+ describe('#iapUnsuspendAdapter', () => {
1010
+ it('should have a iapUnsuspendAdapter function', (done) => {
1025
1011
  try {
1026
- a.findPath('{base_path}/{version}', (data, error) => {
1027
- try {
1028
- assert.equal(undefined, error);
1029
- assert.notEqual(undefined, data);
1030
- assert.notEqual(null, data);
1031
- assert.equal(true, data.found);
1032
- assert.notEqual(undefined, data.foundIn);
1033
- assert.notEqual(null, data.foundIn);
1034
- assert.notEqual(0, data.foundIn.length);
1035
- done();
1036
- } catch (err) {
1037
- log.error(`Test Failure: ${err}`);
1038
- done(err);
1039
- }
1040
- });
1012
+ assert.equal(true, typeof a.iapUnsuspendAdapter === 'function');
1013
+ done();
1041
1014
  } catch (error) {
1042
- log.error(`Adapter Exception: ${error}`);
1015
+ log.error(`Test Failure: ${error}`);
1043
1016
  done(error);
1044
1017
  }
1045
- }).timeout(attemptTimeout);
1018
+ });
1046
1019
  });
1047
1020
 
1048
- describe('#suspend', () => {
1049
- it('should have a suspend function', (done) => {
1021
+ describe('#iapGetAdapterQueue', () => {
1022
+ it('should have a iapGetAdapterQueue function', (done) => {
1050
1023
  try {
1051
- assert.equal(true, typeof a.suspend === 'function');
1024
+ assert.equal(true, typeof a.iapGetAdapterQueue === 'function');
1052
1025
  done();
1053
1026
  } catch (error) {
1054
1027
  log.error(`Test Failure: ${error}`);
@@ -1057,22 +1030,44 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1057
1030
  });
1058
1031
  });
1059
1032
 
1060
- describe('#unsuspend', () => {
1061
- it('should have a unsuspend function', (done) => {
1033
+ describe('#iapFindAdapterPath', () => {
1034
+ it('should have a iapFindAdapterPath function', (done) => {
1062
1035
  try {
1063
- assert.equal(true, typeof a.unsuspend === 'function');
1036
+ assert.equal(true, typeof a.iapFindAdapterPath === 'function');
1064
1037
  done();
1065
1038
  } catch (error) {
1066
1039
  log.error(`Test Failure: ${error}`);
1067
1040
  done(error);
1068
1041
  }
1069
1042
  });
1043
+ it('iapFindAdapterPath should find atleast one path that matches', (done) => {
1044
+ try {
1045
+ a.iapFindAdapterPath('{base_path}/{version}', (data, error) => {
1046
+ try {
1047
+ assert.equal(undefined, error);
1048
+ assert.notEqual(undefined, data);
1049
+ assert.notEqual(null, data);
1050
+ assert.equal(true, data.found);
1051
+ assert.notEqual(undefined, data.foundIn);
1052
+ assert.notEqual(null, data.foundIn);
1053
+ assert.notEqual(0, data.foundIn.length);
1054
+ done();
1055
+ } catch (err) {
1056
+ log.error(`Test Failure: ${err}`);
1057
+ done(err);
1058
+ }
1059
+ });
1060
+ } catch (error) {
1061
+ log.error(`Adapter Exception: ${error}`);
1062
+ done(error);
1063
+ }
1064
+ }).timeout(attemptTimeout);
1070
1065
  });
1071
1066
 
1072
- describe('#getQueue', () => {
1073
- it('should have a getQueue function', (done) => {
1067
+ describe('#iapTroubleshootAdapter', () => {
1068
+ it('should have a iapTroubleshootAdapter function', (done) => {
1074
1069
  try {
1075
- assert.equal(true, typeof a.getQueue === 'function');
1070
+ assert.equal(true, typeof a.iapTroubleshootAdapter === 'function');
1076
1071
  done();
1077
1072
  } catch (error) {
1078
1073
  log.error(`Test Failure: ${error}`);
@@ -1081,10 +1076,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1081
1076
  });
1082
1077
  });
1083
1078
 
1084
- describe('#troubleshoot', () => {
1085
- it('should have a troubleshoot function', (done) => {
1079
+ describe('#iapRunAdapterHealthcheck', () => {
1080
+ it('should have a iapRunAdapterHealthcheck function', (done) => {
1086
1081
  try {
1087
- assert.equal(true, typeof a.troubleshoot === 'function');
1082
+ assert.equal(true, typeof a.iapRunAdapterHealthcheck === 'function');
1088
1083
  done();
1089
1084
  } catch (error) {
1090
1085
  log.error(`Test Failure: ${error}`);
@@ -1093,10 +1088,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1093
1088
  });
1094
1089
  });
1095
1090
 
1096
- describe('#runHealthcheck', () => {
1097
- it('should have a runHealthcheck function', (done) => {
1091
+ describe('#iapRunAdapterConnectivity', () => {
1092
+ it('should have a iapRunAdapterConnectivity function', (done) => {
1098
1093
  try {
1099
- assert.equal(true, typeof a.runHealthcheck === 'function');
1094
+ assert.equal(true, typeof a.iapRunAdapterConnectivity === 'function');
1100
1095
  done();
1101
1096
  } catch (error) {
1102
1097
  log.error(`Test Failure: ${error}`);
@@ -1105,10 +1100,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1105
1100
  });
1106
1101
  });
1107
1102
 
1108
- describe('#runConnectivity', () => {
1109
- it('should have a runConnectivity function', (done) => {
1103
+ describe('#iapRunAdapterBasicGet', () => {
1104
+ it('should have a iapRunAdapterBasicGet function', (done) => {
1110
1105
  try {
1111
- assert.equal(true, typeof a.runConnectivity === 'function');
1106
+ assert.equal(true, typeof a.iapRunAdapterBasicGet === 'function');
1112
1107
  done();
1113
1108
  } catch (error) {
1114
1109
  log.error(`Test Failure: ${error}`);
@@ -1117,10 +1112,10 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1117
1112
  });
1118
1113
  });
1119
1114
 
1120
- describe('#runBasicGet', () => {
1121
- it('should have a runBasicGet function', (done) => {
1115
+ describe('#iapMoveAdapterEntitiesToDB', () => {
1116
+ it('should have a iapMoveAdapterEntitiesToDB function', (done) => {
1122
1117
  try {
1123
- assert.equal(true, typeof a.runBasicGet === 'function');
1118
+ assert.equal(true, typeof a.iapMoveAdapterEntitiesToDB === 'function');
1124
1119
  done();
1125
1120
  } catch (error) {
1126
1121
  log.error(`Test Failure: ${error}`);
@@ -1214,50 +1209,293 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1214
1209
  }).timeout(attemptTimeout);
1215
1210
  });
1216
1211
 
1217
- // describe('#hasEntity', () => {
1218
- // it('should have a hasEntity function', (done) => {
1219
- // try {
1220
- // assert.equal(true, typeof a.hasEntity === 'function');
1221
- // done();
1222
- // } catch (error) {
1223
- // log.error(`Test Failure: ${error}`);
1224
- // done(error);
1225
- // }
1226
- // });
1227
- // it('should find entity', (done) => {
1228
- // try {
1229
- // a.hasEntity('template_entity', // 'a9e9c33dc61122760072455df62663d2', (data) => {
1230
- // try {
1231
- // assert.equal(true, data[0]);
1232
- // done();
1233
- // } catch (err) {
1234
- // log.error(`Test Failure: ${err}`);
1235
- // done(err);
1236
- // }
1237
- // });
1238
- // } catch (error) {
1239
- // log.error(`Adapter Exception: ${error}`);
1240
- // done(error);
1241
- // }
1242
- // }).timeout(attemptTimeout);
1243
- // it('should not find entity', (done) => {
1244
- // try {
1245
- // a.hasEntity('template_entity', 'blah', (data) => {
1246
- // try {
1247
- // assert.equal(false, data[0]);
1248
- // done();
1249
- // } catch (err) {
1250
- // log.error(`Test Failure: ${err}`);
1251
- // done(err);
1252
- // }
1253
- // });
1254
- // } catch (error) {
1255
- // log.error(`Adapter Exception: ${error}`);
1256
- // done(error);
1257
- // }
1258
- // }).timeout(attemptTimeout);
1259
- // });
1212
+ describe('#iapDeactivateTasks', () => {
1213
+ it('should have a iapDeactivateTasks function', (done) => {
1214
+ try {
1215
+ assert.equal(true, typeof a.iapDeactivateTasks === 'function');
1216
+ done();
1217
+ } catch (error) {
1218
+ log.error(`Test Failure: ${error}`);
1219
+ done(error);
1220
+ }
1221
+ });
1222
+ });
1223
+
1224
+ describe('#iapActivateTasks', () => {
1225
+ it('should have a iapActivateTasks function', (done) => {
1226
+ try {
1227
+ assert.equal(true, typeof a.iapActivateTasks === 'function');
1228
+ done();
1229
+ } catch (error) {
1230
+ log.error(`Test Failure: ${error}`);
1231
+ done(error);
1232
+ }
1233
+ });
1234
+ });
1235
+
1236
+ describe('#iapPopulateEntityCache', () => {
1237
+ it('should have a iapPopulateEntityCache function', (done) => {
1238
+ try {
1239
+ assert.equal(true, typeof a.iapPopulateEntityCache === 'function');
1240
+ done();
1241
+ } catch (error) {
1242
+ log.error(`Test Failure: ${error}`);
1243
+ done(error);
1244
+ }
1245
+ });
1246
+ });
1247
+
1248
+ describe('#iapRetrieveEntitiesCache', () => {
1249
+ it('should have a iapRetrieveEntitiesCache function', (done) => {
1250
+ try {
1251
+ assert.equal(true, typeof a.iapRetrieveEntitiesCache === 'function');
1252
+ done();
1253
+ } catch (error) {
1254
+ log.error(`Test Failure: ${error}`);
1255
+ done(error);
1256
+ }
1257
+ });
1258
+ });
1259
+
1260
+ describe('#hasEntities', () => {
1261
+ it('should have a hasEntities function', (done) => {
1262
+ try {
1263
+ assert.equal(true, typeof a.hasEntities === 'function');
1264
+ done();
1265
+ } catch (error) {
1266
+ log.error(`Test Failure: ${error}`);
1267
+ done(error);
1268
+ }
1269
+ });
1270
+ });
1271
+
1272
+ describe('#getDevice', () => {
1273
+ it('should have a getDevice function', (done) => {
1274
+ try {
1275
+ assert.equal(true, typeof a.getDevice === 'function');
1276
+ done();
1277
+ } catch (error) {
1278
+ log.error(`Test Failure: ${error}`);
1279
+ done(error);
1280
+ }
1281
+ });
1282
+ });
1283
+
1284
+ describe('#getDevicesFiltered', () => {
1285
+ it('should have a getDevicesFiltered function', (done) => {
1286
+ try {
1287
+ assert.equal(true, typeof a.getDevicesFiltered === 'function');
1288
+ done();
1289
+ } catch (error) {
1290
+ log.error(`Test Failure: ${error}`);
1291
+ done(error);
1292
+ }
1293
+ });
1294
+ });
1295
+
1296
+ describe('#isAlive', () => {
1297
+ it('should have a isAlive function', (done) => {
1298
+ try {
1299
+ assert.equal(true, typeof a.isAlive === 'function');
1300
+ done();
1301
+ } catch (error) {
1302
+ log.error(`Test Failure: ${error}`);
1303
+ done(error);
1304
+ }
1305
+ });
1306
+ });
1307
+
1308
+ describe('#getConfig', () => {
1309
+ it('should have a getConfig function', (done) => {
1310
+ try {
1311
+ assert.equal(true, typeof a.getConfig === 'function');
1312
+ done();
1313
+ } catch (error) {
1314
+ log.error(`Test Failure: ${error}`);
1315
+ done(error);
1316
+ }
1317
+ });
1318
+ });
1319
+
1320
+ describe('#iapGetDeviceCount', () => {
1321
+ it('should have a iapGetDeviceCount function', (done) => {
1322
+ try {
1323
+ assert.equal(true, typeof a.iapGetDeviceCount === 'function');
1324
+ done();
1325
+ } catch (error) {
1326
+ log.error(`Test Failure: ${error}`);
1327
+ done(error);
1328
+ }
1329
+ });
1330
+ });
1331
+
1332
+ describe('#iapExpandedGenericAdapterRequest', () => {
1333
+ it('should have a iapExpandedGenericAdapterRequest function', (done) => {
1334
+ try {
1335
+ assert.equal(true, typeof a.iapExpandedGenericAdapterRequest === 'function');
1336
+ done();
1337
+ } catch (error) {
1338
+ log.error(`Test Failure: ${error}`);
1339
+ done(error);
1340
+ }
1341
+ });
1342
+ });
1343
+
1344
+ describe('#genericAdapterRequest', () => {
1345
+ it('should have a genericAdapterRequest function', (done) => {
1346
+ try {
1347
+ assert.equal(true, typeof a.genericAdapterRequest === 'function');
1348
+ done();
1349
+ } catch (error) {
1350
+ log.error(`Test Failure: ${error}`);
1351
+ done(error);
1352
+ }
1353
+ });
1354
+ });
1355
+
1356
+ describe('#genericAdapterRequestNoBasePath', () => {
1357
+ it('should have a genericAdapterRequestNoBasePath function', (done) => {
1358
+ try {
1359
+ assert.equal(true, typeof a.genericAdapterRequestNoBasePath === 'function');
1360
+ done();
1361
+ } catch (error) {
1362
+ log.error(`Test Failure: ${error}`);
1363
+ done(error);
1364
+ }
1365
+ });
1366
+ });
1367
+
1368
+ describe('#iapRunAdapterLint', () => {
1369
+ it('should have a iapRunAdapterLint function', (done) => {
1370
+ try {
1371
+ assert.equal(true, typeof a.iapRunAdapterLint === 'function');
1372
+ done();
1373
+ } catch (error) {
1374
+ log.error(`Test Failure: ${error}`);
1375
+ done(error);
1376
+ }
1377
+ });
1378
+ it('retrieve the lint results', (done) => {
1379
+ try {
1380
+ a.iapRunAdapterLint((data, error) => {
1381
+ try {
1382
+ assert.equal(undefined, error);
1383
+ assert.notEqual(undefined, data);
1384
+ assert.notEqual(null, data);
1385
+ assert.notEqual(undefined, data.status);
1386
+ assert.notEqual(null, data.status);
1387
+ assert.equal('SUCCESS', data.status);
1388
+ done();
1389
+ } catch (err) {
1390
+ log.error(`Test Failure: ${err}`);
1391
+ done(err);
1392
+ }
1393
+ });
1394
+ } catch (error) {
1395
+ log.error(`Adapter Exception: ${error}`);
1396
+ done(error);
1397
+ }
1398
+ }).timeout(attemptTimeout);
1399
+ });
1400
+
1401
+ describe('#iapRunAdapterTests', () => {
1402
+ it('should have a iapRunAdapterTests function', (done) => {
1403
+ try {
1404
+ assert.equal(true, typeof a.iapRunAdapterTests === 'function');
1405
+ done();
1406
+ } catch (error) {
1407
+ log.error(`Test Failure: ${error}`);
1408
+ done(error);
1409
+ }
1410
+ });
1411
+ });
1260
1412
 
1413
+ describe('#iapGetAdapterInventory', () => {
1414
+ it('should have a iapGetAdapterInventory function', (done) => {
1415
+ try {
1416
+ assert.equal(true, typeof a.iapGetAdapterInventory === 'function');
1417
+ done();
1418
+ } catch (error) {
1419
+ log.error(`Test Failure: ${error}`);
1420
+ done(error);
1421
+ }
1422
+ });
1423
+ it('retrieve the inventory', (done) => {
1424
+ try {
1425
+ a.iapGetAdapterInventory((data, error) => {
1426
+ try {
1427
+ assert.equal(undefined, error);
1428
+ assert.notEqual(undefined, data);
1429
+ assert.notEqual(null, data);
1430
+ done();
1431
+ } catch (err) {
1432
+ log.error(`Test Failure: ${err}`);
1433
+ done(err);
1434
+ }
1435
+ });
1436
+ } catch (error) {
1437
+ log.error(`Adapter Exception: ${error}`);
1438
+ done(error);
1439
+ }
1440
+ }).timeout(attemptTimeout);
1441
+ });
1442
+ describe('metadata.json', () => {
1443
+ it('should have a metadata.json', (done) => {
1444
+ try {
1445
+ fs.exists('metadata.json', (val) => {
1446
+ assert.equal(true, val);
1447
+ done();
1448
+ });
1449
+ } catch (error) {
1450
+ log.error(`Test Failure: ${error}`);
1451
+ done(error);
1452
+ }
1453
+ });
1454
+ it('metadata.json is customized', (done) => {
1455
+ try {
1456
+ const metadataDotJson = require('../../metadata.json');
1457
+ assert.equal('adapter-microsoft_office365', metadataDotJson.name);
1458
+ assert.notEqual(undefined, metadataDotJson.webName);
1459
+ assert.notEqual(null, metadataDotJson.webName);
1460
+ assert.notEqual('', metadataDotJson.webName);
1461
+ assert.equal('Adapter', metadataDotJson.type);
1462
+ done();
1463
+ } catch (error) {
1464
+ log.error(`Test Failure: ${error}`);
1465
+ done(error);
1466
+ }
1467
+ });
1468
+ it('metadata.json contains accurate documentation', (done) => {
1469
+ try {
1470
+ const metadataDotJson = require('../../metadata.json');
1471
+ assert.notEqual(undefined, metadataDotJson.documentation);
1472
+ assert.equal('https://www.npmjs.com/package/@itentialopensource/adapter-microsoft_office365', metadataDotJson.documentation.npmLink);
1473
+ assert.equal('https://docs.itential.com/opensource/docs/troubleshooting-an-adapter', metadataDotJson.documentation.faqLink);
1474
+ assert.equal('https://gitlab.com/itentialopensource/adapters/contributing-guide', metadataDotJson.documentation.contributeLink);
1475
+ assert.equal('https://itential.atlassian.net/servicedesk/customer/portals', metadataDotJson.documentation.issueLink);
1476
+ done();
1477
+ } catch (error) {
1478
+ log.error(`Test Failure: ${error}`);
1479
+ done(error);
1480
+ }
1481
+ });
1482
+ it('metadata.json has related items', (done) => {
1483
+ try {
1484
+ const metadataDotJson = require('../../metadata.json');
1485
+ assert.notEqual(undefined, metadataDotJson.relatedItems);
1486
+ assert.notEqual(undefined, metadataDotJson.relatedItems.adapters);
1487
+ assert.notEqual(undefined, metadataDotJson.relatedItems.integrations);
1488
+ assert.notEqual(undefined, metadataDotJson.relatedItems.ecosystemApplications);
1489
+ assert.notEqual(undefined, metadataDotJson.relatedItems.workflowProjects);
1490
+ assert.notEqual(undefined, metadataDotJson.relatedItems.transformationProjects);
1491
+ assert.notEqual(undefined, metadataDotJson.relatedItems.exampleProjects);
1492
+ done();
1493
+ } catch (error) {
1494
+ log.error(`Test Failure: ${error}`);
1495
+ done(error);
1496
+ }
1497
+ });
1498
+ });
1261
1499
  /*
1262
1500
  -----------------------------------------------------------------------
1263
1501
  -----------------------------------------------------------------------
@@ -1294,7 +1532,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1294
1532
  a.postGroups(null, (data, error) => {
1295
1533
  try {
1296
1534
  const displayE = 'body is required';
1297
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-postGroups', displayE);
1535
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-postGroups', displayE);
1298
1536
  done();
1299
1537
  } catch (err) {
1300
1538
  log.error(`Test Failure: ${err}`);
@@ -1323,7 +1561,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1323
1561
  a.getGroupsGroupId(null, null, (data, error) => {
1324
1562
  try {
1325
1563
  const displayE = 'groupId is required';
1326
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-getGroupsGroupId', displayE);
1564
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-getGroupsGroupId', displayE);
1327
1565
  done();
1328
1566
  } catch (err) {
1329
1567
  log.error(`Test Failure: ${err}`);
@@ -1352,7 +1590,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1352
1590
  a.patchGroupsGroupId(null, null, (data, error) => {
1353
1591
  try {
1354
1592
  const displayE = 'groupId is required';
1355
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-patchGroupsGroupId', displayE);
1593
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-patchGroupsGroupId', displayE);
1356
1594
  done();
1357
1595
  } catch (err) {
1358
1596
  log.error(`Test Failure: ${err}`);
@@ -1369,7 +1607,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1369
1607
  a.patchGroupsGroupId('fakeparam', null, (data, error) => {
1370
1608
  try {
1371
1609
  const displayE = 'body is required';
1372
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-patchGroupsGroupId', displayE);
1610
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-patchGroupsGroupId', displayE);
1373
1611
  done();
1374
1612
  } catch (err) {
1375
1613
  log.error(`Test Failure: ${err}`);
@@ -1398,7 +1636,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1398
1636
  a.deleteGroupsGroupId(null, (data, error) => {
1399
1637
  try {
1400
1638
  const displayE = 'groupId is required';
1401
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-deleteGroupsGroupId', displayE);
1639
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-deleteGroupsGroupId', displayE);
1402
1640
  done();
1403
1641
  } catch (err) {
1404
1642
  log.error(`Test Failure: ${err}`);
@@ -1439,7 +1677,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1439
1677
  a.postUsers(null, (data, error) => {
1440
1678
  try {
1441
1679
  const displayE = 'body is required';
1442
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-postUsers', displayE);
1680
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-postUsers', displayE);
1443
1681
  done();
1444
1682
  } catch (err) {
1445
1683
  log.error(`Test Failure: ${err}`);
@@ -1468,7 +1706,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1468
1706
  a.getUsersUserId(null, null, (data, error) => {
1469
1707
  try {
1470
1708
  const displayE = 'userId is required';
1471
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-getUsersUserId', displayE);
1709
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-getUsersUserId', displayE);
1472
1710
  done();
1473
1711
  } catch (err) {
1474
1712
  log.error(`Test Failure: ${err}`);
@@ -1497,7 +1735,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1497
1735
  a.patchUsersUserId(null, null, (data, error) => {
1498
1736
  try {
1499
1737
  const displayE = 'userId is required';
1500
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-patchUsersUserId', displayE);
1738
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-patchUsersUserId', displayE);
1501
1739
  done();
1502
1740
  } catch (err) {
1503
1741
  log.error(`Test Failure: ${err}`);
@@ -1514,7 +1752,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1514
1752
  a.patchUsersUserId('fakeparam', null, (data, error) => {
1515
1753
  try {
1516
1754
  const displayE = 'body is required';
1517
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-patchUsersUserId', displayE);
1755
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-patchUsersUserId', displayE);
1518
1756
  done();
1519
1757
  } catch (err) {
1520
1758
  log.error(`Test Failure: ${err}`);
@@ -1543,7 +1781,7 @@ describe('[unit] MicrosoftOffice365 Adapter Test', () => {
1543
1781
  a.deleteUsersUserId(null, (data, error) => {
1544
1782
  try {
1545
1783
  const displayE = 'userId is required';
1546
- runErrorAsserts(data, error, 'AD.300', 'Test-MicrosoftOffice365-adapter-deleteUsersUserId', displayE);
1784
+ runErrorAsserts(data, error, 'AD.300', 'Test-microsoft_office365-adapter-deleteUsersUserId', displayE);
1547
1785
  done();
1548
1786
  } catch (err) {
1549
1787
  log.error(`Test Failure: ${err}`);