@webex/calling 3.10.0 → 3.11.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 (221) hide show
  1. package/dist/module/CallHistory/CallHistory.js +20 -11
  2. package/dist/module/CallSettings/UcmBackendConnector.js +21 -8
  3. package/dist/module/CallSettings/WxCallBackendConnector.js +10 -15
  4. package/dist/module/CallingClient/CallingClient.js +83 -123
  5. package/dist/module/CallingClient/calling/call.js +73 -58
  6. package/dist/module/CallingClient/calling/callManager.js +7 -0
  7. package/dist/module/CallingClient/constants.js +3 -0
  8. package/dist/module/CallingClient/registration/register.js +85 -5
  9. package/dist/module/CallingClient/registration/webWorker.js +2 -2
  10. package/dist/module/CallingClient/registration/webWorkerStr.js +2 -2
  11. package/dist/module/Contacts/ContactsClient.js +19 -25
  12. package/dist/module/Events/impl/index.js +1 -1
  13. package/dist/module/Logger/index.js +2 -2
  14. package/dist/module/Voicemail/BroadworksBackendConnector.js +10 -18
  15. package/dist/module/Voicemail/UcmBackendConnector.js +7 -11
  16. package/dist/module/Voicemail/Voicemail.js +42 -68
  17. package/dist/module/Voicemail/WxCallBackendConnector.js +14 -28
  18. package/dist/module/common/Utils.js +31 -5
  19. package/dist/module/common/constants.js +2 -0
  20. package/dist/module/common/testUtil.js +1 -0
  21. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  22. package/dist/types/CallSettings/UcmBackendConnector.d.ts +1 -0
  23. package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
  24. package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
  25. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  26. package/dist/types/CallingClient/calling/call.d.ts +4 -0
  27. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  28. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  29. package/dist/types/CallingClient/constants.d.ts +3 -0
  30. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  31. package/dist/types/CallingClient/registration/register.d.ts +4 -0
  32. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  33. package/dist/types/CallingClient/registration/types.d.ts +6 -0
  34. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  35. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  36. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  37. package/dist/types/Contacts/ContactsClient.d.ts +1 -0
  38. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  39. package/dist/types/Logger/index.d.ts +1 -2
  40. package/dist/types/Logger/index.d.ts.map +1 -1
  41. package/dist/types/SDKConnector/types.d.ts +16 -0
  42. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  43. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
  44. package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
  45. package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
  46. package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
  47. package/dist/types/common/Utils.d.ts +1 -1
  48. package/dist/types/common/Utils.d.ts.map +1 -1
  49. package/dist/types/common/constants.d.ts +2 -0
  50. package/dist/types/common/constants.d.ts.map +1 -1
  51. package/dist/types/common/testUtil.d.ts +1 -0
  52. package/dist/types/common/testUtil.d.ts.map +1 -1
  53. package/package.json +4 -4
  54. package/dist/CallHistory/CallHistory.js +0 -584
  55. package/dist/CallHistory/CallHistory.js.map +0 -1
  56. package/dist/CallHistory/CallHistory.test.js +0 -813
  57. package/dist/CallHistory/CallHistory.test.js.map +0 -1
  58. package/dist/CallHistory/callHistoryFixtures.js +0 -650
  59. package/dist/CallHistory/callHistoryFixtures.js.map +0 -1
  60. package/dist/CallHistory/constants.js +0 -38
  61. package/dist/CallHistory/constants.js.map +0 -1
  62. package/dist/CallHistory/types.js +0 -7
  63. package/dist/CallHistory/types.js.map +0 -1
  64. package/dist/CallSettings/CallSettings.js +0 -312
  65. package/dist/CallSettings/CallSettings.js.map +0 -1
  66. package/dist/CallSettings/CallSettings.test.js +0 -122
  67. package/dist/CallSettings/CallSettings.test.js.map +0 -1
  68. package/dist/CallSettings/UcmBackendConnector.js +0 -261
  69. package/dist/CallSettings/UcmBackendConnector.js.map +0 -1
  70. package/dist/CallSettings/UcmBackendConnector.test.js +0 -321
  71. package/dist/CallSettings/UcmBackendConnector.test.js.map +0 -1
  72. package/dist/CallSettings/WxCallBackendConnector.js +0 -604
  73. package/dist/CallSettings/WxCallBackendConnector.js.map +0 -1
  74. package/dist/CallSettings/WxCallBackendConnector.test.js +0 -905
  75. package/dist/CallSettings/WxCallBackendConnector.test.js.map +0 -1
  76. package/dist/CallSettings/constants.js +0 -31
  77. package/dist/CallSettings/constants.js.map +0 -1
  78. package/dist/CallSettings/testFixtures.js +0 -68
  79. package/dist/CallSettings/testFixtures.js.map +0 -1
  80. package/dist/CallSettings/types.js +0 -7
  81. package/dist/CallSettings/types.js.map +0 -1
  82. package/dist/CallingClient/CallingClient.js +0 -1071
  83. package/dist/CallingClient/CallingClient.js.map +0 -1
  84. package/dist/CallingClient/CallingClient.test.js +0 -1289
  85. package/dist/CallingClient/CallingClient.test.js.map +0 -1
  86. package/dist/CallingClient/callRecordFixtures.js +0 -101
  87. package/dist/CallingClient/callRecordFixtures.js.map +0 -1
  88. package/dist/CallingClient/calling/CallerId/index.js +0 -276
  89. package/dist/CallingClient/calling/CallerId/index.js.map +0 -1
  90. package/dist/CallingClient/calling/CallerId/index.test.js +0 -275
  91. package/dist/CallingClient/calling/CallerId/index.test.js.map +0 -1
  92. package/dist/CallingClient/calling/CallerId/types.js +0 -7
  93. package/dist/CallingClient/calling/CallerId/types.js.map +0 -1
  94. package/dist/CallingClient/calling/call.js +0 -3444
  95. package/dist/CallingClient/calling/call.js.map +0 -1
  96. package/dist/CallingClient/calling/call.test.js +0 -3260
  97. package/dist/CallingClient/calling/call.test.js.map +0 -1
  98. package/dist/CallingClient/calling/callManager.js +0 -456
  99. package/dist/CallingClient/calling/callManager.js.map +0 -1
  100. package/dist/CallingClient/calling/callManager.test.js +0 -741
  101. package/dist/CallingClient/calling/callManager.test.js.map +0 -1
  102. package/dist/CallingClient/calling/index.js +0 -30
  103. package/dist/CallingClient/calling/index.js.map +0 -1
  104. package/dist/CallingClient/calling/types.js +0 -74
  105. package/dist/CallingClient/calling/types.js.map +0 -1
  106. package/dist/CallingClient/callingClientFixtures.js +0 -143
  107. package/dist/CallingClient/callingClientFixtures.js.map +0 -1
  108. package/dist/CallingClient/constants.js +0 -237
  109. package/dist/CallingClient/constants.js.map +0 -1
  110. package/dist/CallingClient/line/index.js +0 -349
  111. package/dist/CallingClient/line/index.js.map +0 -1
  112. package/dist/CallingClient/line/line.test.js +0 -327
  113. package/dist/CallingClient/line/line.test.js.map +0 -1
  114. package/dist/CallingClient/line/types.js +0 -21
  115. package/dist/CallingClient/line/types.js.map +0 -1
  116. package/dist/CallingClient/registration/index.js +0 -19
  117. package/dist/CallingClient/registration/index.js.map +0 -1
  118. package/dist/CallingClient/registration/register.js +0 -1538
  119. package/dist/CallingClient/registration/register.js.map +0 -1
  120. package/dist/CallingClient/registration/register.test.js +0 -1537
  121. package/dist/CallingClient/registration/register.test.js.map +0 -1
  122. package/dist/CallingClient/registration/registerFixtures.js +0 -36
  123. package/dist/CallingClient/registration/registerFixtures.js.map +0 -1
  124. package/dist/CallingClient/registration/types.js +0 -7
  125. package/dist/CallingClient/registration/types.js.map +0 -1
  126. package/dist/CallingClient/registration/webWorker.js +0 -130
  127. package/dist/CallingClient/registration/webWorker.js.map +0 -1
  128. package/dist/CallingClient/registration/webWorker.test.js +0 -303
  129. package/dist/CallingClient/registration/webWorker.test.js.map +0 -1
  130. package/dist/CallingClient/registration/webWorkerStr.js +0 -15
  131. package/dist/CallingClient/registration/webWorkerStr.js.map +0 -1
  132. package/dist/CallingClient/types.js +0 -7
  133. package/dist/CallingClient/types.js.map +0 -1
  134. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +0 -142
  135. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +0 -1
  136. package/dist/Contacts/ContactsClient.js +0 -1215
  137. package/dist/Contacts/ContactsClient.js.map +0 -1
  138. package/dist/Contacts/ContactsClient.test.js +0 -1003
  139. package/dist/Contacts/ContactsClient.test.js.map +0 -1
  140. package/dist/Contacts/constants.js +0 -40
  141. package/dist/Contacts/constants.js.map +0 -1
  142. package/dist/Contacts/contactFixtures.js +0 -430
  143. package/dist/Contacts/contactFixtures.js.map +0 -1
  144. package/dist/Contacts/types.js +0 -43
  145. package/dist/Contacts/types.js.map +0 -1
  146. package/dist/Errors/catalog/CallError.js +0 -92
  147. package/dist/Errors/catalog/CallError.js.map +0 -1
  148. package/dist/Errors/catalog/CallingDeviceError.js +0 -86
  149. package/dist/Errors/catalog/CallingDeviceError.js.map +0 -1
  150. package/dist/Errors/catalog/ExtendedError.js +0 -44
  151. package/dist/Errors/catalog/ExtendedError.js.map +0 -1
  152. package/dist/Errors/catalog/LineError.js +0 -88
  153. package/dist/Errors/catalog/LineError.js.map +0 -1
  154. package/dist/Errors/index.js +0 -28
  155. package/dist/Errors/index.js.map +0 -1
  156. package/dist/Errors/types.js +0 -59
  157. package/dist/Errors/types.js.map +0 -1
  158. package/dist/Events/impl/index.js +0 -81
  159. package/dist/Events/impl/index.js.map +0 -1
  160. package/dist/Events/types.js +0 -107
  161. package/dist/Events/types.js.map +0 -1
  162. package/dist/Logger/index.js +0 -228
  163. package/dist/Logger/index.js.map +0 -1
  164. package/dist/Logger/index.test.js +0 -87
  165. package/dist/Logger/index.test.js.map +0 -1
  166. package/dist/Logger/types.js +0 -34
  167. package/dist/Logger/types.js.map +0 -1
  168. package/dist/Metrics/index.js +0 -535
  169. package/dist/Metrics/index.js.map +0 -1
  170. package/dist/Metrics/index.test.js +0 -463
  171. package/dist/Metrics/index.test.js.map +0 -1
  172. package/dist/Metrics/types.js +0 -64
  173. package/dist/Metrics/types.js.map +0 -1
  174. package/dist/SDKConnector/index.js +0 -103
  175. package/dist/SDKConnector/index.js.map +0 -1
  176. package/dist/SDKConnector/index.test.js +0 -9
  177. package/dist/SDKConnector/index.test.js.map +0 -1
  178. package/dist/SDKConnector/types.js +0 -7
  179. package/dist/SDKConnector/types.js.map +0 -1
  180. package/dist/SDKConnector/utils.js +0 -39
  181. package/dist/SDKConnector/utils.js.map +0 -1
  182. package/dist/SDKConnector/utils.test.js +0 -9
  183. package/dist/SDKConnector/utils.test.js.map +0 -1
  184. package/dist/Voicemail/BroadworksBackendConnector.js +0 -707
  185. package/dist/Voicemail/BroadworksBackendConnector.js.map +0 -1
  186. package/dist/Voicemail/BroadworksBackendConnector.test.js +0 -812
  187. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +0 -1
  188. package/dist/Voicemail/UcmBackendConnector.js +0 -632
  189. package/dist/Voicemail/UcmBackendConnector.js.map +0 -1
  190. package/dist/Voicemail/UcmBackendConnector.test.js +0 -738
  191. package/dist/Voicemail/UcmBackendConnector.test.js.map +0 -1
  192. package/dist/Voicemail/Voicemail.js +0 -500
  193. package/dist/Voicemail/Voicemail.js.map +0 -1
  194. package/dist/Voicemail/Voicemail.test.js +0 -391
  195. package/dist/Voicemail/Voicemail.test.js.map +0 -1
  196. package/dist/Voicemail/WxCallBackendConnector.js +0 -671
  197. package/dist/Voicemail/WxCallBackendConnector.js.map +0 -1
  198. package/dist/Voicemail/WxCallBackendConnector.test.js +0 -1199
  199. package/dist/Voicemail/WxCallBackendConnector.test.js.map +0 -1
  200. package/dist/Voicemail/constants.js +0 -61
  201. package/dist/Voicemail/constants.js.map +0 -1
  202. package/dist/Voicemail/types.js +0 -7
  203. package/dist/Voicemail/types.js.map +0 -1
  204. package/dist/Voicemail/voicemailFixture.js +0 -524
  205. package/dist/Voicemail/voicemailFixture.js.map +0 -1
  206. package/dist/api.js +0 -157
  207. package/dist/api.js.map +0 -1
  208. package/dist/common/Utils.js +0 -1451
  209. package/dist/common/Utils.js.map +0 -1
  210. package/dist/common/Utils.test.js +0 -1744
  211. package/dist/common/Utils.test.js.map +0 -1
  212. package/dist/common/constants.js +0 -60
  213. package/dist/common/constants.js.map +0 -1
  214. package/dist/common/index.js +0 -19
  215. package/dist/common/index.js.map +0 -1
  216. package/dist/common/testUtil.js +0 -982
  217. package/dist/common/testUtil.js.map +0 -1
  218. package/dist/common/types.js +0 -75
  219. package/dist/common/types.js.map +0 -1
  220. package/dist/index.js +0 -321
  221. package/dist/index.js.map +0 -1
