@webex/calling 3.12.0-mobius-socket.16 → 3.12.0-mobius-socket.18

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.
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_uuid","require","_testUtil","_types","_Logger","_interopRequireDefault","_request","_mobiusSocket","_Metrics","_types2","_wsFeatureFlag","_constants","jest","mock","getMobiusSocketInstance","fn","getMetricManager","isMobiusWssEnabled","v4","describe","webex","mockMobiusSocket","mockMetricManager","infoSpy","logSpy","warnSpy","errorSpy","beforeEach","APIRequest","resetInstance","getTestUtilsWebex","clearAllMocks","connect","mockResolvedValue","undefined","disconnect","sendWssRequest","statusCode","trackingId","data","deviceId","isConnected","mockReturnValue","getConnectedWebSocketUrl","on","off","submitMobiusSocketMetric","uuid","spyOn","log","afterEach","it","apiRequest","getInstance","expect","toBeDefined","toHaveBeenCalledWith","file","method","toThrow","instance1","instance2","toBe","not","createAPIRequest","toBeInstanceOf","result","isSocketEnabled","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","connectToMobiusSocket","sent","toHaveBeenCalled","stop","_callee2","wssUrl","_context2","_callee3","_context3","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","_callee4","connectionError","_context4","statusMessage","response","error","metadata","mockRejectedValue","rejects","toEqual","body","headers","trackingid","stringContaining","MOBIUS_SOCKET_ERROR","any","String","_callee5","minimalError","_context5","_callee6","_context6","disconnectFromMobiusSocket","_callee7","_context7","DISCONNECT","_callee8","options","_context8","code","reason","_callee9","_context9","Error","resolves","_callee0","_context0","_callee1","requestOptions","expectedResponse","_context1","uri","HTTP_METHODS","POST","userId","request","makeRequest","_callee10","_context10","GET","_callee11","_context11","_callee12","_context12","objectContaining","type","MOBIUS_SOCKET_MESSAGE_TYPE","REGISTER","_callee13","_context13","_callee14","_context14","_callee15","_context15","userAgent","authorization","_callee16","_context16","credentials","getUserToken","CALL_HOLD","_callee17","_context17","_callee18","wsResponse","_context18","correlationId","_callee19","wsError","_context19","callback","registerMobiusSocketListener","Function","mockEvent","eventId","eventType","attachedCallback","calls","LISTENER_REGISTERED","unregisterMobiusSocketListener","LISTENER_UNREGISTERED"],"sources":["request.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../common/types';\nimport log from '../../Logger';\nimport {APIRequest, createAPIRequest} from './request';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {getMetricManager} from '../../Metrics';\nimport {METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {MobiusSocketResponse, MobiusAsyncEvent} from './types';\n\n// Mock dependencies\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn(),\n}));\njest.mock('../../Metrics', () => ({\n getMetricManager: jest.fn(),\n}));\njest.mock('./wsFeatureFlag', () => ({\n isMobiusWssEnabled: jest.fn(),\n}));\njest.mock('uuid', () => ({\n v4: jest.fn(),\n}));\n\ndescribe('APIRequest', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMobiusSocket: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMetricManager: any;\n let infoSpy: jest.SpyInstance;\n let logSpy: jest.SpyInstance;\n let warnSpy: jest.SpyInstance;\n let errorSpy: jest.SpyInstance;\n\n beforeEach(() => {\n APIRequest.resetInstance();\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n\n mockMobiusSocket = {\n connect: jest.fn().mockResolvedValue(undefined),\n disconnect: jest.fn().mockResolvedValue(undefined),\n sendWssRequest: jest.fn().mockResolvedValue({\n statusCode: 200,\n trackingId: 'test-tracking-id',\n data: {deviceId: 'test-device-id'},\n }),\n isConnected: jest.fn().mockReturnValue(false),\n getConnectedWebSocketUrl: jest.fn().mockReturnValue('wss://test.webex.com'),\n on: jest.fn(),\n off: jest.fn(),\n };\n\n mockMetricManager = {\n submitMobiusSocketMetric: jest.fn(),\n };\n\n (getMobiusSocketInstance as jest.Mock).mockReturnValue(mockMobiusSocket);\n (getMetricManager as jest.Mock).mockReturnValue(mockMetricManager);\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n (uuid as jest.Mock).mockReturnValue('mock-uuid-12345');\n\n infoSpy = jest.spyOn(log, 'info');\n logSpy = jest.spyOn(log, 'log');\n warnSpy = jest.spyOn(log, 'warn');\n errorSpy = jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('Constructor and singleton pattern', () => {\n it('should create instance with webex config and HTTP transport', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(getMobiusSocketInstance).toHaveBeenCalledWith(webex);\n expect(getMetricManager).toHaveBeenCalledWith(webex);\n expect(isMobiusWssEnabled).toHaveBeenCalledWith(webex);\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: HTTP', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should create instance with webex config and WSS transport when feature flag enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: WSS', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should throw error if webex is missing from config', () => {\n expect(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n APIRequest.getInstance({webex: undefined as any});\n }).toThrow('WebexSDK instance is required');\n\n expect(errorSpy).toHaveBeenCalledWith(\n 'APIRequest instantiation failed: WebexSDK instance is required',\n {\n file: 'REQUEST',\n method: 'constructor',\n }\n );\n });\n\n it('should return same instance on subsequent getInstance() calls', () => {\n const instance1 = APIRequest.getInstance({webex});\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).toBe(instance2);\n });\n\n it('should clear singleton when resetInstance() is called', () => {\n const instance1 = APIRequest.getInstance({webex});\n\n APIRequest.resetInstance();\n\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).not.toBe(instance2);\n });\n });\n\n describe('createAPIRequest factory', () => {\n it('should create APIRequest instance using factory function', () => {\n const apiRequest = createAPIRequest({webex});\n\n expect(apiRequest).toBeDefined();\n expect(apiRequest).toBeInstanceOf(APIRequest);\n });\n });\n\n describe('isSocketEnabled', () => {\n it('should return false when WSS is disabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(false);\n });\n\n it('should return true when WSS is enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(true);\n });\n });\n\n describe('connectToMobiusSocket', () => {\n it('should return immediately if socket is already connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(true);\n mockMobiusSocket.getConnectedWebSocketUrl.mockReturnValue('wss://existing.webex.com');\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.connectToMobiusSocket('wss://test.webex.com');\n\n expect(result).toBe('wss://existing.webex.com');\n expect(mockMobiusSocket.connect).not.toHaveBeenCalled();\n expect(infoSpy).toHaveBeenCalledWith('Mobius WebSocket already connected', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).not.toHaveBeenCalled();\n });\n\n it('should initiate new connection if not connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://test.webex.com/api/v1';\n\n const result = await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(mockMobiusSocket.connect).toHaveBeenCalledWith(wssUrl);\n expect(result).toBe(wssUrl);\n expect(infoSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket not connected, initiating connection',\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n });\n\n it('should submit success metric on successful connection', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket connected successfully', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n });\n\n it('should throw normalized error on connection failure', async () => {\n const connectionError = {\n statusCode: 503,\n statusMessage: 'Service Unavailable',\n trackingId: 'error-tracking-id',\n response: {\n statusCode: 503,\n trackingId: 'error-tracking-id',\n data: {error: 'Connection failed'},\n metadata: {'x-error': 'true'},\n },\n };\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(connectionError);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await expect(apiRequest.connectToMobiusSocket(wssUrl)).rejects.toEqual({\n statusCode: 503,\n body: {error: 'Connection failed'},\n headers: {\n trackingid: 'error-tracking-id',\n 'x-error': 'true',\n },\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Mobius WebSocket connection failed'),\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n expect.any(String)\n );\n });\n\n it('should handle connection error with minimal error object', async () => {\n const minimalError = {statusCode: 500};\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(minimalError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.connectToMobiusSocket('wss://test.webex.com')).rejects.toEqual({\n statusCode: 500,\n body: undefined,\n headers: {\n trackingid: '',\n },\n });\n });\n });\n\n describe('disconnectFromMobiusSocket', () => {\n it('should disconnect successfully', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(undefined);\n expect(infoSpy).toHaveBeenCalledWith('Disconnecting from Mobius WebSocket', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket disconnected successfully', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n });\n\n it('should submit success metric after disconnect', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n\n it('should disconnect with custom options', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const options = {code: 1000, reason: 'Normal closure'};\n\n await apiRequest.disconnectFromMobiusSocket(options);\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(options);\n });\n\n it('should handle disconnect error silently and log warning', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.disconnectFromMobiusSocket()).resolves.not.toThrow();\n\n expect(warnSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket disconnection failed: Error: Disconnect failed',\n {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n }\n );\n });\n\n it('should submit error metric on disconnect failure', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n undefined,\n undefined,\n 'Error: Disconnect failed'\n );\n });\n });\n\n describe('makeRequest - HTTP transport', () => {\n it('should route through webex.request when WSS is disabled', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n const expectedResponse: WebexRequestPayload = {\n statusCode: 200,\n body: {deviceId: 'device-456'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n expect(result).toEqual(expectedResponse);\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via HTTP ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should pass request options unchanged to webex.request', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123',\n method: HTTP_METHODS.GET,\n headers: {'x-custom-header': 'value'},\n };\n webex.request.mockResolvedValue({statusCode: 200});\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n });\n\n it('should return webex.request result directly', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const expectedResponse = {\n statusCode: 404,\n body: {error: 'Not found'},\n headers: {'x-tracking-id': 'track-123'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/test',\n method: HTTP_METHODS.GET,\n });\n\n expect(result).toEqual(expectedResponse);\n });\n });\n\n describe('makeRequest - WebSocket transport', () => {\n beforeEach(() => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n });\n\n it('should derive socket message type from URI and method', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n })\n );\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via WSS ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should throw error if message type is UNKNOWN', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/unrecognized/path',\n method: HTTP_METHODS.POST,\n };\n\n await expect(apiRequest.makeRequest(requestOptions)).rejects.toThrow(\n 'Unknown Mobius Socket message type: UNKNOWN'\n );\n\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Unknown Mobius Socket message type'),\n {\n file: 'REQUEST',\n method: 'makeRequest',\n }\n );\n });\n\n it('should generate tracking ID with webex-js-sdk prefix', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(uuid).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n })\n );\n });\n\n it('should send WSS request with correct payload structure', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n headers: {'x-custom': 'header-value'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n metadata: {\n 'x-custom': 'header-value',\n userAgent: 'webex-calling/beta',\n authorization: '',\n },\n data: {userId: 'user-123'},\n });\n });\n\n it('should get user token for supplementary services (CALL_HOLD)', async () => {\n webex.credentials.getUserToken.mockResolvedValue('Bearer token-abc-123');\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123/services/callhold/hold',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD,\n metadata: expect.objectContaining({\n authorization: 'Bearer token-abc-123',\n }),\n })\n );\n });\n\n it('should not get user token for non-supplementary services', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).not.toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n metadata: expect.objectContaining({\n authorization: '',\n }),\n })\n );\n });\n\n it('should normalize success response to WebexRequestPayload shape', async () => {\n const wsResponse: MobiusSocketResponse = {\n type: 'register.response',\n statusCode: 201,\n statusMessage: 'Created',\n trackingId: 'track-123',\n data: {deviceId: 'device-456', correlationId: 'corr-789'},\n metadata: {'x-response-header': 'value'},\n };\n mockMobiusSocket.sendWssRequest.mockResolvedValue(wsResponse);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n });\n\n expect(result).toEqual({\n statusCode: 201,\n body: {deviceId: 'device-456', correlationId: 'corr-789'},\n headers: {\n trackingid: 'track-123',\n 'x-response-header': 'value',\n },\n });\n expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request succeeded'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should normalize error to WebexRequestPayload shape', async () => {\n const wsError = {\n statusCode: 400,\n statusMessage: 'Bad Request',\n trackingId: 'error-track-456',\n response: {\n statusCode: 400,\n trackingId: 'error-track-456',\n data: {error: 'Invalid request'},\n metadata: {'x-error-code': 'ERR001'},\n },\n };\n mockMobiusSocket.sendWssRequest.mockRejectedValue(wsError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(\n apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n })\n ).rejects.toEqual({\n statusCode: 400,\n body: {error: 'Invalid request'},\n headers: {\n trackingid: 'error-track-456',\n 'x-error-code': 'ERR001',\n },\n });\n\n expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request failed'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n });\n\n describe('registerMobiusSocketListener', () => {\n it('should attach listener to event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('event:async_event', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n });\n\n it('should invoke callback with event data when async event received', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n const mockEvent: MobiusAsyncEvent = {\n type: 'event:async_event',\n eventId: 'evt-123',\n trackingId: 'track-456',\n data: {\n eventType: 'registration.down',\n } as any,\n };\n\n apiRequest.registerMobiusSocketListener(callback);\n\n const attachedCallback = mockMobiusSocket.on.mock.calls[0][1];\n attachedCallback(mockEvent);\n\n expect(callback).toHaveBeenCalledWith(mockEvent);\n });\n\n it('should submit LISTENER_REGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('unregisterMobiusSocketListener', () => {\n it('should detach listener from event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('event:async_event');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n });\n\n it('should submit LISTENER_UNREGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
11
+ var _testUtil = require("../../common/testUtil");
12
+ var _Logger = _interopRequireDefault(require("../../Logger"));
13
+ var _wsFeatureFlag = require("./wsFeatureFlag");
14
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ describe('wsFeatureFlag', function () {
17
+ var webex;
18
+ beforeEach(function () {
19
+ webex = (0, _testUtil.getTestUtilsWebex)();
20
+ jest.clearAllMocks();
21
+ });
22
+ describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', function () {
23
+ it('should export the correct feature key constant', function () {
24
+ expect(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');
25
+ });
26
+ });
27
+ describe('isMobiusWssEnabled', function () {
28
+ var traceSpy;
29
+ beforeEach(function () {
30
+ traceSpy = jest.spyOn(_Logger.default, 'trace');
31
+ });
32
+ it('should return true when feature flag is enabled with boolean true', function () {
33
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
34
+ value: true
35
+ });
36
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
37
+ expect(result).toBe(true);
38
+ expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY);
39
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: true"), {
40
+ file: 'wsFeatureFlag',
41
+ method: 'isMobiusWssEnabled'
42
+ });
43
+ });
44
+ it('should return false when feature flag is disabled with boolean false', function () {
45
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
46
+ value: false
47
+ });
48
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
49
+ expect(result).toBe(false);
50
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
51
+ file: 'wsFeatureFlag',
52
+ method: 'isMobiusWssEnabled'
53
+ });
54
+ });
55
+ it('should return false when feature flag value is undefined', function () {
56
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
57
+ value: undefined
58
+ });
59
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
60
+ expect(result).toBe(false);
61
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
62
+ file: 'wsFeatureFlag',
63
+ method: 'isMobiusWssEnabled'
64
+ });
65
+ });
66
+ it('should return false when feature flag returns null', function () {
67
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);
68
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
69
+ expect(result).toBe(false);
70
+ });
71
+ it('should return false when feature flag value is truthy but not boolean true (number)', function () {
72
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
73
+ value: 1
74
+ });
75
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
76
+ expect(result).toBe(false);
77
+ expect(traceSpy).toHaveBeenCalledWith("Mobius WSS feature flag '".concat(_wsFeatureFlag.WEBRTC_CALLING_OVER_WS_FEATURE_KEY, "' resolved to: false"), {
78
+ file: 'wsFeatureFlag',
79
+ method: 'isMobiusWssEnabled'
80
+ });
81
+ });
82
+ it('should return false when feature flag value is truthy but not boolean true (string)', function () {
83
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
84
+ value: 'true'
85
+ });
86
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
87
+ expect(result).toBe(false);
88
+ });
89
+ it('should return false when feature flag value is truthy but not boolean true (object)', function () {
90
+ webex.internal.device.features.developer.get = jest.fn().mockReturnValue({
91
+ value: {}
92
+ });
93
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webex);
94
+ expect(result).toBe(false);
95
+ });
96
+ it('should return false when webex.internal.device.features is missing', function () {
97
+ var webexWithoutFeatures = _objectSpread(_objectSpread({}, webex), {}, {
98
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
99
+ device: _objectSpread(_objectSpread({}, webex.internal.device), {}, {
100
+ features: undefined
101
+ })
102
+ })
103
+ });
104
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutFeatures);
105
+ expect(result).toBe(false);
106
+ });
107
+ it('should return false when webex.internal.device.features.developer is missing', function () {
108
+ var webexWithoutDeveloper = _objectSpread(_objectSpread({}, webex), {}, {
109
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
110
+ device: _objectSpread(_objectSpread({}, webex.internal.device), {}, {
111
+ features: {
112
+ entitlement: webex.internal.device.features.entitlement,
113
+ developer: undefined
114
+ }
115
+ })
116
+ })
117
+ });
118
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutDeveloper);
119
+ expect(result).toBe(false);
120
+ });
121
+ it('should return false when webex.internal.device is missing', function () {
122
+ var webexWithoutDevice = _objectSpread(_objectSpread({}, webex), {}, {
123
+ internal: _objectSpread(_objectSpread({}, webex.internal), {}, {
124
+ device: undefined
125
+ })
126
+ });
127
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutDevice);
128
+ expect(result).toBe(false);
129
+ });
130
+ it('should return false when webex.internal is missing', function () {
131
+ var webexWithoutInternal = _objectSpread(_objectSpread({}, webex), {}, {
132
+ internal: undefined
133
+ });
134
+ var result = (0, _wsFeatureFlag.isMobiusWssEnabled)(webexWithoutInternal);
135
+ expect(result).toBe(false);
136
+ });
137
+ });
138
+ });
139
+ //# sourceMappingURL=wsFeatureFlag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_testUtil","require","_Logger","_interopRequireDefault","_wsFeatureFlag","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","describe","webex","beforeEach","getTestUtilsWebex","jest","clearAllMocks","it","expect","WEBRTC_CALLING_OVER_WS_FEATURE_KEY","toBe","traceSpy","spyOn","log","internal","device","features","developer","get","fn","mockReturnValue","value","result","isMobiusWssEnabled","toHaveBeenCalledWith","concat","file","method","undefined","webexWithoutFeatures","webexWithoutDeveloper","entitlement","webexWithoutDevice","webexWithoutInternal"],"sources":["wsFeatureFlag.test.ts"],"sourcesContent":["import {getTestUtilsWebex} from '../../common/testUtil';\nimport log from '../../Logger';\nimport {isMobiusWssEnabled, WEBRTC_CALLING_OVER_WS_FEATURE_KEY} from './wsFeatureFlag';\n\ndescribe('wsFeatureFlag', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n\n beforeEach(() => {\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n });\n\n describe('WEBRTC_CALLING_OVER_WS_FEATURE_KEY', () => {\n it('should export the correct feature key constant', () => {\n expect(WEBRTC_CALLING_OVER_WS_FEATURE_KEY).toBe('webrtc-calling-over-ws-CALL-219562');\n });\n });\n\n describe('isMobiusWssEnabled', () => {\n let traceSpy: jest.SpyInstance;\n\n beforeEach(() => {\n traceSpy = jest.spyOn(log, 'trace');\n });\n\n it('should return true when feature flag is enabled with boolean true', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: true});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(true);\n expect(webex.internal.device.features.developer.get).toHaveBeenCalledWith(\n WEBRTC_CALLING_OVER_WS_FEATURE_KEY\n );\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: true`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag is disabled with boolean false', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: false});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is undefined', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: undefined});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag returns null', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue(null);\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (number)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 1});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n expect(traceSpy).toHaveBeenCalledWith(\n `Mobius WSS feature flag '${WEBRTC_CALLING_OVER_WS_FEATURE_KEY}' resolved to: false`,\n {\n file: 'wsFeatureFlag',\n method: 'isMobiusWssEnabled',\n }\n );\n });\n\n it('should return false when feature flag value is truthy but not boolean true (string)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: 'true'});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when feature flag value is truthy but not boolean true (object)', () => {\n webex.internal.device.features.developer.get = jest.fn().mockReturnValue({value: {}});\n\n const result = isMobiusWssEnabled(webex);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features is missing', () => {\n const webexWithoutFeatures = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: undefined,\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutFeatures as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device.features.developer is missing', () => {\n const webexWithoutDeveloper = {\n ...webex,\n internal: {\n ...webex.internal,\n device: {\n ...webex.internal.device,\n features: {\n entitlement: webex.internal.device.features.entitlement,\n developer: undefined,\n },\n },\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDeveloper as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal.device is missing', () => {\n const webexWithoutDevice = {\n ...webex,\n internal: {\n ...webex.internal,\n device: undefined,\n },\n };\n\n const result = isMobiusWssEnabled(webexWithoutDevice as any);\n\n expect(result).toBe(false);\n });\n\n it('should return false when webex.internal is missing', () => {\n const webexWithoutInternal = {\n ...webex,\n internal: undefined,\n };\n\n const result = isMobiusWssEnabled(webexWithoutInternal as any);\n\n expect(result).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}