@webex/calling 3.10.0-next.9 → 3.10.0-wxc-disconnect.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CallHistory/CallHistory.js +41 -42
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/CallHistory.test.js +5 -120
- package/dist/CallHistory/CallHistory.test.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.js +6 -6
- package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.test.js +1 -2
- package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.js +43 -38
- package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.test.js +1 -4
- package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +207 -161
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +290 -152
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +40 -37
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +264 -330
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +1 -1
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +4 -5
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +3 -3
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
- package/dist/Contacts/ContactsClient.js +45 -39
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +3 -4
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Events/impl/index.js +1 -1
- package/dist/Events/impl/index.js.map +1 -1
- package/dist/Logger/index.js +3 -3
- package/dist/Logger/index.js.map +1 -1
- package/dist/Logger/index.test.js +1 -1
- package/dist/Logger/index.test.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.js +54 -47
- package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.test.js +2 -10
- package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.js +32 -29
- package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
- package/dist/Voicemail/Voicemail.js +102 -77
- package/dist/Voicemail/Voicemail.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js +59 -46
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.test.js +18 -44
- package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
- package/dist/common/Utils.js +2 -2
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +8 -4
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/testUtil.js +1 -2
- package/dist/common/testUtil.js.map +1 -1
- package/dist/module/CallHistory/CallHistory.js +11 -20
- package/dist/module/CallSettings/UcmBackendConnector.js +2 -1
- package/dist/module/CallSettings/WxCallBackendConnector.js +15 -10
- package/dist/module/CallingClient/CallingClient.js +123 -83
- package/dist/module/CallingClient/calling/call.js +19 -13
- package/dist/module/CallingClient/registration/register.js +3 -3
- package/dist/module/CallingClient/registration/webWorker.js +2 -2
- package/dist/module/CallingClient/registration/webWorkerStr.js +2 -2
- package/dist/module/Contacts/ContactsClient.js +25 -19
- package/dist/module/Events/impl/index.js +1 -1
- package/dist/module/Logger/index.js +2 -2
- package/dist/module/Voicemail/BroadworksBackendConnector.js +18 -10
- package/dist/module/Voicemail/UcmBackendConnector.js +11 -7
- package/dist/module/Voicemail/Voicemail.js +68 -42
- package/dist/module/Voicemail/WxCallBackendConnector.js +28 -14
- package/dist/module/common/Utils.js +2 -2
- package/dist/module/common/testUtil.js +0 -1
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
- package/dist/types/Contacts/ContactsClient.d.ts +0 -1
- package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
- package/dist/types/Logger/index.d.ts +2 -1
- package/dist/types/Logger/index.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +0 -10
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +0 -1
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_testUtil","_types2","_ContactsClient","_constants","_Logger","_interopRequireDefault","_constants2","utils","_interopRequireWildcard","_contactFixtures","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","describe","webex","getTestUtilsWebex","contactClient","contactServiceUrl","concat","internal","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","scimUrl","WEBEX_API_BTS","IDENTITY_ENDPOINT_RESOURCE","SCIM_ENDPOINT_RESOURCE","device","orgId","SCIM_USER_FILTER","contactServiceGroupUrl","GROUP_FILTER","serviceErrorCodeHandlerSpy","jest","spyOn","uploadLogsSpy","mockResolvedValue","failureResponsePayload","statusCode","body","mockGroupResponse","mockContactResponseBodyOne","groups","beforeEach","createContactsClient","level","LOGGER","INFO","expect","toBeTruthy","getSDKConnector","getWebex","log","afterEach","request","mockClear","clearAllMocks","errorCodes","name","payloadData","inputStatusCode","expectedData","contacts","mockContactListOne","mockContactGroupListOne","expectedMessage","SUCCESS_MESSAGE","expectedStatusCode","decryptTextList","mockCity","mockCountry","mockState","mockStreet","mockZipCode","mockAvatarURL","mockCompany","mockDisplayNameOne","mockEmail","mockFirstName","mockLastName","mockNumber1","mockNumber2","mockSipAddress","mockTitle","mockGroupName","cloudContactPresent","scimResponse","mockSCIMListResponse","mockContactResponseBodyTwo","mockContactListTwo","mockContactGroupListTwo","mockDisplayNameTwo","mockContactResponseBodyThird","undefined","error","FAILURE_MESSAGE","map","stat","_assign","toString","it","each","_ref","_asyncToGenerator2","_regenerator","mark","_callee","codeObj","respPayload","contactsResponse","wrap","_callee$","_context","prev","next","mockResolvedValueOnce","text","encryption","decryptText","mockRejectedValueOnce","getContacts","sent","toBeCalledTimes","toHaveBeenNthCalledWith","uri","method","HTTP_METHODS","GET","headers","info","toHaveBeenCalledWith","METHOD_START_MESSAGE","file","CONTACTS_CLIENT","METHODS","GET_CONTACTS","toHaveBeenCalled","toBeCalledOnceWith","toEqual","data","any","message","not","toBeCalled","Error","stop","_x","_callee2","_contactsResponse$dat","successResponsePayload","_callee2$","_context2","kms","createUnboundKeys","mockKmsKey","createResource","encryptText","createContactGroup","group","groupId","toBe","count","keyUris","displayName","encryptionKeyUrl","groupType","schemas","CREATE_CONTACT_GROUP","CREATE_NEW_ENCRYPTION_KEY_URL","DEFAULT_GROUP_NAME","_callee3","_contactsResponse$dat2","infoSpy","_callee3$","_context3","toBeCalledWith","POST","CONTACTS_SCHEMA","_callee4","logSpy","_callee4$","_context4","_callee5","loggerContext","warnSpy","errorSpy","_callee5$","_context5","mockRejectedValue","_stringify","_callee6","_callee6$","_context6","deleteContactGroup","DELETE","_callee7","response","_callee7$","_context7","_callee8","_res$data$contact","_result$data$contact","mockContactResponse","contact","res","result","_callee8$","_context8","slice","createContact","contactId","contactType","CREATE_CONTACT","_callee9","_res$data$contact2","successContactGroupResponsePayload","successContactResponsePayload","_callee9$","_context9","FETCH_ENCRYPTION_KEY_URL","_callee0","_res$data$contact3","successResponsePayloadGroup","_callee0$","_context0","_callee1","_callee1$","_context1","_callee10","_callee10$","_context10","deleteContact","DELETE_CONTACT","_callee11","_callee11$","_context11","userId","mockContactMinimum","mockSCIMMinListResponse","avatarURL","avatarUrlDomain","department","emails","firstName","lastName","manager","ownerId","phoneNumbers","sipAddresses","resolved","mockContact","janeDoe","_callee12","mockData","_callee12$","_context12"],"sources":["ContactsClient.test.ts"],"sourcesContent":["import {HTTP_METHODS, SCIMListResponse, WebexRequestPayload} from '../common/types';\nimport {getTestUtilsWebex} from '../common/testUtil';\nimport {LOGGER} from '../Logger/types';\nimport {Contact, ContactResponse, IContacts} from './types';\nimport {createContactsClient} from './ContactsClient';\nimport {\n FAILURE_MESSAGE,\n IDENTITY_ENDPOINT_RESOURCE,\n METHOD_START_MESSAGE,\n SCIM_ENDPOINT_RESOURCE,\n SCIM_USER_FILTER,\n SUCCESS_MESSAGE,\n WEBEX_API_BTS,\n} from '../common/constants';\nimport log from '../Logger';\nimport {\n CONTACTS_CLIENT,\n CONTACT_FILTER,\n ENCRYPT_FILTER,\n DEFAULT_GROUP_NAME,\n USERS,\n GROUP_FILTER,\n CONTACTS_SCHEMA,\n METHODS,\n} from './constants';\nimport * as utils from '../common/Utils';\nimport {\n mockCity,\n mockCompany,\n mockContactListTwo,\n mockContactResponseBodyTwo,\n mockContactListOne,\n mockContactResponseBodyOne,\n mockCountry,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSCIMListResponse,\n mockSipAddress,\n mockState,\n mockStreet,\n mockTitle,\n mockZipCode,\n mockDisplayNameTwo,\n mockContactResponseBodyThird,\n mockKmsKey,\n mockGroupName,\n mockContactGroupListOne,\n mockContactGroupListTwo,\n mockAvatarURL,\n mockSCIMMinListResponse,\n mockContactMinimum,\n} from './contactFixtures';\n\ndescribe('ContactClient Tests', () => {\n const webex = getTestUtilsWebex();\n\n let contactClient: IContacts;\n\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`;\n const scimUrl = `${WEBEX_API_BTS}/${IDENTITY_ENDPOINT_RESOURCE}/${SCIM_ENDPOINT_RESOURCE}/${webex.internal.device.orgId}/${SCIM_USER_FILTER}id%20eq%20%22801bb994-343b-4f6b-97ae-d13c91d4b877%22`;\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceGroupUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`;\n const serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');\n const uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();\n const failureResponsePayload = <WebexRequestPayload>{\n statusCode: 503,\n body: {},\n };\n const mockGroupResponse = mockContactResponseBodyOne.groups[0];\n\n beforeEach(() => {\n contactClient = createContactsClient(webex, {level: LOGGER.INFO});\n\n expect(contactClient).toBeTruthy();\n expect(contactClient.getSDKConnector().getWebex()).toBeTruthy();\n\n // Set up log spies for each test\n jest.spyOn(log, 'info');\n jest.spyOn(log, 'log');\n jest.spyOn(log, 'warn');\n jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n webex.request.mockClear();\n jest.clearAllMocks();\n });\n\n /**\n * TestCase inputs\n * name: TestCase name\n * payloadData: Response body\n * inputStatusCode: Status code received in response\n * expectedData: Expected data field in ContactResponse after processing\n * expectedMessage: Expected message field in ContactResponse after processing\n * expectedStatusCode: Expected status code field in ContactResponse after processing\n * decryptTextList: Array of decrypted contact list.\n */\n const errorCodes: {\n name: string;\n payloadData: unknown;\n inputStatusCode: number;\n expectedData: unknown;\n expectedMessage: string;\n expectedStatusCode: number;\n decryptTextList: Array<string>;\n cloudContactPresent?: boolean;\n scimResponse?: SCIMListResponse;\n }[] = [\n {\n name: 'Success case 1: fetch contacts using get contacts api, custom and cloud contact present',\n payloadData: mockContactResponseBodyOne,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListOne, groups: mockContactGroupListOne},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [\n mockCity,\n mockCountry,\n mockState,\n mockStreet,\n mockZipCode,\n mockAvatarURL,\n mockCompany,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSipAddress,\n mockTitle,\n mockNumber2,\n mockSipAddress,\n mockGroupName,\n ],\n cloudContactPresent: true,\n scimResponse: mockSCIMListResponse,\n },\n {\n name: 'Success case 2: fetch contacts using get contacts api, single custom contact with mandatory details present',\n payloadData: mockContactResponseBodyTwo,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListTwo, groups: mockContactGroupListTwo},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [mockDisplayNameTwo, mockGroupName],\n },\n {\n name: 'Success case 3: fetch contacts using get contacts api, no contacts returned',\n payloadData: mockContactResponseBodyThird,\n inputStatusCode: 200,\n expectedData: {contacts: [], groups: []},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [],\n },\n {\n name: 'Failed case: 200 OK with no response body',\n payloadData: undefined,\n inputStatusCode: 200,\n expectedData: {error: '422 Exception has occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 422,\n decryptTextList: [],\n },\n {\n name: 'Failed case 403: fetch contacts using get contacts api',\n payloadData: {error: '403 Forbidden'},\n inputStatusCode: 403,\n expectedData: {error: 'User request is forbidden'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 403,\n decryptTextList: [],\n },\n {\n name: 'Failed case 408: fetch contacts using get contacts api',\n payloadData: {error: '408 Request Timeout'},\n inputStatusCode: 408,\n expectedData: {error: 'Request to the server timedout'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 408,\n decryptTextList: [],\n },\n {\n name: 'Failed case 500: fetch contacts using get contacts api',\n payloadData: {error: '500 Internal Server Error'},\n inputStatusCode: 500,\n expectedData: {error: 'Internal server error occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 500,\n decryptTextList: [],\n },\n {\n name: 'Failed case 503: fetch contacts using get contacts api',\n payloadData: {error: '503 Service Unavailable'},\n inputStatusCode: 503,\n expectedData: {error: 'Unable to establish a connection with the server'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 503,\n decryptTextList: [],\n },\n ].map((stat) =>\n Object.assign(stat, {\n toString() {\n /* eslint-disable dot-notation */\n return this['name'];\n },\n })\n );\n\n it.each(errorCodes)('%s', async (codeObj) => {\n const respPayload = {\n statusCode: codeObj.inputStatusCode,\n };\n\n if (codeObj.inputStatusCode === 200) {\n respPayload['body'] = codeObj.payloadData;\n webex.request.mockResolvedValueOnce(respPayload);\n codeObj.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n if (codeObj.scimResponse) {\n webex.request.mockResolvedValueOnce(mockSCIMListResponse);\n }\n } else {\n respPayload['message'] = FAILURE_MESSAGE;\n respPayload['data'] = codeObj.payloadData;\n webex.request.mockRejectedValueOnce(respPayload);\n }\n\n const contactsResponse = await contactClient.getContacts();\n\n if (codeObj.inputStatusCode === 200) {\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toBeCalledTimes(2);\n } else {\n expect(webex.request).toBeCalledTimes(1);\n }\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n }\n\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n\n if (codeObj.payloadData) {\n expect(log.log).toHaveBeenCalledWith('Successfully fetched contacts and groups', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n } else {\n expect(log.error).toHaveBeenCalled();\n }\n } else {\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(log.error).toHaveBeenCalled();\n }\n\n expect(contactsResponse).toEqual({\n data: expect.any(Object),\n message: codeObj.expectedMessage,\n statusCode: codeObj.expectedStatusCode,\n });\n\n if (codeObj.expectedMessage === SUCCESS_MESSAGE) {\n expect(serviceErrorCodeHandlerSpy).not.toBeCalled();\n } else {\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(\n codeObj.payloadData ? respPayload : expect.any(Error),\n {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n }\n );\n }\n });\n\n it('create a contact group without encryptionKey', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = '';\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText\n .mockResolvedValueOnce('Encrypted Other')\n .mockResolvedValueOnce('Encrypted Top');\n\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Other',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Top',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n\n expect(log.info).toHaveBeenCalledWith(\n `${METHOD_START_MESSAGE} with displayName: Top Contacts`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.info).toHaveBeenCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toHaveBeenCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n expect(log.log).toHaveBeenCalledWith(`Contact group Top Contacts successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n });\n\n it('create a contact group with existing key info', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockResolvedValue(successResponsePayload);\n\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted Top Contacts');\n const infoSpy = jest.spyOn(log, 'info');\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(infoSpy).toBeCalledWith(`${METHOD_START_MESSAGE} with displayName: Top Contacts`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n expect(log.log).toBeCalledWith(`Contact group Top Contacts successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n expect(infoSpy).not.toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted Top Contacts',\n encryptionKeyUrl: mockContactGroupListOne[0].encryptionKeyUrl,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with same displayName', async () => {\n contactClient['groups'] = mockContactResponseBodyOne.groups;\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const logSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup(mockGroupResponse.displayName);\n\n expect(webex.request).not.toBeCalled();\n expect(contactsResponse.statusCode).toBe(400);\n expect(logSpy).toBeCalledOnceWith(\n `Group name ${mockGroupResponse.displayName} already exists.`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with displayName: ${mockGroupResponse.displayName}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(contactClient['groups']).toEqual(mockContactResponseBodyOne.groups);\n });\n\n it('create a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_CLIENT,\n method: 'createContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n const warnSpy = jest.spyOn(log, 'warn');\n const errorSpy = jest.spyOn(log, 'error');\n\n const contactsResponse = await contactClient.createContactGroup('New group');\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with displayName: New group`,\n loggerContext\n );\n expect(warnSpy).toBeCalledTimes(1);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n expect(errorSpy).toBeCalledTimes(1);\n expect(errorSpy).toHaveBeenNthCalledWith(\n 1,\n `Unable to create contact group: ${JSON.stringify(failureResponsePayload)}`,\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('delete a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const warnSpy = jest.spyOn(log, 'warn');\n const errorSpy = jest.spyOn(log, 'error');\n const contactsResponse = await contactClient.deleteContactGroup(mockGroupResponse.groupId);\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n method: HTTP_METHODS.DELETE,\n uri: `${contactServiceGroupUrl}/${mockGroupResponse.groupId}`,\n });\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with groupId: ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(log.info).toBeCalledWith(\n `Deleting contact group: ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(warnSpy).toBeCalledTimes(1);\n expect(errorSpy).toBeCalledTimes(1);\n expect(uploadLogsSpy).toBeCalledTimes(1);\n expect(errorSpy).toHaveBeenNthCalledWith(\n 1,\n `Unable to delete contact group ${mockGroupResponse.groupId}: ${JSON.stringify(\n failureResponsePayload\n )}`,\n loggerContext\n );\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('successful deletion of contact group', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['groups'] = [mockContactGroupListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContactGroup(mockContactGroupListOne[0].groupId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceGroupUrl}/${mockContactGroupListOne[0].groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['groups']).toEqual([]);\n\n expect(log.info).toBeCalledWith(\n `Deleting contact group: ${mockContactGroupListOne[0].groupId}`,\n {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n }\n );\n expect(log.log).toBeCalledWith(\n `Contact group ${mockContactGroupListOne[0].groupId} successfully deleted`,\n {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n }\n );\n });\n\n it('create a contact with an existing group', async () => {\n const mockContactResponse = mockContactResponseBodyTwo.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted contact name');\n const infoSpy = jest.spyOn(log, 'info');\n const logSpy = jest.spyOn(log, 'log');\n\n contactClient['groups'] = mockContactGroupListOne;\n contactClient['encryptionKeyUrl'] = mockContactGroupListOne[0].encryptionKeyUrl;\n\n const contact = mockContactListTwo.slice()[0] as Contact;\n\n contact.groups = [];\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(infoSpy).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactType: ${contact.contactType}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n }\n );\n expect(logSpy).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_CLIENT,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_CLIENT,\n method: 'createNewEncryptionKeyUrl',\n });\n expect(infoSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n\n expect(webex.internal.encryption.encryptText).toBeCalledOnceWith(\n mockContactGroupListOne[0].encryptionKeyUrl,\n contact.displayName\n );\n\n expect(webex.request).toBeCalledOnceWith({\n body: {\n ...contact,\n displayName: 'Encrypted contact name',\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n });\n\n logSpy.mockClear();\n\n /* for coverage */\n const result: ContactResponse = await contactClient.createContact(contact);\n\n expect(result.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n });\n\n it('create a contact without a group and encryptionKey', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[1];\n\n contactClient['groups'] = [];\n contactClient['encryptionKey'] = '';\n contactClient['defaultGroupId'] = '';\n const successContactGroupResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n const successContactResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request\n .mockResolvedValueOnce(successContactGroupResponsePayload)\n .mockResolvedValueOnce(successContactResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n const contact = {\n contactType: 'CUSTOM',\n } as Contact;\n\n const res = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n body: {\n contactType: 'CUSTOM',\n encryptionKeyUrl: mockKmsKey.uri,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n schemas: CONTACTS_SCHEMA,\n },\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n });\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CUSTOM`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(log.info).toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.info).toBeCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.FETCH_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: 'createContact',\n });\n });\n\n it('create a cloud contact with no existing groups', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n const successResponsePayloadGroup = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponseBodyOne.groups[0],\n };\n\n webex.request\n .mockResolvedValueOnce(successResponsePayloadGroup)\n .mockResolvedValueOnce(successResponsePayload)\n .mockResolvedValueOnce(mockSCIMListResponse);\n\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n\n const contact = {\n contactType: 'CLOUD',\n } as Contact;\n\n contact.groups = [];\n\n let res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(400);\n expect(res.data.error).toEqual('contactId is required for contactType:CLOUD.');\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CLOUD`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n\n contact.contactId = mockContactResponse.contactId;\n\n res = await contactClient.createContact(contact);\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n method: HTTP_METHODS.POST,\n uri: contactServiceGroupUrl,\n body: {\n displayName: 'Encrypted group name',\n groupType: 'NORMAL',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n body: {\n contactId: mockContactResponse.contactId,\n contactType: 'CLOUD',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n\n expect(log.log).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: 'createContact',\n });\n });\n\n it('create a contact - service unavailable', async () => {\n webex.request.mockRejectedValue(failureResponsePayload);\n\n contactClient['groups'] = mockContactGroupListOne.slice();\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n const contact = {\n contactType: 'CLOUD',\n contactId: '801bb994-343b-4f6b-97ae-d13c91d4b877',\n } as Contact;\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n body: {\n ...contact,\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(res.statusCode).toEqual(503);\n\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CLOUD`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(log.error).toBeCalledWith(\n `Failed to create contact: ${JSON.stringify(failureResponsePayload)}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n }\n );\n });\n\n it('successful deletion of contacts', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['contacts'] = [mockContactListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['contacts']).toEqual([]);\n\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactId: ${mockContactListOne[0].contactId}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n }\n );\n expect(log.info).toBeCalledWith(`Deleting contact : ${mockContactListOne[0].contactId}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n });\n\n it('delete a contact - service unavailable', async () => {\n contactClient['contacts'] = mockContactListOne;\n\n webex.request.mockRejectedValue(failureResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n\n expect(contactClient['contacts']).toEqual(mockContactListOne);\n\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactId: ${mockContactListOne[0].contactId}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n }\n );\n expect(log.info).toBeCalledWith(`Deleting contact : ${mockContactListOne[0].contactId}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n });\n\n it('test resolveContacts function for a minimal contact with few details', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it(\"test resolveContacts function when contactsDataMap list doesn't match resolved list\", () => {\n const mockContact = {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n };\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum, janeDoe: mockContact},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n resolved: false,\n },\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it('test resolveContacts function encountering an error', () => {\n const warnSpy = jest.spyOn(log, 'warn');\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse\n );\n\n expect(contact).toEqual(null);\n expect(warnSpy).toHaveBeenCalledWith('Error occurred while parsing resolved contacts', {\n file: CONTACTS_CLIENT,\n method: 'resolveCloudContacts',\n });\n });\n\n it('logs error for chunk when scimQuery API call fails in the loop for getContacts', async () => {\n const mockData = errorCodes[0];\n const respPayload = {\n statusCode: mockData.inputStatusCode,\n body: mockData.payloadData,\n };\n webex.request.mockResolvedValueOnce(respPayload).mockRejectedValueOnce({\n ...respPayload,\n statusCode: 503,\n message: FAILURE_MESSAGE,\n data: mockData.payloadData,\n });\n\n mockData.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n const warnSpy = jest.spyOn(log, 'warn');\n const infoSpy = jest.spyOn(log, 'info');\n const logSpy = jest.spyOn(log, 'log');\n\n await contactClient.getContacts();\n\n expect(webex.request).toBeCalledTimes(2);\n expect(warnSpy).toBeCalledTimes(1);\n expect(warnSpy).toBeCalledWith('Error processing contact chunk 0-50', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(infoSpy).toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(logSpy).toBeCalledWith('Successfully fetched contacts and groups', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_testUtil","_types2","_ContactsClient","_constants","_Logger","_interopRequireDefault","_constants2","utils","_interopRequireWildcard","_contactFixtures","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","describe","webex","getTestUtilsWebex","contactClient","contactServiceUrl","concat","internal","services","_serviceUrls","contactsService","ENCRYPT_FILTER","USERS","CONTACT_FILTER","scimUrl","WEBEX_API_BTS","IDENTITY_ENDPOINT_RESOURCE","SCIM_ENDPOINT_RESOURCE","device","orgId","SCIM_USER_FILTER","contactServiceGroupUrl","GROUP_FILTER","serviceErrorCodeHandlerSpy","jest","spyOn","uploadLogsSpy","mockResolvedValue","failureResponsePayload","statusCode","body","mockGroupResponse","mockContactResponseBodyOne","groups","beforeEach","createContactsClient","level","LOGGER","INFO","expect","toBeTruthy","getSDKConnector","getWebex","log","afterEach","request","mockClear","clearAllMocks","errorCodes","name","payloadData","inputStatusCode","expectedData","contacts","mockContactListOne","mockContactGroupListOne","expectedMessage","SUCCESS_MESSAGE","expectedStatusCode","decryptTextList","mockCity","mockCountry","mockState","mockStreet","mockZipCode","mockAvatarURL","mockCompany","mockDisplayNameOne","mockEmail","mockFirstName","mockLastName","mockNumber1","mockNumber2","mockSipAddress","mockTitle","mockGroupName","cloudContactPresent","scimResponse","mockSCIMListResponse","mockContactResponseBodyTwo","mockContactListTwo","mockContactGroupListTwo","mockDisplayNameTwo","mockContactResponseBodyThird","undefined","error","FAILURE_MESSAGE","map","stat","_assign","toString","it","each","_ref","_asyncToGenerator2","_regenerator","mark","_callee","codeObj","respPayload","contactsResponse","wrap","_callee$","_context","prev","next","mockResolvedValueOnce","text","encryption","decryptText","mockRejectedValueOnce","getContacts","sent","toBeCalledTimes","toHaveBeenNthCalledWith","uri","method","HTTP_METHODS","GET","headers","info","toHaveBeenCalledWith","METHOD_START_MESSAGE","file","CONTACTS_CLIENT","METHODS","GET_CONTACTS","toHaveBeenCalled","toBeCalledOnceWith","toEqual","data","any","message","not","toBeCalled","Error","stop","_x","_callee2","_contactsResponse$dat","successResponsePayload","_callee2$","_context2","kms","createUnboundKeys","mockKmsKey","createResource","encryptText","createContactGroup","group","groupId","toBe","count","keyUris","displayName","encryptionKeyUrl","groupType","schemas","CREATE_CONTACT_GROUP","CREATE_NEW_ENCRYPTION_KEY_URL","DEFAULT_GROUP_NAME","_callee3","_contactsResponse$dat2","infoSpy","_callee3$","_context3","toBeCalledWith","POST","CONTACTS_SCHEMA","_callee4","logSpy","_callee4$","_context4","_callee5","loggerContext","warnSpy","errorSpy","_callee5$","_context5","mockRejectedValue","_callee6","_callee6$","_context6","deleteContactGroup","DELETE","_callee7","response","_callee7$","_context7","_callee8","_res$data$contact","_result$data$contact","mockContactResponse","contact","res","result","_callee8$","_context8","slice","createContact","contactId","contactType","CREATE_CONTACT","_callee9","_res$data$contact2","successContactGroupResponsePayload","successContactResponsePayload","_callee9$","_context9","FETCH_ENCRYPTION_KEY_URL","_callee0","_res$data$contact3","successResponsePayloadGroup","_callee0$","_context0","_callee1","_callee1$","_context1","_callee10","_callee10$","_context10","deleteContact","DELETE_CONTACT","_callee11","_callee11$","_context11","userId","mockContactMinimum","mockSCIMMinListResponse","avatarURL","avatarUrlDomain","department","emails","firstName","lastName","manager","ownerId","phoneNumbers","sipAddresses","resolved","mockContact","janeDoe","_callee12","mockData","_callee12$","_context12"],"sources":["ContactsClient.test.ts"],"sourcesContent":["import {HTTP_METHODS, SCIMListResponse, WebexRequestPayload} from '../common/types';\nimport {getTestUtilsWebex} from '../common/testUtil';\nimport {LOGGER} from '../Logger/types';\nimport {Contact, ContactResponse, IContacts} from './types';\nimport {createContactsClient} from './ContactsClient';\nimport {\n FAILURE_MESSAGE,\n IDENTITY_ENDPOINT_RESOURCE,\n METHOD_START_MESSAGE,\n SCIM_ENDPOINT_RESOURCE,\n SCIM_USER_FILTER,\n SUCCESS_MESSAGE,\n WEBEX_API_BTS,\n} from '../common/constants';\nimport log from '../Logger';\nimport {\n CONTACTS_CLIENT,\n CONTACT_FILTER,\n ENCRYPT_FILTER,\n DEFAULT_GROUP_NAME,\n USERS,\n GROUP_FILTER,\n CONTACTS_SCHEMA,\n METHODS,\n} from './constants';\nimport * as utils from '../common/Utils';\nimport {\n mockCity,\n mockCompany,\n mockContactListTwo,\n mockContactResponseBodyTwo,\n mockContactListOne,\n mockContactResponseBodyOne,\n mockCountry,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSCIMListResponse,\n mockSipAddress,\n mockState,\n mockStreet,\n mockTitle,\n mockZipCode,\n mockDisplayNameTwo,\n mockContactResponseBodyThird,\n mockKmsKey,\n mockGroupName,\n mockContactGroupListOne,\n mockContactGroupListTwo,\n mockAvatarURL,\n mockSCIMMinListResponse,\n mockContactMinimum,\n} from './contactFixtures';\n\ndescribe('ContactClient Tests', () => {\n const webex = getTestUtilsWebex();\n\n let contactClient: IContacts;\n\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${CONTACT_FILTER}`;\n const scimUrl = `${WEBEX_API_BTS}/${IDENTITY_ENDPOINT_RESOURCE}/${SCIM_ENDPOINT_RESOURCE}/${webex.internal.device.orgId}/${SCIM_USER_FILTER}id%20eq%20%22801bb994-343b-4f6b-97ae-d13c91d4b877%22`;\n // eslint-disable-next-line no-underscore-dangle\n const contactServiceGroupUrl = `${webex.internal.services._serviceUrls.contactsService}/${ENCRYPT_FILTER}/${USERS}/${GROUP_FILTER}`;\n const serviceErrorCodeHandlerSpy = jest.spyOn(utils, 'serviceErrorCodeHandler');\n const uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();\n const failureResponsePayload = <WebexRequestPayload>{\n statusCode: 503,\n body: {},\n };\n const mockGroupResponse = mockContactResponseBodyOne.groups[0];\n\n beforeEach(() => {\n contactClient = createContactsClient(webex, {level: LOGGER.INFO});\n\n expect(contactClient).toBeTruthy();\n expect(contactClient.getSDKConnector().getWebex()).toBeTruthy();\n\n // Set up log spies for each test\n jest.spyOn(log, 'info');\n jest.spyOn(log, 'log');\n jest.spyOn(log, 'warn');\n jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n webex.request.mockClear();\n jest.clearAllMocks();\n });\n\n /**\n * TestCase inputs\n * name: TestCase name\n * payloadData: Response body\n * inputStatusCode: Status code received in response\n * expectedData: Expected data field in ContactResponse after processing\n * expectedMessage: Expected message field in ContactResponse after processing\n * expectedStatusCode: Expected status code field in ContactResponse after processing\n * decryptTextList: Array of decrypted contact list.\n */\n const errorCodes: {\n name: string;\n payloadData: unknown;\n inputStatusCode: number;\n expectedData: unknown;\n expectedMessage: string;\n expectedStatusCode: number;\n decryptTextList: Array<string>;\n cloudContactPresent?: boolean;\n scimResponse?: SCIMListResponse;\n }[] = [\n {\n name: 'Success case 1: fetch contacts using get contacts api, custom and cloud contact present',\n payloadData: mockContactResponseBodyOne,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListOne, groups: mockContactGroupListOne},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [\n mockCity,\n mockCountry,\n mockState,\n mockStreet,\n mockZipCode,\n mockAvatarURL,\n mockCompany,\n mockDisplayNameOne,\n mockEmail,\n mockFirstName,\n mockLastName,\n mockNumber1,\n mockNumber2,\n mockSipAddress,\n mockTitle,\n mockNumber2,\n mockSipAddress,\n mockGroupName,\n ],\n cloudContactPresent: true,\n scimResponse: mockSCIMListResponse,\n },\n {\n name: 'Success case 2: fetch contacts using get contacts api, single custom contact with mandatory details present',\n payloadData: mockContactResponseBodyTwo,\n inputStatusCode: 200,\n expectedData: {contacts: mockContactListTwo, groups: mockContactGroupListTwo},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [mockDisplayNameTwo, mockGroupName],\n },\n {\n name: 'Success case 3: fetch contacts using get contacts api, no contacts returned',\n payloadData: mockContactResponseBodyThird,\n inputStatusCode: 200,\n expectedData: {contacts: [], groups: []},\n expectedMessage: SUCCESS_MESSAGE,\n expectedStatusCode: 200,\n decryptTextList: [],\n },\n {\n name: 'Failed case: 200 OK with no response body',\n payloadData: undefined,\n inputStatusCode: 200,\n expectedData: {error: '422 Exception has occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 422,\n decryptTextList: [],\n },\n {\n name: 'Failed case 403: fetch contacts using get contacts api',\n payloadData: {error: '403 Forbidden'},\n inputStatusCode: 403,\n expectedData: {error: 'User request is forbidden'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 403,\n decryptTextList: [],\n },\n {\n name: 'Failed case 408: fetch contacts using get contacts api',\n payloadData: {error: '408 Request Timeout'},\n inputStatusCode: 408,\n expectedData: {error: 'Request to the server timedout'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 408,\n decryptTextList: [],\n },\n {\n name: 'Failed case 500: fetch contacts using get contacts api',\n payloadData: {error: '500 Internal Server Error'},\n inputStatusCode: 500,\n expectedData: {error: 'Internal server error occurred'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 500,\n decryptTextList: [],\n },\n {\n name: 'Failed case 503: fetch contacts using get contacts api',\n payloadData: {error: '503 Service Unavailable'},\n inputStatusCode: 503,\n expectedData: {error: 'Unable to establish a connection with the server'},\n expectedMessage: FAILURE_MESSAGE,\n expectedStatusCode: 503,\n decryptTextList: [],\n },\n ].map((stat) =>\n Object.assign(stat, {\n toString() {\n /* eslint-disable dot-notation */\n return this['name'];\n },\n })\n );\n\n it.each(errorCodes)('%s', async (codeObj) => {\n const respPayload = {\n statusCode: codeObj.inputStatusCode,\n };\n\n if (codeObj.inputStatusCode === 200) {\n respPayload['body'] = codeObj.payloadData;\n webex.request.mockResolvedValueOnce(respPayload);\n codeObj.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n if (codeObj.scimResponse) {\n webex.request.mockResolvedValueOnce(mockSCIMListResponse);\n }\n } else {\n respPayload['message'] = FAILURE_MESSAGE;\n respPayload['data'] = codeObj.payloadData;\n webex.request.mockRejectedValueOnce(respPayload);\n }\n\n const contactsResponse = await contactClient.getContacts();\n\n if (codeObj.inputStatusCode === 200) {\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toBeCalledTimes(2);\n } else {\n expect(webex.request).toBeCalledTimes(1);\n }\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n if (codeObj.cloudContactPresent) {\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n }\n\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n\n if (codeObj.payloadData) {\n expect(log.log).toHaveBeenCalledWith('Successfully fetched contacts and groups', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n } else {\n expect(log.error).toHaveBeenCalled();\n }\n } else {\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.GET,\n });\n\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(log.error).toHaveBeenCalled();\n }\n\n expect(contactsResponse).toEqual({\n data: expect.any(Object),\n message: codeObj.expectedMessage,\n statusCode: codeObj.expectedStatusCode,\n });\n\n if (codeObj.expectedMessage === SUCCESS_MESSAGE) {\n expect(serviceErrorCodeHandlerSpy).not.toBeCalled();\n } else {\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(\n codeObj.payloadData ? respPayload : expect.any(Error),\n {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n }\n );\n }\n });\n\n it('create a contact group without encryptionKey', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = '';\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText\n .mockResolvedValueOnce('Encrypted Other')\n .mockResolvedValueOnce('Encrypted Top');\n\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Other',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n uri: contactServiceGroupUrl,\n method: 'POST',\n body: {\n displayName: 'Encrypted Top',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n\n expect(log.info).toHaveBeenCalledWith(\n `${METHOD_START_MESSAGE} with displayName: Top Contacts`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(log.info).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.info).toHaveBeenCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toHaveBeenCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n expect(log.log).toHaveBeenCalledWith(`Contact group Top Contacts successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n });\n\n it('create a contact group with existing key info', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockResolvedValue(successResponsePayload);\n\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted Top Contacts');\n const infoSpy = jest.spyOn(log, 'info');\n const contactsResponse = await contactClient.createContactGroup('Top Contacts');\n\n expect(contactsResponse.statusCode).toEqual(201);\n expect(contactsResponse.data.group?.groupId).toBe(mockGroupResponse.groupId);\n expect(infoSpy).toBeCalledWith(`${METHOD_START_MESSAGE} with displayName: Top Contacts`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n expect(log.log).toBeCalledWith(`Contact group Top Contacts successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n });\n expect(infoSpy).not.toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted Top Contacts',\n encryptionKeyUrl: mockContactGroupListOne[0].encryptionKeyUrl,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n });\n\n expect(contactClient['groups'].length).toEqual(2);\n expect(contactClient['groups'][1].displayName).toEqual('Top Contacts');\n });\n\n it('create a contact group with same displayName', async () => {\n contactClient['groups'] = mockContactResponseBodyOne.groups;\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const logSpy = jest.spyOn(log, 'warn');\n const contactsResponse = await contactClient.createContactGroup(mockGroupResponse.displayName);\n\n expect(webex.request).not.toBeCalled();\n expect(contactsResponse.statusCode).toBe(400);\n expect(logSpy).toBeCalledOnceWith(\n `Group name ${mockGroupResponse.displayName} already exists.`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with displayName: ${mockGroupResponse.displayName}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT_GROUP,\n }\n );\n expect(contactClient['groups']).toEqual(mockContactResponseBodyOne.groups);\n });\n\n it('create a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_CLIENT,\n method: 'createContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n const warnSpy = jest.spyOn(log, 'warn');\n const errorSpy = jest.spyOn(log, 'error');\n\n const contactsResponse = await contactClient.createContactGroup('New group');\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n groupType: 'NORMAL',\n schemas: 'urn:cisco:codev:identity:contact:core:1.0',\n },\n });\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with displayName: New group`,\n loggerContext\n );\n expect(warnSpy).toBeCalledTimes(1);\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n expect(errorSpy).toBeCalledTimes(1);\n expect(errorSpy).toHaveBeenNthCalledWith(\n 1,\n Error(`Unable to create contact group: ${failureResponsePayload}`),\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('delete a contact group - service unavailable', async () => {\n const loggerContext = {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n };\n\n contactClient['groups'] = mockContactGroupListOne;\n webex.request.mockRejectedValue(failureResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n const warnSpy = jest.spyOn(log, 'warn');\n const errorSpy = jest.spyOn(log, 'error');\n const contactsResponse = await contactClient.deleteContactGroup(mockGroupResponse.groupId);\n\n expect(contactsResponse.statusCode).toBe(503);\n expect(webex.request).toBeCalledOnceWith({\n method: HTTP_METHODS.DELETE,\n uri: `${contactServiceGroupUrl}/${mockGroupResponse.groupId}`,\n });\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with groupId: ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(log.info).toBeCalledWith(\n `Deleting contact group: ${mockGroupResponse.groupId}`,\n loggerContext\n );\n expect(warnSpy).toBeCalledTimes(1);\n expect(errorSpy).toBeCalledTimes(1);\n expect(uploadLogsSpy).toBeCalledTimes(1);\n expect(errorSpy).toHaveBeenNthCalledWith(\n 1,\n Error(\n `Unable to delete contact group ${mockGroupResponse.groupId}: ${failureResponsePayload}`\n ),\n loggerContext\n );\n expect(warnSpy).toHaveBeenNthCalledWith(\n 1,\n '503 Unable to establish a connection with the server',\n loggerContext\n );\n\n expect(contactClient['groups']).toEqual(mockContactGroupListOne);\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, loggerContext);\n });\n\n it('successful deletion of contact group', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['groups'] = [mockContactGroupListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContactGroup(mockContactGroupListOne[0].groupId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceGroupUrl}/${mockContactGroupListOne[0].groupId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['groups']).toEqual([]);\n\n expect(log.info).toBeCalledWith(\n `Deleting contact group: ${mockContactGroupListOne[0].groupId}`,\n {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n }\n );\n expect(log.log).toBeCalledWith(\n `Contact group ${mockContactGroupListOne[0].groupId} successfully deleted`,\n {\n file: CONTACTS_CLIENT,\n method: 'deleteContactGroup',\n }\n );\n });\n\n it('create a contact with an existing group', async () => {\n const mockContactResponse = mockContactResponseBodyTwo.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request.mockResolvedValue(successResponsePayload);\n webex.internal.encryption.encryptText.mockResolvedValue('Encrypted contact name');\n const infoSpy = jest.spyOn(log, 'info');\n const logSpy = jest.spyOn(log, 'log');\n\n contactClient['groups'] = mockContactGroupListOne;\n contactClient['encryptionKeyUrl'] = mockContactGroupListOne[0].encryptionKeyUrl;\n\n const contact = mockContactListTwo.slice()[0] as Contact;\n\n contact.groups = [];\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(infoSpy).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactType: ${contact.contactType}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n }\n );\n expect(logSpy).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_CLIENT,\n method: 'createNewEncryptionKeyUrl',\n });\n\n expect(logSpy).not.toBeCalledWith('Created a KRO and encryptionKeyUrl', {\n file: CONTACTS_CLIENT,\n method: 'createNewEncryptionKeyUrl',\n });\n expect(infoSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n\n expect(webex.internal.encryption.encryptText).toBeCalledOnceWith(\n mockContactGroupListOne[0].encryptionKeyUrl,\n contact.displayName\n );\n\n expect(webex.request).toBeCalledOnceWith({\n body: {\n ...contact,\n displayName: 'Encrypted contact name',\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n });\n\n logSpy.mockClear();\n\n /* for coverage */\n const result: ContactResponse = await contactClient.createContact(contact);\n\n expect(result.data.contact?.contactId).toBe(mockContactResponse.contactId);\n expect(logSpy).not.toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: 'fetchEncryptionKeyUrl',\n });\n });\n\n it('create a contact without a group and encryptionKey', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[1];\n\n contactClient['groups'] = [];\n contactClient['encryptionKey'] = '';\n contactClient['defaultGroupId'] = '';\n const successContactGroupResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockGroupResponse,\n };\n const successContactResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n\n webex.request\n .mockResolvedValueOnce(successContactGroupResponsePayload)\n .mockResolvedValueOnce(successContactResponsePayload);\n webex.internal.encryption.kms.createUnboundKeys.mockResolvedValue([mockKmsKey]);\n webex.internal.encryption.kms.createResource.mockResolvedValue(mockKmsKey);\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n const contact = {\n contactType: 'CUSTOM',\n } as Contact;\n\n const res = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(201);\n\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n body: {\n displayName: 'Encrypted group name',\n encryptionKeyUrl: mockKmsKey.uri,\n groupType: 'NORMAL',\n schemas: CONTACTS_SCHEMA,\n },\n uri: contactServiceGroupUrl,\n method: HTTP_METHODS.POST,\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n body: {\n contactType: 'CUSTOM',\n encryptionKeyUrl: mockKmsKey.uri,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n schemas: CONTACTS_SCHEMA,\n },\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n });\n expect(webex.internal.encryption.kms.createUnboundKeys).toBeCalledOnceWith({count: 1});\n expect(webex.internal.encryption.kms.createResource).toBeCalledOnceWith({\n keyUris: [mockKmsKey.uri],\n });\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CUSTOM`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(log.info).toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.info).toBeCalledWith('Requesting kms for a new KRO and key', {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_NEW_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toBeCalledWith(`Creating a default group: ${DEFAULT_GROUP_NAME}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.FETCH_ENCRYPTION_KEY_URL,\n });\n expect(log.log).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: 'createContact',\n });\n });\n\n it('create a cloud contact with no existing groups', async () => {\n const mockContactResponse = mockContactResponseBodyOne.contacts[0];\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponse,\n };\n const successResponsePayloadGroup = <WebexRequestPayload>{\n statusCode: 201,\n body: mockContactResponseBodyOne.groups[0],\n };\n\n webex.request\n .mockResolvedValueOnce(successResponsePayloadGroup)\n .mockResolvedValueOnce(successResponsePayload)\n .mockResolvedValueOnce(mockSCIMListResponse);\n\n webex.internal.encryption.encryptText.mockResolvedValueOnce('Encrypted group name');\n\n contactClient['groups'] = [];\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n\n const contact = {\n contactType: 'CLOUD',\n } as Contact;\n\n contact.groups = [];\n\n let res: ContactResponse = await contactClient.createContact(contact);\n\n expect(res.statusCode).toEqual(400);\n expect(res.data.error).toEqual('contactId is required for contactType:CLOUD.');\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CLOUD`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n\n contact.contactId = mockContactResponse.contactId;\n\n res = await contactClient.createContact(contact);\n expect(res.statusCode).toEqual(201);\n expect(res.data.contact?.contactId).toBe(mockContactResponse.contactId);\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toHaveBeenNthCalledWith(1, {\n method: HTTP_METHODS.POST,\n uri: contactServiceGroupUrl,\n body: {\n displayName: 'Encrypted group name',\n groupType: 'NORMAL',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(2, {\n method: HTTP_METHODS.POST,\n uri: contactServiceUrl,\n body: {\n contactId: mockContactResponse.contactId,\n contactType: 'CLOUD',\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n schemas: CONTACTS_SCHEMA,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n },\n });\n expect(webex.request).toHaveBeenNthCalledWith(3, {\n uri: scimUrl,\n method: HTTP_METHODS.GET,\n headers: {\n 'cisco-device-url':\n 'https://wdm-intb.ciscospark.com/wdm/api/v1/devices/c5ae3b86-1bb7-40f1-a6a9-c296ee7e61d5',\n 'spark-user-agent': 'webex-calling/beta',\n },\n });\n\n expect(log.log).toBeCalledWith(`Contact successfully created`, {\n file: CONTACTS_CLIENT,\n method: 'createContact',\n });\n });\n\n it('create a contact - service unavailable', async () => {\n webex.request.mockRejectedValue(failureResponsePayload);\n\n contactClient['groups'] = mockContactGroupListOne.slice();\n contactClient['encryptionKeyUrl'] = mockContactResponseBodyOne.groups[0].encryptionKeyUrl;\n const contact = {\n contactType: 'CLOUD',\n contactId: '801bb994-343b-4f6b-97ae-d13c91d4b877',\n } as Contact;\n\n const res: ContactResponse = await contactClient.createContact(contact);\n\n expect(webex.request).toBeCalledOnceWith({\n uri: contactServiceUrl,\n method: HTTP_METHODS.POST,\n body: {\n ...contact,\n encryptionKeyUrl: mockContactResponseBodyOne.groups[0].encryptionKeyUrl,\n groups: [mockContactGroupListOne[0].groupId],\n schemas: CONTACTS_SCHEMA,\n },\n });\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(res.statusCode).toEqual(503);\n\n expect(log.info).toBeCalledWith(`${METHOD_START_MESSAGE} with contactType: CLOUD`, {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n expect(log.error).toBeCalledWith(Error(`Failed to create contact: ${failureResponsePayload}`), {\n file: CONTACTS_CLIENT,\n method: METHODS.CREATE_CONTACT,\n });\n });\n\n it('successful deletion of contacts', async () => {\n const successResponsePayload = <WebexRequestPayload>{\n statusCode: 204,\n };\n\n contactClient['contacts'] = [mockContactListOne[0]];\n webex.request.mockResolvedValue(successResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(204);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n expect(contactClient['contacts']).toEqual([]);\n\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactId: ${mockContactListOne[0].contactId}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n }\n );\n expect(log.info).toBeCalledWith(`Deleting contact : ${mockContactListOne[0].contactId}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n });\n\n it('delete a contact - service unavailable', async () => {\n contactClient['contacts'] = mockContactListOne;\n\n webex.request.mockRejectedValue(failureResponsePayload);\n const response = await contactClient.deleteContact(mockContactListOne[0].contactId);\n\n expect(response.statusCode).toEqual(503);\n expect(webex.request).toBeCalledOnceWith({\n uri: `${contactServiceUrl}/${mockContactListOne[0].contactId}`,\n method: HTTP_METHODS.DELETE,\n });\n\n expect(serviceErrorCodeHandlerSpy).toBeCalledOnceWith(failureResponsePayload, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n\n expect(contactClient['contacts']).toEqual(mockContactListOne);\n\n expect(log.info).toBeCalledWith(\n `${METHOD_START_MESSAGE} with contactId: ${mockContactListOne[0].contactId}`,\n {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n }\n );\n expect(log.info).toBeCalledWith(`Deleting contact : ${mockContactListOne[0].contactId}`, {\n file: CONTACTS_CLIENT,\n method: METHODS.DELETE_CONTACT,\n });\n });\n\n it('test resolveContacts function for a minimal contact with few details', () => {\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it(\"test resolveContacts function when contactsDataMap list doesn't match resolved list\", () => {\n const mockContact = {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n };\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum, janeDoe: mockContact},\n mockSCIMMinListResponse.body\n );\n\n expect(contact).toEqual([\n {\n firstName: 'Jane',\n lastName: 'Doe',\n contactId: 'janeDoe',\n resolved: false,\n },\n {\n avatarURL: '',\n avatarUrlDomain: undefined,\n contactId: 'userId',\n contactType: 'CLOUD',\n department: undefined,\n displayName: undefined,\n emails: undefined,\n encryptionKeyUrl: 'kms://cisco.com/keys/dcf18f9d-155e-44ff-ad61-c8a69b7103ab',\n firstName: undefined,\n groups: ['1561977e-3443-4ccf-a591-69686275d7d2'],\n lastName: undefined,\n manager: undefined,\n ownerId: 'ownerId',\n phoneNumbers: undefined,\n sipAddresses: undefined,\n resolved: true,\n },\n ]);\n });\n\n it('test resolveContacts function encountering an error', () => {\n const warnSpy = jest.spyOn(log, 'warn');\n\n const contact = contactClient['resolveCloudContacts'](\n {userId: mockContactMinimum},\n mockSCIMMinListResponse\n );\n\n expect(contact).toEqual(null);\n expect(warnSpy).toHaveBeenCalledWith('Error occurred while parsing resolved contacts', {\n file: CONTACTS_CLIENT,\n method: 'resolveCloudContacts',\n });\n });\n\n it('logs error for chunk when scimQuery API call fails in the loop for getContacts', async () => {\n const mockData = errorCodes[0];\n const respPayload = {\n statusCode: mockData.inputStatusCode,\n body: mockData.payloadData,\n };\n webex.request.mockResolvedValueOnce(respPayload).mockRejectedValueOnce({\n ...respPayload,\n statusCode: 503,\n message: FAILURE_MESSAGE,\n data: mockData.payloadData,\n });\n\n mockData.decryptTextList.forEach((text) => {\n webex.internal.encryption.decryptText.mockResolvedValueOnce(text);\n });\n\n const warnSpy = jest.spyOn(log, 'warn');\n const infoSpy = jest.spyOn(log, 'info');\n const logSpy = jest.spyOn(log, 'log');\n\n await contactClient.getContacts();\n\n expect(webex.request).toBeCalledTimes(2);\n expect(warnSpy).toBeCalledTimes(1);\n expect(warnSpy).toBeCalledWith('Error processing contact chunk 0-50', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(infoSpy).toBeCalledWith(METHOD_START_MESSAGE, {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n expect(logSpy).toBeCalledWith('Successfully fetched contacts and groups', {\n file: CONTACTS_CLIENT,\n method: METHODS.GET_CONTACTS,\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -43,7 +43,7 @@ var Eventing = exports.Eventing = /*#__PURE__*/function (_ref) {
|
|
|
43
43
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
44
44
|
args[_key - 1] = arguments[_key];
|
|
45
45
|
}
|
|
46
|
-
_Logger.default.info("".concat(timestamp, " ").concat(_types.LOG_PREFIX.EVENT, ": ").concat(event.toString(), " - event emitted with parameters -> ").concat(args), {
|
|
46
|
+
_Logger.default.info("".concat(timestamp, " ").concat(_types.LOG_PREFIX.EVENT, ": ").concat(event.toString(), " - event emitted with parameters -> ").concat(args, " = "), {
|
|
47
47
|
file: 'Events/impl/index.ts',
|
|
48
48
|
method: 'emit'
|
|
49
49
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_Logger","_types","_createSuper","t","r","_isNativeReflectConstruct","e","o","_getPrototypeOf2","default","s","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Boolean","prototype","valueOf","call","Eventing","exports","_ref","_inherits2","_super","_classCallCheck2","_createClass2","key","value","emit","event","_get2","timestamp","Date","toUTCString","_len","length","args","Array","_key","Logger","info","concat","LOG_PREFIX","EVENT","toString","file","method","_get3","on","listener","off","EventEmitter"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport EventEmitter from 'events';\nimport TypedEmitter, {EventMap} from 'typed-emitter'; // eslint-disable-line import/no-extraneous-dependencies\nimport Logger from '../../Logger';\nimport {LOG_PREFIX} from '../../Logger/types';\n\n/**\n *\n */\nexport class Eventing<T extends EventMap> extends (EventEmitter as {\n new <T extends EventMap>(): TypedEmitter<T>;\n})<T> {\n /**\n * @event\n *\n * @param event - Event that is going ot be emitted.\n * @param args - Parameters that are emitted with the event.\n */\n emit<E extends keyof T>(event: E, ...args: Parameters<T[E]>): boolean {\n const timestamp = new Date().toUTCString();\n\n Logger.info(\n `${timestamp} ${\n LOG_PREFIX.EVENT\n }: ${event.toString()} - event emitted with parameters -> ${args}`,\n {\n file: 'Events/impl/index.ts',\n method: 'emit',\n }\n );\n\n return super.emit(event, ...args);\n }\n\n /**\n * .\n * @event\n *\n * @param event - Event to listen to.\n * @param listener - Callback for event.\n */\n on<E extends keyof T>(event: E, listener: T[E]): this {\n return super.on(event, listener);\n }\n\n /**\n * .\n * @event\n *\n * @param event - Event to remove listener on.\n * @param listener - Callback for event.\n */\n off<E extends keyof T>(event: E, listener: T[E]): this {\n return super.off(event, listener);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAA8C,SAAAG,aAAAC,CAAA,QAAAC,CAAA,GAAAC,yBAAA,6BAAAC,CAAA,EAAAC,CAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,CAAA,OAAAC,CAAA,QAAAM,CAAA,OAAAF,gBAAA,CAAAC,OAAA,QAAAE,WAAA,EAAAL,CAAA,GAAAM,kBAAA,CAAAL,CAAA,EAAAM,SAAA,EAAAH,CAAA,UAAAJ,CAAA,GAAAC,CAAA,CAAAO,KAAA,OAAAD,SAAA,cAAAE,2BAAA,CAAAN,OAAA,QAAAH,CAAA;AAAA,SAAAD,0BAAA,cAAAF,CAAA,IAAAa,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,kBAAA,CAAAI,OAAA,iCAAAb,CAAA,aAAAE,yBAAA,YAAAA,0BAAA,aAAAF,CAAA,UAL9C,iCACA,kDAEsD;AAItD;AACA;AACA;AAFA,IAGaiB,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAAAE,IAAA;EAAA,IAAAC,UAAA,CAAAd,OAAA,EAAAW,QAAA,EAAAE,IAAA;EAAA,IAAAE,MAAA,GAAAtB,YAAA,CAAAkB,QAAA;EAAA,SAAAA,SAAA;IAAA,IAAAK,gBAAA,CAAAhB,OAAA,QAAAW,QAAA;IAAA,OAAAI,MAAA,CAAAV,KAAA,OAAAD,SAAA;EAAA;EAAA,IAAAa,aAAA,CAAAjB,OAAA,EAAAW,QAAA;IAAAO,GAAA;IAAAC,KAAA;IAGnB;AACF;AACA;AACA;AACA;AACA;IACE,SAAAC,KAAwBC,KAAQ,EAAsC;MAAA,IAAAC,KAAA;MACpE,IAAMC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MAAC,SAAAC,IAAA,GAAAtB,SAAA,CAAAuB,MAAA,EADRC,IAAI,OAAAC,KAAA,CAAAH,IAAA,OAAAA,IAAA,WAAAI,IAAA,MAAAA,IAAA,GAAAJ,IAAA,EAAAI,IAAA;QAAJF,IAAI,CAAAE,IAAA,QAAA1B,SAAA,CAAA0B,IAAA;MAAA;MAGvCC,eAAM,CAACC,IAAI,IAAAC,MAAA,CACNV,SAAS,OAAAU,MAAA,CACVC,iBAAU,CAACC,KAAK,QAAAF,MAAA,CACbZ,KAAK,CAACe,QAAQ,CAAC,CAAC,0CAAAH,MAAA,CAAuCL,IAAI,
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_Logger","_types","_createSuper","t","r","_isNativeReflectConstruct","e","o","_getPrototypeOf2","default","s","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Boolean","prototype","valueOf","call","Eventing","exports","_ref","_inherits2","_super","_classCallCheck2","_createClass2","key","value","emit","event","_get2","timestamp","Date","toUTCString","_len","length","args","Array","_key","Logger","info","concat","LOG_PREFIX","EVENT","toString","file","method","_get3","on","listener","off","EventEmitter"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-shadow */\nimport EventEmitter from 'events';\nimport TypedEmitter, {EventMap} from 'typed-emitter'; // eslint-disable-line import/no-extraneous-dependencies\nimport Logger from '../../Logger';\nimport {LOG_PREFIX} from '../../Logger/types';\n\n/**\n *\n */\nexport class Eventing<T extends EventMap> extends (EventEmitter as {\n new <T extends EventMap>(): TypedEmitter<T>;\n})<T> {\n /**\n * @event\n *\n * @param event - Event that is going ot be emitted.\n * @param args - Parameters that are emitted with the event.\n */\n emit<E extends keyof T>(event: E, ...args: Parameters<T[E]>): boolean {\n const timestamp = new Date().toUTCString();\n\n Logger.info(\n `${timestamp} ${\n LOG_PREFIX.EVENT\n }: ${event.toString()} - event emitted with parameters -> ${args} = `,\n {\n file: 'Events/impl/index.ts',\n method: 'emit',\n }\n );\n\n return super.emit(event, ...args);\n }\n\n /**\n * .\n * @event\n *\n * @param event - Event to listen to.\n * @param listener - Callback for event.\n */\n on<E extends keyof T>(event: E, listener: T[E]): this {\n return super.on(event, listener);\n }\n\n /**\n * .\n * @event\n *\n * @param event - Event to remove listener on.\n * @param listener - Callback for event.\n */\n off<E extends keyof T>(event: E, listener: T[E]): this {\n return super.off(event, listener);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/Logger/index.js
CHANGED
|
@@ -201,12 +201,12 @@ var logTrace = function logTrace(message, context) {
|
|
|
201
201
|
/**
|
|
202
202
|
* Can be used to print only errors.
|
|
203
203
|
*
|
|
204
|
-
* @param
|
|
204
|
+
* @param error - Error string .
|
|
205
205
|
* @param context - File and method which called.
|
|
206
206
|
*/
|
|
207
|
-
var logError = function logError(
|
|
207
|
+
var logError = function logError(error, context) {
|
|
208
208
|
if (currentLogLevel >= _types.LOGGING_LEVEL.error) {
|
|
209
|
-
writeToLogger("".concat(format(context, '[ERROR]'), " - !").concat(_types.LOG_PREFIX.ERROR, "!").concat(_types.LOG_PREFIX.MESSAGE, ":").concat(
|
|
209
|
+
writeToLogger("".concat(format(context, '[ERROR]'), " - !").concat(_types.LOG_PREFIX.ERROR, "!").concat(_types.LOG_PREFIX.MESSAGE, ":").concat(error.message), _types.LOGGER.ERROR);
|
|
210
210
|
}
|
|
211
211
|
};
|
|
212
212
|
var setWebexLogger = function setWebexLogger(logger) {
|
package/dist/Logger/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","_types","currentLogLevel","LOGGING_LEVEL","error","webexLogger","console","writeToLogger","message","level","LOGGER","INFO","info","LOG","log","WARN","warn","ERROR","TRACE","trace","format","context","timestamp","Date","toUTCString","concat","REPO_NAME","LOG_PREFIX","FILE","file","METHOD","method","setLogger","module","MESSAGE","getLogLevel","logMessage","logInfo","logWarn","logTrace","logError","errorMsg","setWebexLogger","logger","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {Logger} from '../SDKConnector/types';\nimport {REPO_NAME} from '../CallingClient/constants';\nimport {IMetaContext} from '../common/types';\nimport {LOGGING_LEVEL, LogContext, LOGGER, LOG_PREFIX} from './types';\n\n/*\n * These are the order of log levels :-\n * error - 1\n * warn - 2\n * log - 3\n * info - 4\n * trace - 5\n *\n * Where log level n denotes that level 1 -> level n will be logged.\n */\n\nlet currentLogLevel = LOGGING_LEVEL.error;\n\nlet webexLogger: Logger = console; // Default to console logger\n\n/**\n * A wrapper around console which prints to stderr or stdout\n * based on the level defined.\n *\n * @param message - Log Message to print.\n * @param level - Log level.\n */\nconst writeToLogger = (message: string, level: LOGGER) => {\n switch (level) {\n case LOGGER.INFO:\n webexLogger.info(message);\n break;\n case LOGGER.LOG: {\n webexLogger.log(message);\n break;\n }\n case LOGGER.WARN: {\n webexLogger.warn(message);\n break;\n }\n case LOGGER.ERROR: {\n webexLogger.error(message);\n break;\n }\n case LOGGER.TRACE: {\n webexLogger.trace(message);\n break;\n }\n default: {\n // Since this is internal , we shouldn't reach here\n }\n }\n};\n\n/**\n * Format the Log message as 'timestamp Calling SDK - [level]: file:example.ts - method:methodName - Actual log message'.\n *\n * @param context - File and method.\n * @param level - Log level.\n * @returns - Formatted string.\n */\nconst format = (context: IMetaContext, level: string): string => {\n const timestamp = new Date().toUTCString();\n\n return `${REPO_NAME}: ${timestamp}: ${level}: ${LOG_PREFIX.FILE}:${context.file} - ${LOG_PREFIX.METHOD}:${context.method}`;\n};\n\n/**\n * Used by the Calling Client to initialize the logger module\n * with a certain level.\n *\n * @param level - Log Level.\n */\nconst setLogger = (level: string, module: string) => {\n switch (level) {\n case LOGGER.WARN: {\n currentLogLevel = LOGGING_LEVEL.warn;\n break;\n }\n case LOGGER.LOG: {\n currentLogLevel = LOGGING_LEVEL.log;\n break;\n }\n case LOGGER.INFO: {\n currentLogLevel = LOGGING_LEVEL.info;\n break;\n }\n case LOGGER.TRACE: {\n currentLogLevel = LOGGING_LEVEL.trace;\n break;\n }\n default: {\n currentLogLevel = LOGGING_LEVEL.error;\n }\n }\n\n const message = `Logger initialized for module: ${module} with level: ${currentLogLevel}`;\n\n writeToLogger(\n `${format({file: 'logger.ts', method: 'setLogger'}, '')} - ${LOG_PREFIX.MESSAGE}:${message}`,\n LOGGER.INFO\n );\n};\n\n/**\n * To retrieve the current log level.\n *\n * @returns - Log level.\n */\nconst getLogLevel = (): LOGGER => {\n let level;\n\n switch (currentLogLevel) {\n case LOGGING_LEVEL.warn: {\n level = LOGGER.WARN;\n break;\n }\n case LOGGING_LEVEL.log: {\n level = LOGGER.LOG;\n break;\n }\n case LOGGING_LEVEL.info: {\n level = LOGGER.INFO;\n break;\n }\n case LOGGING_LEVEL.trace: {\n level = LOGGER.TRACE;\n break;\n }\n default: {\n level = LOGGER.ERROR;\n }\n }\n\n return level;\n};\n\n/**\n * Can be used to print only useful information.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logMessage = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.log) {\n writeToLogger(`${format(context, '[LOG]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.LOG);\n }\n};\n\n/**\n * Can be used to print informational messages.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logInfo = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.info) {\n writeToLogger(`${format(context, '[INFO]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.INFO);\n }\n};\n\n/**\n * Can be used to print warning messages.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logWarn = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.warn) {\n writeToLogger(`${format(context, '[WARN]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.WARN);\n }\n};\n\n/**\n * Can be used to print the stack trace of the entire call path.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logTrace = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.trace) {\n writeToLogger(`${format(context, '[TRACE]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.TRACE);\n }\n};\n\n/**\n * Can be used to print only errors.\n *\n * @param errorMsg - Error string .\n * @param context - File and method which called.\n */\nconst logError = (errorMsg: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.error) {\n writeToLogger(\n `${format(context, '[ERROR]')} - !${LOG_PREFIX.ERROR}!${LOG_PREFIX.MESSAGE}:${errorMsg}`,\n LOGGER.ERROR\n );\n }\n};\n\nconst setWebexLogger = (logger: Logger) => {\n if (logger) {\n // if logger is not passed, defaults to console\n webexLogger = logger;\n }\n};\n\nexport default {\n log: logMessage,\n error: logError,\n info: logInfo,\n warn: logWarn,\n trace: logTrace,\n setLogger,\n getLogLevel,\n setWebexLogger,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_constants","require","_types","currentLogLevel","LOGGING_LEVEL","error","webexLogger","console","writeToLogger","message","level","LOGGER","INFO","info","LOG","log","WARN","warn","ERROR","TRACE","trace","format","context","timestamp","Date","toUTCString","concat","REPO_NAME","LOG_PREFIX","FILE","file","METHOD","method","setLogger","module","MESSAGE","getLogLevel","logMessage","logInfo","logWarn","logTrace","logError","setWebexLogger","logger","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {Logger} from '../SDKConnector/types';\nimport {REPO_NAME} from '../CallingClient/constants';\nimport {IMetaContext} from '../common/types';\nimport ExtendedError from '../Errors/catalog/ExtendedError';\nimport {LOGGING_LEVEL, LogContext, LOGGER, LOG_PREFIX} from './types';\n\n/*\n * These are the order of log levels :-\n * error - 1\n * warn - 2\n * log - 3\n * info - 4\n * trace - 5\n *\n * Where log level n denotes that level 1 -> level n will be logged.\n */\n\nlet currentLogLevel = LOGGING_LEVEL.error;\n\nlet webexLogger: Logger = console; // Default to console logger\n\n/**\n * A wrapper around console which prints to stderr or stdout\n * based on the level defined.\n *\n * @param message - Log Message to print.\n * @param level - Log level.\n */\nconst writeToLogger = (message: string, level: LOGGER) => {\n switch (level) {\n case LOGGER.INFO:\n webexLogger.info(message);\n break;\n case LOGGER.LOG: {\n webexLogger.log(message);\n break;\n }\n case LOGGER.WARN: {\n webexLogger.warn(message);\n break;\n }\n case LOGGER.ERROR: {\n webexLogger.error(message);\n break;\n }\n case LOGGER.TRACE: {\n webexLogger.trace(message);\n break;\n }\n default: {\n // Since this is internal , we shouldn't reach here\n }\n }\n};\n\n/**\n * Format the Log message as 'timestamp Calling SDK - [level]: file:example.ts - method:methodName - Actual log message'.\n *\n * @param context - File and method.\n * @param level - Log level.\n * @returns - Formatted string.\n */\nconst format = (context: IMetaContext, level: string): string => {\n const timestamp = new Date().toUTCString();\n\n return `${REPO_NAME}: ${timestamp}: ${level}: ${LOG_PREFIX.FILE}:${context.file} - ${LOG_PREFIX.METHOD}:${context.method}`;\n};\n\n/**\n * Used by the Calling Client to initialize the logger module\n * with a certain level.\n *\n * @param level - Log Level.\n */\nconst setLogger = (level: string, module: string) => {\n switch (level) {\n case LOGGER.WARN: {\n currentLogLevel = LOGGING_LEVEL.warn;\n break;\n }\n case LOGGER.LOG: {\n currentLogLevel = LOGGING_LEVEL.log;\n break;\n }\n case LOGGER.INFO: {\n currentLogLevel = LOGGING_LEVEL.info;\n break;\n }\n case LOGGER.TRACE: {\n currentLogLevel = LOGGING_LEVEL.trace;\n break;\n }\n default: {\n currentLogLevel = LOGGING_LEVEL.error;\n }\n }\n\n const message = `Logger initialized for module: ${module} with level: ${currentLogLevel}`;\n\n writeToLogger(\n `${format({file: 'logger.ts', method: 'setLogger'}, '')} - ${LOG_PREFIX.MESSAGE}:${message}`,\n LOGGER.INFO\n );\n};\n\n/**\n * To retrieve the current log level.\n *\n * @returns - Log level.\n */\nconst getLogLevel = (): LOGGER => {\n let level;\n\n switch (currentLogLevel) {\n case LOGGING_LEVEL.warn: {\n level = LOGGER.WARN;\n break;\n }\n case LOGGING_LEVEL.log: {\n level = LOGGER.LOG;\n break;\n }\n case LOGGING_LEVEL.info: {\n level = LOGGER.INFO;\n break;\n }\n case LOGGING_LEVEL.trace: {\n level = LOGGER.TRACE;\n break;\n }\n default: {\n level = LOGGER.ERROR;\n }\n }\n\n return level;\n};\n\n/**\n * Can be used to print only useful information.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logMessage = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.log) {\n writeToLogger(`${format(context, '[LOG]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.LOG);\n }\n};\n\n/**\n * Can be used to print informational messages.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logInfo = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.info) {\n writeToLogger(`${format(context, '[INFO]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.INFO);\n }\n};\n\n/**\n * Can be used to print warning messages.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logWarn = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.warn) {\n writeToLogger(`${format(context, '[WARN]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.WARN);\n }\n};\n\n/**\n * Can be used to print the stack trace of the entire call path.\n *\n * @param message - Caller emitted string.\n * @param context - File and method which called.\n */\nconst logTrace = (message: string, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.trace) {\n writeToLogger(`${format(context, '[TRACE]')} - ${LOG_PREFIX.MESSAGE}:${message}`, LOGGER.TRACE);\n }\n};\n\n/**\n * Can be used to print only errors.\n *\n * @param error - Error string .\n * @param context - File and method which called.\n */\nconst logError = (error: ExtendedError, context: LogContext) => {\n if (currentLogLevel >= LOGGING_LEVEL.error) {\n writeToLogger(\n `${format(context, '[ERROR]')} - !${LOG_PREFIX.ERROR}!${LOG_PREFIX.MESSAGE}:${error.message}`,\n LOGGER.ERROR\n );\n }\n};\n\nconst setWebexLogger = (logger: Logger) => {\n if (logger) {\n // if logger is not passed, defaults to console\n webexLogger = logger;\n }\n};\n\nexport default {\n log: logMessage,\n error: logError,\n info: logInfo,\n warn: logWarn,\n trace: logTrace,\n setLogger,\n getLogLevel,\n setWebexLogger,\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -42,7 +42,7 @@ describe('Coverage tests for logger', function () {
|
|
|
42
42
|
expect(warnSpy).not.toHaveBeenCalledTimes(1);
|
|
43
43
|
_.default.trace(fakePrint, dummyContext);
|
|
44
44
|
expect(traceSpy).not.toHaveBeenCalledTimes(1);
|
|
45
|
-
_.default.error(fakePrint, dummyContext);
|
|
45
|
+
_.default.error(new Error(fakePrint), dummyContext);
|
|
46
46
|
expect(errorSpy).toHaveBeenCalledTimes(1);
|
|
47
47
|
});
|
|
48
48
|
it('Set the logger and verify the level', function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_","_interopRequireDefault","describe","logLevel","logSpy","jest","spyOn","console","infoSpy","traceSpy","warnSpy","errorSpy","dummyWebexLogger","log","fn","info","warn","error","debug","trace","beforeEach","LOGGER","ERROR","afterEach","mockClear","fakePrint","dummyContext","file","method","it","expect","not","toHaveBeenCalledTimes","toStrictEqual","setLogger","TRACE","getLogLevel","INFO","webexLoggerInfoSpy","setWebexLogger","toHaveBeenCalled"],"sources":["index.test.ts"],"sourcesContent":["import {LOGGER} from './types';\nimport log from '.';\n\ndescribe('Coverage tests for logger', () => {\n let logLevel: LOGGER;\n\n const logSpy = jest.spyOn(console, 'log');\n const infoSpy = jest.spyOn(console, 'info');\n const traceSpy = jest.spyOn(console, 'trace');\n const warnSpy = jest.spyOn(console, 'warn');\n const errorSpy = jest.spyOn(console, 'error');\n const dummyWebexLogger = {\n log: jest.fn(),\n info: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n debug: jest.fn(),\n trace: jest.fn(),\n };\n\n beforeEach(() => {\n logLevel = LOGGER.ERROR;\n });\n\n afterEach(() => {\n logSpy.mockClear();\n traceSpy.mockClear();\n warnSpy.mockClear();\n errorSpy.mockClear();\n infoSpy.mockClear();\n });\n\n const fakePrint = 'Example log statement';\n const dummyContext = {\n file: 'logger.test.ts',\n method: 'dummy',\n };\n\n it('Set the log level to error and verify that all levels are not executed except error', () => {\n log.info(fakePrint, dummyContext);\n expect(infoSpy).not.toHaveBeenCalledTimes(1);\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).not.toHaveBeenCalledTimes(1);\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).not.toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).not.toHaveBeenCalledTimes(1);\n\n log.error(fakePrint, dummyContext);\n expect(errorSpy).toHaveBeenCalledTimes(1);\n });\n\n it('Set the logger and verify the level', () => {\n expect(logLevel).toStrictEqual(LOGGER.ERROR);\n log.setLogger(LOGGER.TRACE);\n expect(log.getLogLevel()).toStrictEqual(LOGGER.TRACE);\n });\n\n it('Set the log level to Info and verify levels below info are executed or not', () => {\n log.setLogger(LOGGER.INFO);\n\n log.info(fakePrint, dummyContext);\n expect(infoSpy).toHaveBeenCalledTimes(2);\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).toHaveBeenCalledTimes(1);\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).not.toHaveBeenCalledTimes(1);\n });\n\n it('Set the log level to Trace and verify that all levels are executed', () => {\n log.setLogger(LOGGER.TRACE);\n\n log.info(fakePrint, dummyContext);\n expect(infoSpy).toHaveBeenCalledTimes(2); // one during initialization and one with the statement\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).toHaveBeenCalledTimes(1); // +1 because both info and log internally use console.log\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).toHaveBeenCalledTimes(1);\n });\n\n it('Set webexLogger and check console log is not called', () => {\n const webexLoggerInfoSpy = jest.spyOn(dummyWebexLogger, 'info');\n log.setLogger(LOGGER.INFO);\n logSpy.mockClear();\n log.setWebexLogger(dummyWebexLogger);\n log.info(fakePrint, dummyContext);\n expect(logSpy).not.toHaveBeenCalled();\n expect(webexLoggerInfoSpy).toHaveBeenCalledTimes(1);\n });\n});\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"names":["_types","require","_","_interopRequireDefault","describe","logLevel","logSpy","jest","spyOn","console","infoSpy","traceSpy","warnSpy","errorSpy","dummyWebexLogger","log","fn","info","warn","error","debug","trace","beforeEach","LOGGER","ERROR","afterEach","mockClear","fakePrint","dummyContext","file","method","it","expect","not","toHaveBeenCalledTimes","Error","toStrictEqual","setLogger","TRACE","getLogLevel","INFO","webexLoggerInfoSpy","setWebexLogger","toHaveBeenCalled"],"sources":["index.test.ts"],"sourcesContent":["import ExtendedError from '../Errors/catalog/ExtendedError';\nimport {LOGGER} from './types';\nimport log from '.';\n\ndescribe('Coverage tests for logger', () => {\n let logLevel: LOGGER;\n\n const logSpy = jest.spyOn(console, 'log');\n const infoSpy = jest.spyOn(console, 'info');\n const traceSpy = jest.spyOn(console, 'trace');\n const warnSpy = jest.spyOn(console, 'warn');\n const errorSpy = jest.spyOn(console, 'error');\n const dummyWebexLogger = {\n log: jest.fn(),\n info: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n debug: jest.fn(),\n trace: jest.fn(),\n };\n\n beforeEach(() => {\n logLevel = LOGGER.ERROR;\n });\n\n afterEach(() => {\n logSpy.mockClear();\n traceSpy.mockClear();\n warnSpy.mockClear();\n errorSpy.mockClear();\n infoSpy.mockClear();\n });\n\n const fakePrint = 'Example log statement';\n const dummyContext = {\n file: 'logger.test.ts',\n method: 'dummy',\n };\n\n it('Set the log level to error and verify that all levels are not executed except error', () => {\n log.info(fakePrint, dummyContext);\n expect(infoSpy).not.toHaveBeenCalledTimes(1);\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).not.toHaveBeenCalledTimes(1);\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).not.toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).not.toHaveBeenCalledTimes(1);\n\n log.error(new Error(fakePrint) as ExtendedError, dummyContext);\n expect(errorSpy).toHaveBeenCalledTimes(1);\n });\n\n it('Set the logger and verify the level', () => {\n expect(logLevel).toStrictEqual(LOGGER.ERROR);\n log.setLogger(LOGGER.TRACE);\n expect(log.getLogLevel()).toStrictEqual(LOGGER.TRACE);\n });\n\n it('Set the log level to Info and verify levels below info are executed or not', () => {\n log.setLogger(LOGGER.INFO);\n\n log.info(fakePrint, dummyContext);\n expect(infoSpy).toHaveBeenCalledTimes(2);\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).toHaveBeenCalledTimes(1);\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).not.toHaveBeenCalledTimes(1);\n });\n\n it('Set the log level to Trace and verify that all levels are executed', () => {\n log.setLogger(LOGGER.TRACE);\n\n log.info(fakePrint, dummyContext);\n expect(infoSpy).toHaveBeenCalledTimes(2); // one during initialization and one with the statement\n\n log.log(fakePrint, dummyContext);\n expect(logSpy).toHaveBeenCalledTimes(1); // +1 because both info and log internally use console.log\n\n log.warn(fakePrint, dummyContext);\n expect(warnSpy).toHaveBeenCalledTimes(1);\n\n log.trace(fakePrint, dummyContext);\n expect(traceSpy).toHaveBeenCalledTimes(1);\n });\n\n it('Set webexLogger and check console log is not called', () => {\n const webexLoggerInfoSpy = jest.spyOn(dummyWebexLogger, 'info');\n log.setLogger(LOGGER.INFO);\n logSpy.mockClear();\n log.setWebexLogger(dummyWebexLogger);\n log.info(fakePrint, dummyContext);\n expect(logSpy).not.toHaveBeenCalled();\n expect(webexLoggerInfoSpy).toHaveBeenCalledTimes(1);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {\n KmsKey,\n KmsResourceObject,\n LogsMetaData,\n PeopleListResponse,\n UploadLogsResponse,\n WebexRequestPayload,\n} from '../common/types';\n/* eslint-disable no-shadow */\n\ntype Listener = (e: string, data?: unknown) => void;\ntype ListenerOff = (e: string) => void;\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type Model = {\n _values: {\n key: string;\n };\n};\n\nexport type ServiceCatalog = {\n serviceGroups: {\n // cSpell:disable\n postauth: [\n {\n _values: {\n name: string;\n hosts: ServiceHost[];\n };\n }\n ];\n /* cSpell:enable */\n };\n};\n\nexport type ClientRegionInfo = {\n attribution: string;\n clientAddress: string;\n clientRegion: string;\n countryCode: string;\n disclaimer: string;\n regionCode: string;\n timezone: string;\n};\n\nexport type Logger = {\n config?: {\n level: string;\n bufferLogLevel: string;\n };\n log: (payload: string) => void;\n error: (payload: string) => void;\n warn: (payload: string) => void;\n info: (payload: string) => void;\n trace: (payload: string) => void;\n debug: (payload: string) => void;\n};\n\n// TODO: is there a way to import bindings from the Webex JS SDK without having to redefine expected methods and structure?\n// This defines the shape for the webex SDK, if a typing doesn't exist, it should be added here\nexport interface WebexSDK {\n // top level primitives/funcs\n config: {fedramp: boolean};\n version: string;\n canAuthorize: boolean;\n credentials: {\n getUserToken: () => Promise<string>;\n };\n ready: boolean;\n request: <T>(payload: WebexRequestPayload) => Promise<T>;\n // internal plugins\n internal: {\n mercury: {\n on: Listener;\n off: ListenerOff;\n connected: boolean;\n connecting: boolean;\n };\n calendar: unknown;\n device: {\n url: string;\n userId: string;\n orgId: string;\n version: string;\n callingBehavior: string;\n features: {\n entitlement: {\n models: Model[];\n };\n };\n };\n encryption: {\n decryptText: (encryptionKeyUrl: string, encryptedData?: string) => Promise<string>;\n encryptText: (encryptionKeyUrl: string, text?: string) => Promise<string>;\n kms: {\n createUnboundKeys: (arg0: {count?: number}) => Promise<KmsKey[]>;\n createResource: (arg0: {keyUris: string[]}) => Promise<KmsResourceObject>;\n bindKey: (arg0: {kroUri: string; keyUri: string}) => Promise<KmsKey>;\n };\n };\n presence: unknown;\n support: {\n submitLogs: (\n metaData: LogsMetaData,\n logs?: string,\n options?: {\n type: 'diff' | 'full';\n }\n ) => Promise<UploadLogsResponse>;\n };\n services: {\n _hostCatalog: Record<string, ServiceHost[]>;\n _serviceUrls: {\n mobius: string;\n identity: string;\n janus: string;\n wdm: string;\n broadworksIdpProxy: string;\n hydra: string;\n mercuryApi: string;\n 'ucmgmt-gateway': string;\n contactsService: string;\n };\n
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {\n KmsKey,\n KmsResourceObject,\n LogsMetaData,\n PeopleListResponse,\n UploadLogsResponse,\n WebexRequestPayload,\n} from '../common/types';\n/* eslint-disable no-shadow */\n\ntype Listener = (e: string, data?: unknown) => void;\ntype ListenerOff = (e: string) => void;\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type Model = {\n _values: {\n key: string;\n };\n};\n\nexport type ServiceCatalog = {\n serviceGroups: {\n // cSpell:disable\n postauth: [\n {\n _values: {\n name: string;\n hosts: ServiceHost[];\n };\n }\n ];\n /* cSpell:enable */\n };\n};\n\nexport type ClientRegionInfo = {\n attribution: string;\n clientAddress: string;\n clientRegion: string;\n countryCode: string;\n disclaimer: string;\n regionCode: string;\n timezone: string;\n};\n\nexport type Logger = {\n config?: {\n level: string;\n bufferLogLevel: string;\n };\n log: (payload: string) => void;\n error: (payload: string) => void;\n warn: (payload: string) => void;\n info: (payload: string) => void;\n trace: (payload: string) => void;\n debug: (payload: string) => void;\n};\n\n// TODO: is there a way to import bindings from the Webex JS SDK without having to redefine expected methods and structure?\n// This defines the shape for the webex SDK, if a typing doesn't exist, it should be added here\nexport interface WebexSDK {\n // top level primitives/funcs\n config: {fedramp: boolean};\n version: string;\n canAuthorize: boolean;\n credentials: {\n getUserToken: () => Promise<string>;\n };\n ready: boolean;\n request: <T>(payload: WebexRequestPayload) => Promise<T>;\n // internal plugins\n internal: {\n mercury: {\n on: Listener;\n off: ListenerOff;\n connected: boolean;\n connecting: boolean;\n };\n calendar: unknown;\n device: {\n url: string;\n userId: string;\n orgId: string;\n version: string;\n callingBehavior: string;\n features: {\n entitlement: {\n models: Model[];\n };\n };\n };\n encryption: {\n decryptText: (encryptionKeyUrl: string, encryptedData?: string) => Promise<string>;\n encryptText: (encryptionKeyUrl: string, text?: string) => Promise<string>;\n kms: {\n createUnboundKeys: (arg0: {count?: number}) => Promise<KmsKey[]>;\n createResource: (arg0: {keyUris: string[]}) => Promise<KmsResourceObject>;\n bindKey: (arg0: {kroUri: string; keyUri: string}) => Promise<KmsKey>;\n };\n };\n presence: unknown;\n support: {\n submitLogs: (\n metaData: LogsMetaData,\n logs?: string,\n options?: {\n type: 'diff' | 'full';\n }\n ) => Promise<UploadLogsResponse>;\n };\n services: {\n _hostCatalog: Record<string, ServiceHost[]>;\n _serviceUrls: {\n mobius: string;\n identity: string;\n janus: string;\n wdm: string;\n broadworksIdpProxy: string;\n hydra: string;\n mercuryApi: string;\n 'ucmgmt-gateway': string;\n contactsService: string;\n };\n fetchClientRegionInfo: () => Promise<ClientRegionInfo>;\n };\n metrics: {\n submitClientMetrics: (name: string, data: unknown) => void;\n };\n };\n // public plugins\n logger: Logger;\n messages: unknown;\n memberships: unknown;\n people: {\n list: (arg: object) => Promise<PeopleListResponse>;\n };\n rooms: unknown;\n teams: unknown;\n}\n\nexport interface ISDKConnector {\n setWebex: (webexInstance: WebexSDK) => void;\n getWebex: () => WebexSDK;\n get: () => ISDKConnector;\n registerListener: <T>(event: string, cb: (data?: T) => unknown) => void;\n unregisterListener: (event: string) => void;\n}\n"],"mappings":"","ignoreList":[]}
|