@@ -1,1003 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
- var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
5
- var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
- var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
- var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
- var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
11
- var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
13
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
15
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
16
- var _types = require("../common/types");
17
- var _testUtil = require("../common/testUtil");
18
- var _types2 = require("../Logger/types");
19
- var _ContactsClient = require("./ContactsClient");
20
- var _constants = require("../common/constants");
21
- var _Logger = _interopRequireDefault(require("../Logger"));
22
- var _constants2 = require("./constants");
23
- var utils = _interopRequireWildcard(require("../common/Utils"));
24
- var _contactFixtures = require("./contactFixtures");
25
- function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
26
- function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
28
- describe('ContactClient Tests', function () {
29
- var webex = (0, _testUtil.getTestUtilsWebex)();
30
- var contactClient;
31
-
32
- // eslint-disable-next-line no-underscore-dangle
33
- var contactServiceUrl = "".concat(webex.internal.services._serviceUrls.contactsService, "/").concat(_constants2.ENCRYPT_FILTER, "/").concat(_constants2.USERS, "/").concat(_constants2.CONTACT_FILTER);
34
- var scimUrl = "".concat(_constants.WEBEX_API_BTS, "/").concat(_constants.IDENTITY_ENDPOINT_RESOURCE, "/").concat(_constants.SCIM_ENDPOINT_RESOURCE, "/").concat(webex.internal.device.orgId, "/").concat(_constants.SCIM_USER_FILTER, "id%20eq%20%22801bb994-343b-4f6b-97ae-d13c91d4b877%22");
35
- // eslint-disable-next-line no-underscore-dangle
36
- var contactServiceGroupUrl = "".concat(webex.internal.services._serviceUrls.contactsService, "/").concat(_constants2.ENCRYPT_FILTER, "/").concat(_constants2.USERS, "/").concat(_constants2.GROUP_FILTER);
37
- var serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');
38
- var uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();
39
- var failureResponsePayload = {
40
- statusCode: 503,
41
- body: {}
42
- };
43
- var mockGroupResponse = _contactFixtures.mockContactResponseBodyOne.groups[0];
44
- beforeEach(function () {
45
- contactClient = (0, _ContactsClient.createContactsClient)(webex, {
46
- level: _types2.LOGGER.INFO
47
- });
48
- expect(contactClient).toBeTruthy();
49
- expect(contactClient.getSDKConnector().getWebex()).toBeTruthy();
50
-
51
- // Set up log spies for each test
52
- jest.spyOn(_Logger.default, 'info');
53
- jest.spyOn(_Logger.default, 'log');
54
- jest.spyOn(_Logger.default, 'warn');
55
- jest.spyOn(_Logger.default, 'error');
56
- });
57
- afterEach(function () {
58
- webex.request.mockClear();
59
- jest.clearAllMocks();
60
- });
61
-
62
- /**
63
- * TestCase inputs
64
- * name: TestCase name
65
- * payloadData: Response body
66
- * inputStatusCode: Status code received in response
67
- * expectedData: Expected data field in ContactResponse after processing
68
- * expectedMessage: Expected message field in ContactResponse after processing
69
- * expectedStatusCode: Expected status code field in ContactResponse after processing
70
- * decryptTextList: Array of decrypted contact list.
71
- */
72
- var errorCodes = [{
73
- name: 'Success case 1: fetch contacts using get contacts api, custom and cloud contact present',
74
- payloadData: _contactFixtures.mockContactResponseBodyOne,
75
- inputStatusCode: 200,
76
- expectedData: {
77
- contacts: _contactFixtures.mockContactListOne,
78
- groups: _contactFixtures.mockContactGroupListOne
79
- },
80
- expectedMessage: _constants.SUCCESS_MESSAGE,
81
- expectedStatusCode: 200,
82
- decryptTextList: [_contactFixtures.mockCity, _contactFixtures.mockCountry, _contactFixtures.mockState, _contactFixtures.mockStreet, _contactFixtures.mockZipCode, _contactFixtures.mockAvatarURL, _contactFixtures.mockCompany, _contactFixtures.mockDisplayNameOne, _contactFixtures.mockEmail, _contactFixtures.mockFirstName, _contactFixtures.mockLastName, _contactFixtures.mockNumber1, _contactFixtures.mockNumber2, _contactFixtures.mockSipAddress, _contactFixtures.mockTitle, _contactFixtures.mockNumber2, _contactFixtures.mockSipAddress, _contactFixtures.mockGroupName],
83
- cloudContactPresent: true,
84
- scimResponse: _contactFixtures.mockSCIMListResponse
85
- }, {
86
- name: 'Success case 2: fetch contacts using get contacts api, single custom contact with mandatory details present',
87
- payloadData: _contactFixtures.mockContactResponseBodyTwo,
88
- inputStatusCode: 200,
89
- expectedData: {
90
- contacts: _contactFixtures.mockContactListTwo,
91
- groups: _contactFixtures.mockContactGroupListTwo
92
- },
93
- expectedMessage: _constants.SUCCESS_MESSAGE,
94
- expectedStatusCode: 200,
95
- decryptTextList: [_contactFixtures.mockDisplayNameTwo, _contactFixtures.mockGroupName]
96
- }, {
97
- name: 'Success case 3: fetch contacts using get contacts api, no contacts returned',
98
- payloadData: _contactFixtures.mockContactResponseBodyThird,
99
- inputStatusCode: 200,
100
- expectedData: {
101
- contacts: [],
102
- groups: []
103
- },
104
- expectedMessage: _constants.SUCCESS_MESSAGE,
105
- expectedStatusCode: 200,
106
- decryptTextList: []
107
- }, {
108
- name: 'Failed case: 200 OK with no response body',
109
- payloadData: undefined,
110
- inputStatusCode: 200,
111
- expectedData: {
112
- error: '422 Exception has occurred'
113
- },
114
- expectedMessage: _constants.FAILURE_MESSAGE,
115
- expectedStatusCode: 422,
116
- decryptTextList: []
117
- }, {
118
- name: 'Failed case 403: fetch contacts using get contacts api',
119
- payloadData: {
120
- error: '403 Forbidden'
121
- },
122
- inputStatusCode: 403,
123
- expectedData: {
124
- error: 'User request is forbidden'
125
- },
126
- expectedMessage: _constants.FAILURE_MESSAGE,
127
- expectedStatusCode: 403,
128
- decryptTextList: []
129
- }, {
130
- name: 'Failed case 408: fetch contacts using get contacts api',
131
- payloadData: {
132
- error: '408 Request Timeout'
133
- },
134
- inputStatusCode: 408,
135
- expectedData: {
136
- error: 'Request to the server timedout'
137
- },
138
- expectedMessage: _constants.FAILURE_MESSAGE,
139
- expectedStatusCode: 408,
140
- decryptTextList: []
141
- }, {
142
- name: 'Failed case 500: fetch contacts using get contacts api',
143
- payloadData: {
144
- error: '500 Internal Server Error'
145
- },
146
- inputStatusCode: 500,
147
- expectedData: {
148
- error: 'Internal server error occurred'
149
- },
150
- expectedMessage: _constants.FAILURE_MESSAGE,
151
- expectedStatusCode: 500,
152
- decryptTextList: []
153
- }, {
154
- name: 'Failed case 503: fetch contacts using get contacts api',
155
- payloadData: {
156
- error: '503 Service Unavailable'
157
- },
158
- inputStatusCode: 503,
159
- expectedData: {
160
- error: 'Unable to establish a connection with the server'
161
- },
162
- expectedMessage: _constants.FAILURE_MESSAGE,
163
- expectedStatusCode: 503,
164
- decryptTextList: []
165
- }].map(function (stat) {
166
- return (0, _assign.default)(stat, {
167
- toString: function toString() {
168
- /* eslint-disable dot-notation */
169
- return this['name'];
170
- }
171
- });
172
- });
173
- it.each(errorCodes)('%s', /*#__PURE__*/function () {
174
- var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(codeObj) {
175
- var respPayload, contactsResponse;
176
- return _regenerator.default.wrap(function _callee$(_context) {
177
- while (1) switch (_context.prev = _context.next) {
178
- case 0:
179
- respPayload = {
180
- statusCode: codeObj.inputStatusCode
181
- };
182
- if (codeObj.inputStatusCode === 200) {
183
- respPayload['body'] = codeObj.payloadData;
184
- webex.request.mockResolvedValueOnce(respPayload);
185
- codeObj.decryptTextList.forEach(function (text) {
186
- webex.internal.encryption.decryptText.mockResolvedValueOnce(text);
187
- });
188
- if (codeObj.scimResponse) {
189
- webex.request.mockResolvedValueOnce(_contactFixtures.mockSCIMListResponse);
190
- }
191
- } else {
192
- respPayload['message'] = _constants.FAILURE_MESSAGE;
193
- respPayload['data'] = codeObj.payloadData;
194
- webex.request.mockRejectedValueOnce(respPayload);
195
- }
196
- _context.next = 4;
197
- return contactClient.getContacts();
198
- case 4:
199
- contactsResponse = _context.sent;
200
- if (codeObj.inputStatusCode === 200) {
201
- if (codeObj.cloudContactPresent) {
202
- expect(webex.request).toBeCalledTimes(2);
203
- } else {
204
- expect(webex.request).toBeCalledTimes(1);
205
- }
206
- expect(webex.request).toHaveBeenNthCalledWith(1, {
207
- uri: contactServiceUrl,
208
- method: _types.HTTP_METHODS.GET
209
- });
210
- if (codeObj.cloudContactPresent) {
211
- expect(webex.request).toHaveBeenNthCalledWith(2, {
212
- uri: scimUrl,
213
- method: _types.HTTP_METHODS.GET,
214
- headers: {
215
- 'cisco-device-url': 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',
216
- 'spark-user-agent': 'webex-calling/beta'
217
- }
218
- });
219
- }
220
- expect(_Logger.default.info).toHaveBeenCalledWith(_constants.METHOD_START_MESSAGE, {
221
- file: _constants2.CONTACTS_CLIENT,
222
- method: _constants2.METHODS.GET_CONTACTS
223
- });
224
- if (codeObj.payloadData) {
225
- expect(_Logger.default.log).toHaveBeenCalledWith('Successfully fetched contacts and groups', {
226
- file: _constants2.CONTACTS_CLIENT,
227
- method: _constants2.METHODS.GET_CONTACTS
228
- });
229
- } else {
230
- expect(_Logger.default.error).toHaveBeenCalled();
231
- }
232
- } else {
233
- expect(webex.request).toBeCalledOnceWith({
234
- uri: contactServiceUrl,
235
- method: _types.HTTP_METHODS.GET
236
- });
237
- expect(_Logger.default.info).toHaveBeenCalledWith(_constants.METHOD_START_MESSAGE, {
238
- file: _constants2.CONTACTS_CLIENT,
239
- method: _constants2.METHODS.GET_CONTACTS
240
- });
241
- expect(_Logger.default.error).toHaveBeenCalled();
242
- }
243
- expect(contactsResponse).toEqual({
244
- data: expect.any(Object),
245
- message: codeObj.expectedMessage,
246
- statusCode: codeObj.expectedStatusCode
247
- });
248
- if (codeObj.expectedMessage === _constants.SUCCESS_MESSAGE) {
249
- expect(serviceErrorCodeHandlerSpy).not.toBeCalled();
250
- } else {
251
- expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(codeObj.payloadData ? respPayload : expect.any(Error), {
252
- file: _constants2.CONTACTS_CLIENT,
253
- method: _constants2.METHODS.GET_CONTACTS
254
- });
255
- }
256
- case 8:
257
- case "end":
258
- return _context.stop();
259
- }
260
- }, _callee);
261
- }));
262
- return function (_x) {
263
- return _ref.apply(this, arguments);
264
- };
265
- }());
266
- it('create a contact group without encryptionKey', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
267
- var _contactsResponse$dat;
268
- var successResponsePayload, contactsResponse;
269
- return _regenerator.default.wrap(function _callee2$(_context2) {
270
- while (1) switch (_context2.prev = _context2.next) {
271
- case 0:
272
- successResponsePayload = {
273
- statusCode: 201,
274
- body: mockGroupResponse
275
- };
276
- contactClient['groups'] = [];
277
- contactClient['encryptionKeyUrl'] = '';
278
- webex.request.mockResolvedValue(successResponsePayload);
279
- webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([_contactFixtures.mockKmsKey]);
280
- webex.internal.encryption.kms.createResource.mockResolvedValue(_contactFixtures.mockKmsKey);
281
- webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted Other').mockResolvedValueOnce('Encrypted Top');
282
- _context2.next = 9;
283
- return contactClient.createContactGroup('Top Contacts');
284
- case 9:
285
- contactsResponse = _context2.sent;
286
- expect(contactsResponse.statusCode).toEqual(201);
287
- expect((_contactsResponse$dat = contactsResponse.data.group) === null || _contactsResponse$dat === void 0 ? void 0 : _contactsResponse$dat.groupId).toBe(mockGroupResponse.groupId);
288
- expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({
289
- count: 1
290
- });
291
- expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({
292
- keyUris: [_contactFixtures.mockKmsKey.uri]
293
- });
294
- expect(webex.request).toBeCalledTimes(2);
295
- expect(webex.request).toHaveBeenNthCalledWith(1, {
296
- uri: contactServiceGroupUrl,
297
- method: 'POST',
298
- body: {
299
- displayName: 'Encrypted Other',
300
- encryptionKeyUrl: _contactFixtures.mockKmsKey.uri,
301
- groupType: 'NORMAL',
302
- schemas: 'urn:cisco:codev:identity:contact:core:1.0'
303
- }
304
- });
305
- expect(webex.request).toHaveBeenNthCalledWith(2, {
306
- uri: contactServiceGroupUrl,
307
- method: 'POST',
308
- body: {
309
- displayName: 'Encrypted Top',
310
- encryptionKeyUrl: _contactFixtures.mockKmsKey.uri,
311
- groupType: 'NORMAL',
312
- schemas: 'urn:cisco:codev:identity:contact:core:1.0'
313
- }
314
- });
315
- expect(contactClient['groups'].length).toEqual(2);
316
- expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');
317
- expect(_Logger.default.info).toHaveBeenCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with displayName: Top Contacts"), {
318
- file: _constants2.CONTACTS_CLIENT,
319
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
320
- });
321
- expect(_Logger.default.info).toHaveBeenCalledWith(_constants.METHOD_START_MESSAGE, {
322
- file: _constants2.CONTACTS_CLIENT,
323
- method: _constants2.METHODS.CREATE_NEW_ENCRYPTION_KEY_URL
324
- });
325
- expect(_Logger.default.info).toHaveBeenCalledWith('Requesting kms for a new KRO and key', {
326
- file: _constants2.CONTACTS_CLIENT,
327
- method: _constants2.METHODS.CREATE_NEW_ENCRYPTION_KEY_URL
328
- });
329
- expect(_Logger.default.log).toHaveBeenCalledWith("Creating a default group: ".concat(_constants2.DEFAULT_GROUP_NAME), {
330
- file: _constants2.CONTACTS_CLIENT,
331
- method: 'fetchEncryptionKeyUrl'
332
- });
333
- expect(_Logger.default.log).toHaveBeenCalledWith("Contact group Top Contacts successfully created", {
334
- file: _constants2.CONTACTS_CLIENT,
335
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
336
- });
337
- case 24:
338
- case "end":
339
- return _context2.stop();
340
- }
341
- }, _callee2);
342
- })));
343
- it('create a contact group with existing key info', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
344
- var _contactsResponse$dat2;
345
- var successResponsePayload, infoSpy, contactsResponse;
346
- return _regenerator.default.wrap(function _callee3$(_context3) {
347
- while (1) switch (_context3.prev = _context3.next) {
348
- case 0:
349
- successResponsePayload = {
350
- statusCode: 201,
351
- body: mockGroupResponse
352
- };
353
- contactClient['groups'] = _contactFixtures.mockContactGroupListOne;
354
- webex.request.mockResolvedValue(successResponsePayload);
355
- webex.internal.encryption.encryptText.mockResolvedValue('Encrypted Top Contacts');
356
- infoSpy = jest.spyOn(_Logger.default, 'info');
357
- _context3.next = 7;
358
- return contactClient.createContactGroup('Top Contacts');
359
- case 7:
360
- contactsResponse = _context3.sent;
361
- expect(contactsResponse.statusCode).toEqual(201);
362
- expect((_contactsResponse$dat2 = contactsResponse.data.group) === null || _contactsResponse$dat2 === void 0 ? void 0 : _contactsResponse$dat2.groupId).toBe(mockGroupResponse.groupId);
363
- expect(infoSpy).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with displayName: Top Contacts"), {
364
- file: _constants2.CONTACTS_CLIENT,
365
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
366
- });
367
- expect(_Logger.default.log).toBeCalledWith("Contact group Top Contacts successfully created", {
368
- file: _constants2.CONTACTS_CLIENT,
369
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
370
- });
371
- expect(infoSpy).not.toBeCalledWith(_constants.METHOD_START_MESSAGE, {
372
- file: _constants2.CONTACTS_CLIENT,
373
- method: _constants2.METHODS.CREATE_NEW_ENCRYPTION_KEY_URL
374
- });
375
- expect(webex.request).toBeCalledOnceWith({
376
- uri: contactServiceGroupUrl,
377
- method: _types.HTTP_METHODS.POST,
378
- body: {
379
- displayName: 'Encrypted Top Contacts',
380
- encryptionKeyUrl: _contactFixtures.mockContactGroupListOne[0].encryptionKeyUrl,
381
- groupType: 'NORMAL',
382
- schemas: _constants2.CONTACTS_SCHEMA
383
- }
384
- });
385
- expect(contactClient['groups'].length).toEqual(2);
386
- expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');
387
- case 16:
388
- case "end":
389
- return _context3.stop();
390
- }
391
- }, _callee3);
392
- })));
393
- it('create a contact group with same displayName', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
394
- var logSpy, contactsResponse;
395
- return _regenerator.default.wrap(function _callee4$(_context4) {
396
- while (1) switch (_context4.prev = _context4.next) {
397
- case 0:
398
- contactClient['groups'] = _contactFixtures.mockContactResponseBodyOne.groups;
399
- webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([_contactFixtures.mockKmsKey]);
400
- webex.internal.encryption.kms.createResource.mockResolvedValue(_contactFixtures.mockKmsKey);
401
- logSpy = jest.spyOn(_Logger.default, 'warn');
402
- _context4.next = 6;
403
- return contactClient.createContactGroup(mockGroupResponse.displayName);
404
- case 6:
405
- contactsResponse = _context4.sent;
406
- expect(webex.request).not.toBeCalled();
407
- expect(contactsResponse.statusCode).toBe(400);
408
- expect(logSpy).toBeCalledOnceWith("Group name ".concat(mockGroupResponse.displayName, " already exists."), {
409
- file: _constants2.CONTACTS_CLIENT,
410
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
411
- });
412
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with displayName: ").concat(mockGroupResponse.displayName), {
413
- file: _constants2.CONTACTS_CLIENT,
414
- method: _constants2.METHODS.CREATE_CONTACT_GROUP
415
- });
416
- expect(contactClient['groups']).toEqual(_contactFixtures.mockContactResponseBodyOne.groups);
417
- case 12:
418
- case "end":
419
- return _context4.stop();
420
- }
421
- }, _callee4);
422
- })));
423
- it('create a contact group - service unavailable', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
424
- var loggerContext, warnSpy, errorSpy, contactsResponse;
425
- return _regenerator.default.wrap(function _callee5$(_context5) {
426
- while (1) switch (_context5.prev = _context5.next) {
427
- case 0:
428
- loggerContext = {
429
- file: _constants2.CONTACTS_CLIENT,
430
- method: 'createContactGroup'
431
- };
432
- contactClient['groups'] = _contactFixtures.mockContactGroupListOne;
433
- webex.request.mockRejectedValue(failureResponsePayload);
434
- webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([_contactFixtures.mockKmsKey]);
435
- webex.internal.encryption.kms.createResource.mockResolvedValue(_contactFixtures.mockKmsKey);
436
- webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');
437
- warnSpy = jest.spyOn(_Logger.default, 'warn');
438
- errorSpy = jest.spyOn(_Logger.default, 'error');
439
- _context5.next = 10;
440
- return contactClient.createContactGroup('New group');
441
- case 10:
442
- contactsResponse = _context5.sent;
443
- expect(contactsResponse.statusCode).toBe(503);
444
- expect(webex.request).toBeCalledOnceWith({
445
- uri: contactServiceGroupUrl,
446
- method: _types.HTTP_METHODS.POST,
447
- body: {
448
- displayName: 'Encrypted group name',
449
- encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',
450
- groupType: 'NORMAL',
451
- schemas: 'urn:cisco:codev:identity:contact:core:1.0'
452
- }
453
- });
454
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with displayName: New group"), loggerContext);
455
- expect(warnSpy).toBeCalledTimes(1);
456
- expect(warnSpy).toHaveBeenNthCalledWith(1, '503 Unable to establish a connection with the server', loggerContext);
457
- expect(errorSpy).toBeCalledTimes(1);
458
- expect(errorSpy).toHaveBeenNthCalledWith(1, Error("Unable to create contact group: ".concat(failureResponsePayload)), loggerContext);
459
- expect(contactClient['groups']).toEqual(_contactFixtures.mockContactGroupListOne);
460
- expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);
461
- case 20:
462
- case "end":
463
- return _context5.stop();
464
- }
465
- }, _callee5);
466
- })));
467
- it('delete a contact group - service unavailable', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6() {
468
- var loggerContext, warnSpy, errorSpy, contactsResponse;
469
- return _regenerator.default.wrap(function _callee6$(_context6) {
470
- while (1) switch (_context6.prev = _context6.next) {
471
- case 0:
472
- loggerContext = {
473
- file: _constants2.CONTACTS_CLIENT,
474
- method: 'deleteContactGroup'
475
- };
476
- contactClient['groups'] = _contactFixtures.mockContactGroupListOne;
477
- webex.request.mockRejectedValue(failureResponsePayload);
478
- webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([_contactFixtures.mockKmsKey]);
479
- webex.internal.encryption.kms.createResource.mockResolvedValue(_contactFixtures.mockKmsKey);
480
- warnSpy = jest.spyOn(_Logger.default, 'warn');
481
- errorSpy = jest.spyOn(_Logger.default, 'error');
482
- _context6.next = 9;
483
- return contactClient.deleteContactGroup(mockGroupResponse.groupId);
484
- case 9:
485
- contactsResponse = _context6.sent;
486
- expect(contactsResponse.statusCode).toBe(503);
487
- expect(webex.request).toBeCalledOnceWith({
488
- method: _types.HTTP_METHODS.DELETE,
489
- uri: "".concat(contactServiceGroupUrl, "/").concat(mockGroupResponse.groupId)
490
- });
491
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with groupId: ").concat(mockGroupResponse.groupId), loggerContext);
492
- expect(_Logger.default.info).toBeCalledWith("Deleting contact group: ".concat(mockGroupResponse.groupId), loggerContext);
493
- expect(warnSpy).toBeCalledTimes(1);
494
- expect(errorSpy).toBeCalledTimes(1);
495
- expect(uploadLogsSpy).toBeCalledTimes(1);
496
- expect(errorSpy).toHaveBeenNthCalledWith(1, Error("Unable to delete contact group ".concat(mockGroupResponse.groupId, ": ").concat(failureResponsePayload)), loggerContext);
497
- expect(warnSpy).toHaveBeenNthCalledWith(1, '503 Unable to establish a connection with the server', loggerContext);
498
- expect(contactClient['groups']).toEqual(_contactFixtures.mockContactGroupListOne);
499
- expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);
500
- case 21:
501
- case "end":
502
- return _context6.stop();
503
- }
504
- }, _callee6);
505
- })));
506
- it('successful deletion of contact group', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7() {
507
- var successResponsePayload, response;
508
- return _regenerator.default.wrap(function _callee7$(_context7) {
509
- while (1) switch (_context7.prev = _context7.next) {
510
- case 0:
511
- successResponsePayload = {
512
- statusCode: 204
513
- };
514
- contactClient['groups'] = [_contactFixtures.mockContactGroupListOne[0]];
515
- webex.request.mockResolvedValue(successResponsePayload);
516
- _context7.next = 5;
517
- return contactClient.deleteContactGroup(_contactFixtures.mockContactGroupListOne[0].groupId);
518
- case 5:
519
- response = _context7.sent;
520
- expect(response.statusCode).toEqual(204);
521
- expect(webex.request).toBeCalledOnceWith({
522
- uri: "".concat(contactServiceGroupUrl, "/").concat(_contactFixtures.mockContactGroupListOne[0].groupId),
523
- method: _types.HTTP_METHODS.DELETE
524
- });
525
- expect(contactClient['groups']).toEqual([]);
526
- expect(_Logger.default.info).toBeCalledWith("Deleting contact group: ".concat(_contactFixtures.mockContactGroupListOne[0].groupId), {
527
- file: _constants2.CONTACTS_CLIENT,
528
- method: 'deleteContactGroup'
529
- });
530
- expect(_Logger.default.log).toBeCalledWith("Contact group ".concat(_contactFixtures.mockContactGroupListOne[0].groupId, " successfully deleted"), {
531
- file: _constants2.CONTACTS_CLIENT,
532
- method: 'deleteContactGroup'
533
- });
534
- case 11:
535
- case "end":
536
- return _context7.stop();
537
- }
538
- }, _callee7);
539
- })));
540
- it('create a contact with an existing group', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8() {
541
- var _res$data$contact, _result$data$contact;
542
- var mockContactResponse, successResponsePayload, infoSpy, logSpy, contact, res, result;
543
- return _regenerator.default.wrap(function _callee8$(_context8) {
544
- while (1) switch (_context8.prev = _context8.next) {
545
- case 0:
546
- mockContactResponse = _contactFixtures.mockContactResponseBodyTwo.contacts[0];
547
- successResponsePayload = {
548
- statusCode: 201,
549
- body: mockContactResponse
550
- };
551
- webex.request.mockResolvedValue(successResponsePayload);
552
- webex.internal.encryption.encryptText.mockResolvedValue('Encrypted contact name');
553
- infoSpy = jest.spyOn(_Logger.default, 'info');
554
- logSpy = jest.spyOn(_Logger.default, 'log');
555
- contactClient['groups'] = _contactFixtures.mockContactGroupListOne;
556
- contactClient['encryptionKeyUrl'] = _contactFixtures.mockContactGroupListOne[0].encryptionKeyUrl;
557
- contact = _contactFixtures.mockContactListTwo.slice()[0];
558
- contact.groups = [];
559
- _context8.next = 12;
560
- return contactClient.createContact(contact);
561
- case 12:
562
- res = _context8.sent;
563
- expect(res.statusCode).toEqual(201);
564
- expect((_res$data$contact = res.data.contact) === null || _res$data$contact === void 0 ? void 0 : _res$data$contact.contactId).toBe(mockContactResponse.contactId);
565
- expect(infoSpy).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactType: ").concat(contact.contactType), {
566
- file: _constants2.CONTACTS_CLIENT,
567
- method: _constants2.METHODS.CREATE_CONTACT
568
- });
569
- expect(logSpy).toBeCalledWith("Contact successfully created", {
570
- file: _constants2.CONTACTS_CLIENT,
571
- method: _constants2.METHODS.CREATE_CONTACT
572
- });
573
- expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {
574
- file: _constants2.CONTACTS_CLIENT,
575
- method: 'createNewEncryptionKeyUrl'
576
- });
577
- expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {
578
- file: _constants2.CONTACTS_CLIENT,
579
- method: 'createNewEncryptionKeyUrl'
580
- });
581
- expect(infoSpy).not.toBeCalledWith("Creating a default group: ".concat(_constants2.DEFAULT_GROUP_NAME), {
582
- file: _constants2.CONTACTS_CLIENT,
583
- method: 'fetchEncryptionKeyUrl'
584
- });
585
- expect(webex.internal.encryption.encryptText).toBeCalledOnceWith(_contactFixtures.mockContactGroupListOne[0].encryptionKeyUrl, contact.displayName);
586
- expect(webex.request).toBeCalledOnceWith({
587
- body: _objectSpread(_objectSpread({}, contact), {}, {
588
- displayName: 'Encrypted contact name',
589
- groups: [_contactFixtures.mockContactGroupListOne[0].groupId],
590
- schemas: _constants2.CONTACTS_SCHEMA
591
- }),
592
- uri: contactServiceUrl,
593
- method: _types.HTTP_METHODS.POST
594
- });
595
- logSpy.mockClear();
596
-
597
- /* for coverage */
598
- _context8.next = 25;
599
- return contactClient.createContact(contact);
600
- case 25:
601
- result = _context8.sent;
602
- expect((_result$data$contact = result.data.contact) === null || _result$data$contact === void 0 ? void 0 : _result$data$contact.contactId).toBe(mockContactResponse.contactId);
603
- expect(logSpy).not.toBeCalledWith("Creating a default group: ".concat(_constants2.DEFAULT_GROUP_NAME), {
604
- file: _constants2.CONTACTS_CLIENT,
605
- method: 'fetchEncryptionKeyUrl'
606
- });
607
- case 28:
608
- case "end":
609
- return _context8.stop();
610
- }
611
- }, _callee8);
612
- })));
613
- it('create a contact without a group and encryptionKey', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee9() {
614
- var _res$data$contact2;
615
- var mockContactResponse, successContactGroupResponsePayload, successContactResponsePayload, contact, res;
616
- return _regenerator.default.wrap(function _callee9$(_context9) {
617
- while (1) switch (_context9.prev = _context9.next) {
618
- case 0:
619
- mockContactResponse = _contactFixtures.mockContactResponseBodyOne.contacts[1];
620
- contactClient['groups'] = [];
621
- contactClient['encryptionKey'] = '';
622
- contactClient['defaultGroupId'] = '';
623
- successContactGroupResponsePayload = {
624
- statusCode: 201,
625
- body: mockGroupResponse
626
- };
627
- successContactResponsePayload = {
628
- statusCode: 201,
629
- body: mockContactResponse
630
- };
631
- webex.request.mockResolvedValueOnce(successContactGroupResponsePayload).mockResolvedValueOnce(successContactResponsePayload);
632
- webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([_contactFixtures.mockKmsKey]);
633
- webex.internal.encryption.kms.createResource.mockResolvedValue(_contactFixtures.mockKmsKey);
634
- webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');
635
- contact = {
636
- contactType: 'CUSTOM'
637
- };
638
- _context9.next = 13;
639
- return contactClient.createContact(contact);
640
- case 13:
641
- res = _context9.sent;
642
- expect(res.statusCode).toEqual(201);
643
- expect(webex.request).toBeCalledTimes(2);
644
- expect(webex.request).toHaveBeenNthCalledWith(1, {
645
- body: {
646
- displayName: 'Encrypted group name',
647
- encryptionKeyUrl: _contactFixtures.mockKmsKey.uri,
648
- groupType: 'NORMAL',
649
- schemas: _constants2.CONTACTS_SCHEMA
650
- },
651
- uri: contactServiceGroupUrl,
652
- method: _types.HTTP_METHODS.POST
653
- });
654
- expect(webex.request).toHaveBeenNthCalledWith(2, {
655
- body: {
656
- contactType: 'CUSTOM',
657
- encryptionKeyUrl: _contactFixtures.mockKmsKey.uri,
658
- groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],
659
- schemas: _constants2.CONTACTS_SCHEMA
660
- },
661
- method: _types.HTTP_METHODS.POST,
662
- uri: contactServiceUrl
663
- });
664
- expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({
665
- count: 1
666
- });
667
- expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({
668
- keyUris: [_contactFixtures.mockKmsKey.uri]
669
- });
670
- expect((_res$data$contact2 = res.data.contact) === null || _res$data$contact2 === void 0 ? void 0 : _res$data$contact2.contactId).toBe(mockContactResponse.contactId);
671
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactType: CUSTOM"), {
672
- file: _constants2.CONTACTS_CLIENT,
673
- method: _constants2.METHODS.CREATE_CONTACT
674
- });
675
- expect(_Logger.default.info).toBeCalledWith(_constants.METHOD_START_MESSAGE, {
676
- file: _constants2.CONTACTS_CLIENT,
677
- method: _constants2.METHODS.CREATE_NEW_ENCRYPTION_KEY_URL
678
- });
679
- expect(_Logger.default.info).toBeCalledWith('Requesting kms for a new KRO and key', {
680
- file: _constants2.CONTACTS_CLIENT,
681
- method: _constants2.METHODS.CREATE_NEW_ENCRYPTION_KEY_URL
682
- });
683
- expect(_Logger.default.log).toBeCalledWith("Creating a default group: ".concat(_constants2.DEFAULT_GROUP_NAME), {
684
- file: _constants2.CONTACTS_CLIENT,
685
- method: _constants2.METHODS.FETCH_ENCRYPTION_KEY_URL
686
- });
687
- expect(_Logger.default.log).toBeCalledWith("Contact successfully created", {
688
- file: _constants2.CONTACTS_CLIENT,
689
- method: 'createContact'
690
- });
691
- case 26:
692
- case "end":
693
- return _context9.stop();
694
- }
695
- }, _callee9);
696
- })));
697
- it('create a cloud contact with no existing groups', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
698
- var _res$data$contact3;
699
- var mockContactResponse, successResponsePayload, successResponsePayloadGroup, contact, res;
700
- return _regenerator.default.wrap(function _callee0$(_context0) {
701
- while (1) switch (_context0.prev = _context0.next) {
702
- case 0:
703
- mockContactResponse = _contactFixtures.mockContactResponseBodyOne.contacts[0];
704
- successResponsePayload = {
705
- statusCode: 201,
706
- body: mockContactResponse
707
- };
708
- successResponsePayloadGroup = {
709
- statusCode: 201,
710
- body: _contactFixtures.mockContactResponseBodyOne.groups[0]
711
- };
712
- webex.request.mockResolvedValueOnce(successResponsePayloadGroup).mockResolvedValueOnce(successResponsePayload).mockResolvedValueOnce(_contactFixtures.mockSCIMListResponse);
713
- webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');
714
- contactClient['groups'] = [];
715
- contactClient['encryptionKeyUrl'] = _contactFixtures.mockContactResponseBodyOne.groups[0].encryptionKeyUrl;
716
- contact = {
717
- contactType: 'CLOUD'
718
- };
719
- contact.groups = [];
720
- _context0.next = 11;
721
- return contactClient.createContact(contact);
722
- case 11:
723
- res = _context0.sent;
724
- expect(res.statusCode).toEqual(400);
725
- expect(res.data.error).toEqual('contactId is required for contactType:CLOUD.');
726
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactType: CLOUD"), {
727
- file: _constants2.CONTACTS_CLIENT,
728
- method: _constants2.METHODS.CREATE_CONTACT
729
- });
730
- contact.contactId = mockContactResponse.contactId;
731
- _context0.next = 18;
732
- return contactClient.createContact(contact);
733
- case 18:
734
- res = _context0.sent;
735
- expect(res.statusCode).toEqual(201);
736
- expect((_res$data$contact3 = res.data.contact) === null || _res$data$contact3 === void 0 ? void 0 : _res$data$contact3.contactId).toBe(mockContactResponse.contactId);
737
- expect(webex.request).toBeCalledTimes(3);
738
- expect(webex.request).toHaveBeenNthCalledWith(1, {
739
- method: _types.HTTP_METHODS.POST,
740
- uri: contactServiceGroupUrl,
741
- body: {
742
- displayName: 'Encrypted group name',
743
- groupType: 'NORMAL',
744
- encryptionKeyUrl: _contactFixtures.mockContactResponseBodyOne.groups[0].encryptionKeyUrl,
745
- schemas: _constants2.CONTACTS_SCHEMA
746
- }
747
- });
748
- expect(webex.request).toHaveBeenNthCalledWith(2, {
749
- method: _types.HTTP_METHODS.POST,
750
- uri: contactServiceUrl,
751
- body: {
752
- contactId: mockContactResponse.contactId,
753
- contactType: 'CLOUD',
754
- encryptionKeyUrl: _contactFixtures.mockContactResponseBodyOne.groups[0].encryptionKeyUrl,
755
- schemas: _constants2.CONTACTS_SCHEMA,
756
- groups: ['1561977e-3443-4ccf-a591-69686275d7d2']
757
- }
758
- });
759
- expect(webex.request).toHaveBeenNthCalledWith(3, {
760
- uri: scimUrl,
761
- method: _types.HTTP_METHODS.GET,
762
- headers: {
763
- 'cisco-device-url': 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',
764
- 'spark-user-agent': 'webex-calling/beta'
765
- }
766
- });
767
- expect(_Logger.default.log).toBeCalledWith("Contact successfully created", {
768
- file: _constants2.CONTACTS_CLIENT,
769
- method: 'createContact'
770
- });
771
- case 26:
772
- case "end":
773
- return _context0.stop();
774
- }
775
- }, _callee0);
776
- })));
777
- it('create a contact - service unavailable', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1() {
778
- var contact, res;
779
- return _regenerator.default.wrap(function _callee1$(_context1) {
780
- while (1) switch (_context1.prev = _context1.next) {
781
- case 0:
782
- webex.request.mockRejectedValue(failureResponsePayload);
783
- contactClient['groups'] = _contactFixtures.mockContactGroupListOne.slice();
784
- contactClient['encryptionKeyUrl'] = _contactFixtures.mockContactResponseBodyOne.groups[0].encryptionKeyUrl;
785
- contact = {
786
- contactType: 'CLOUD',
787
- contactId: '801bb994-343b-4f6b-97ae-d13c91d4b877'
788
- };
789
- _context1.next = 6;
790
- return contactClient.createContact(contact);
791
- case 6:
792
- res = _context1.sent;
793
- expect(webex.request).toBeCalledOnceWith({
794
- uri: contactServiceUrl,
795
- method: _types.HTTP_METHODS.POST,
796
- body: _objectSpread(_objectSpread({}, contact), {}, {
797
- encryptionKeyUrl: _contactFixtures.mockContactResponseBodyOne.groups[0].encryptionKeyUrl,
798
- groups: [_contactFixtures.mockContactGroupListOne[0].groupId],
799
- schemas: _constants2.CONTACTS_SCHEMA
800
- })
801
- });
802
- expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {
803
- file: _constants2.CONTACTS_CLIENT,
804
- method: _constants2.METHODS.CREATE_CONTACT
805
- });
806
- expect(res.statusCode).toEqual(503);
807
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactType: CLOUD"), {
808
- file: _constants2.CONTACTS_CLIENT,
809
- method: _constants2.METHODS.CREATE_CONTACT
810
- });
811
- expect(_Logger.default.error).toBeCalledWith(Error("Failed to create contact: ".concat(failureResponsePayload)), {
812
- file: _constants2.CONTACTS_CLIENT,
813
- method: _constants2.METHODS.CREATE_CONTACT
814
- });
815
- case 12:
816
- case "end":
817
- return _context1.stop();
818
- }
819
- }, _callee1);
820
- })));
821
- it('successful deletion of contacts', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10() {
822
- var successResponsePayload, response;
823
- return _regenerator.default.wrap(function _callee10$(_context10) {
824
- while (1) switch (_context10.prev = _context10.next) {
825
- case 0:
826
- successResponsePayload = {
827
- statusCode: 204
828
- };
829
- contactClient['contacts'] = [_contactFixtures.mockContactListOne[0]];
830
- webex.request.mockResolvedValue(successResponsePayload);
831
- _context10.next = 5;
832
- return contactClient.deleteContact(_contactFixtures.mockContactListOne[0].contactId);
833
- case 5:
834
- response = _context10.sent;
835
- expect(response.statusCode).toEqual(204);
836
- expect(webex.request).toBeCalledOnceWith({
837
- uri: "".concat(contactServiceUrl, "/").concat(_contactFixtures.mockContactListOne[0].contactId),
838
- method: _types.HTTP_METHODS.DELETE
839
- });
840
- expect(contactClient['contacts']).toEqual([]);
841
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactId: ").concat(_contactFixtures.mockContactListOne[0].contactId), {
842
- file: _constants2.CONTACTS_CLIENT,
843
- method: _constants2.METHODS.DELETE_CONTACT
844
- });
845
- expect(_Logger.default.info).toBeCalledWith("Deleting contact : ".concat(_contactFixtures.mockContactListOne[0].contactId), {
846
- file: _constants2.CONTACTS_CLIENT,
847
- method: _constants2.METHODS.DELETE_CONTACT
848
- });
849
- case 11:
850
- case "end":
851
- return _context10.stop();
852
- }
853
- }, _callee10);
854
- })));
855
- it('delete a contact - service unavailable', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11() {
856
- var response;
857
- return _regenerator.default.wrap(function _callee11$(_context11) {
858
- while (1) switch (_context11.prev = _context11.next) {
859
- case 0:
860
- contactClient['contacts'] = _contactFixtures.mockContactListOne;
861
- webex.request.mockRejectedValue(failureResponsePayload);
862
- _context11.next = 4;
863
- return contactClient.deleteContact(_contactFixtures.mockContactListOne[0].contactId);
864
- case 4:
865
- response = _context11.sent;
866
- expect(response.statusCode).toEqual(503);
867
- expect(webex.request).toBeCalledOnceWith({
868
- uri: "".concat(contactServiceUrl, "/").concat(_contactFixtures.mockContactListOne[0].contactId),
869
- method: _types.HTTP_METHODS.DELETE
870
- });
871
- expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {
872
- file: _constants2.CONTACTS_CLIENT,
873
- method: _constants2.METHODS.DELETE_CONTACT
874
- });
875
- expect(contactClient['contacts']).toEqual(_contactFixtures.mockContactListOne);
876
- expect(_Logger.default.info).toBeCalledWith("".concat(_constants.METHOD_START_MESSAGE, " with contactId: ").concat(_contactFixtures.mockContactListOne[0].contactId), {
877
- file: _constants2.CONTACTS_CLIENT,
878
- method: _constants2.METHODS.DELETE_CONTACT
879
- });
880
- expect(_Logger.default.info).toBeCalledWith("Deleting contact : ".concat(_contactFixtures.mockContactListOne[0].contactId), {
881
- file: _constants2.CONTACTS_CLIENT,
882
- method: _constants2.METHODS.DELETE_CONTACT
883
- });
884
- case 11:
885
- case "end":
886
- return _context11.stop();
887
- }
888
- }, _callee11);
889
- })));
890
- it('test resolveContacts function for a minimal contact with few details', function () {
891
- var contact = contactClient['resolveCloudContacts']({
892
- userId: _contactFixtures.mockContactMinimum
893
- }, _contactFixtures.mockSCIMMinListResponse.body);
894
- expect(contact).toEqual([{
895
- avatarURL: '',
896
- avatarUrlDomain: undefined,
897
- contactId: 'userId',
898
- contactType: 'CLOUD',
899
- department: undefined,
900
- displayName: undefined,
901
- emails: undefined,
902
- encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',
903
- firstName: undefined,
904
- groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],
905
- lastName: undefined,
906
- manager: undefined,
907
- ownerId: 'ownerId',
908
- phoneNumbers: undefined,
909
- sipAddresses: undefined,
910
- resolved: true
911
- }]);
912
- });
913
- it("test resolveContacts function when contactsDataMap list doesn't match resolved list", function () {
914
- var mockContact = {
915
- firstName: 'Jane',
916
- lastName: 'Doe',
917
- contactId: 'janeDoe'
918
- };
919
- var contact = contactClient['resolveCloudContacts']({
920
- userId: _contactFixtures.mockContactMinimum,
921
- janeDoe: mockContact
922
- }, _contactFixtures.mockSCIMMinListResponse.body);
923
- expect(contact).toEqual([{
924
- firstName: 'Jane',
925
- lastName: 'Doe',
926
- contactId: 'janeDoe',
927
- resolved: false
928
- }, {
929
- avatarURL: '',
930
- avatarUrlDomain: undefined,
931
- contactId: 'userId',
932
- contactType: 'CLOUD',
933
- department: undefined,
934
- displayName: undefined,
935
- emails: undefined,
936
- encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',
937
- firstName: undefined,
938
- groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],
939
- lastName: undefined,
940
- manager: undefined,
941
- ownerId: 'ownerId',
942
- phoneNumbers: undefined,
943
- sipAddresses: undefined,
944
- resolved: true
945
- }]);
946
- });
947
- it('test resolveContacts function encountering an error', function () {
948
- var warnSpy = jest.spyOn(_Logger.default, 'warn');
949
- var contact = contactClient['resolveCloudContacts']({
950
- userId: _contactFixtures.mockContactMinimum
951
- }, _contactFixtures.mockSCIMMinListResponse);
952
- expect(contact).toEqual(null);
953
- expect(warnSpy).toHaveBeenCalledWith('Error occurred while parsing resolved contacts', {
954
- file: _constants2.CONTACTS_CLIENT,
955
- method: 'resolveCloudContacts'
956
- });
957
- });
958
- it('logs error for chunk when scimQuery API call fails in the loop for getContacts', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
959
- var mockData, respPayload, warnSpy, infoSpy, logSpy;
960
- return _regenerator.default.wrap(function _callee12$(_context12) {
961
- while (1) switch (_context12.prev = _context12.next) {
962
- case 0:
963
- mockData = errorCodes[0];
964
- respPayload = {
965
- statusCode: mockData.inputStatusCode,
966
- body: mockData.payloadData
967
- };
968
- webex.request.mockResolvedValueOnce(respPayload).mockRejectedValueOnce(_objectSpread(_objectSpread({}, respPayload), {}, {
969
- statusCode: 503,
970
- message: _constants.FAILURE_MESSAGE,
971
- data: mockData.payloadData
972
- }));
973
- mockData.decryptTextList.forEach(function (text) {
974
- webex.internal.encryption.decryptText.mockResolvedValueOnce(text);
975
- });
976
- warnSpy = jest.spyOn(_Logger.default, 'warn');
977
- infoSpy = jest.spyOn(_Logger.default, 'info');
978
- logSpy = jest.spyOn(_Logger.default, 'log');
979
- _context12.next = 9;
980
- return contactClient.getContacts();
981
- case 9:
982
- expect(webex.request).toBeCalledTimes(2);
983
- expect(warnSpy).toBeCalledTimes(1);
984
- expect(warnSpy).toBeCalledWith('Error processing contact chunk 0-50', {
985
- file: _constants2.CONTACTS_CLIENT,
986
- method: _constants2.METHODS.GET_CONTACTS
987
- });
988
- expect(infoSpy).toBeCalledWith(_constants.METHOD_START_MESSAGE, {
989
- file: _constants2.CONTACTS_CLIENT,
990
- method: _constants2.METHODS.GET_CONTACTS
991
- });
992
- expect(logSpy).toBeCalledWith('Successfully fetched contacts and groups', {
993
- file: _constants2.CONTACTS_CLIENT,
994
- method: _constants2.METHODS.GET_CONTACTS
995
- });
996
- case 14:
997
- case "end":
998
- return _context12.stop();
999
- }
1000
- }, _callee12);
1001
- })));
1002
- });
1003
- //# sourceMappingURL=ContactsClient.test.js.map