softphone-vendor-headsets 2.0.0-develop.8 → 2.0.0-develop.9
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/cjs/src/config/i18n.d.ts +2 -0
- package/dist/cjs/src/config/i18n.js +28 -0
- package/dist/cjs/src/config/i18n.js.map +1 -0
- package/dist/cjs/src/library/index.d.ts +8 -0
- package/dist/cjs/src/library/index.js +29 -0
- package/dist/cjs/src/library/index.js.map +1 -0
- package/dist/cjs/src/library/services/headset.d.ts +44 -0
- package/dist/cjs/src/library/services/headset.js +313 -0
- package/dist/cjs/src/library/services/headset.js.map +1 -0
- package/dist/cjs/src/library/services/headset.test.d.ts +1 -0
- package/dist/cjs/src/library/services/headset.test.js +800 -0
- package/dist/cjs/src/library/services/headset.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +45 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +254 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.d.ts +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +569 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts +33 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.js +20 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.d.ts +48 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js +396 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.d.ts +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js +945 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +11 -0
- package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +47 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +51 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.d.ts +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +111 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +352 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +390 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +62 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js +394 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.d.ts +2 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js +983 -0
- package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +42 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js +277 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.d.ts +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +708 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/types.d.ts +40 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/types.js +32 -0
- package/dist/cjs/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.d.ts +49 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js +99 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implemntation.test.d.ts +1 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implemntation.test.js +106 -0
- package/dist/cjs/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -0
- package/dist/cjs/src/library/test-utils.d.ts +16 -0
- package/dist/cjs/src/library/test-utils.js +43 -0
- package/dist/cjs/src/library/test-utils.js.map +1 -0
- package/dist/cjs/src/library/types/call-info.d.ts +4 -0
- package/dist/cjs/src/library/types/call-info.js +3 -0
- package/dist/cjs/src/library/types/call-info.js.map +1 -0
- package/dist/cjs/src/library/types/consumed-headset-events.d.ts +32 -0
- package/dist/cjs/src/library/types/consumed-headset-events.js +18 -0
- package/dist/cjs/src/library/types/consumed-headset-events.js.map +1 -0
- package/dist/cjs/src/library/types/device-info.d.ts +8 -0
- package/dist/cjs/src/library/types/device-info.js +3 -0
- package/dist/cjs/src/library/types/device-info.js.map +1 -0
- package/dist/cjs/src/library/types/emitted-headset-events.d.ts +34 -0
- package/dist/cjs/src/library/types/emitted-headset-events.js +3 -0
- package/dist/cjs/src/library/types/emitted-headset-events.js.map +1 -0
- package/dist/cjs/src/library/types/headset-states.d.ts +10 -0
- package/dist/cjs/src/library/types/headset-states.js +3 -0
- package/dist/cjs/src/library/types/headset-states.js.map +1 -0
- package/dist/cjs/src/library/utils.d.ts +14 -0
- package/dist/cjs/src/library/utils.js +80 -0
- package/dist/cjs/src/library/utils.js.map +1 -0
- package/dist/cjs/src/library/utils.test.d.ts +1 -0
- package/dist/cjs/src/library/utils.test.js +46 -0
- package/dist/cjs/src/library/utils.test.js.map +1 -0
- package/dist/cjs/src/mocks/call.d.ts +11 -0
- package/dist/cjs/src/mocks/call.js +55 -0
- package/dist/cjs/src/mocks/call.js.map +1 -0
- package/dist/cjs/src/mocks/device-service.d.ts +8 -0
- package/dist/cjs/src/mocks/device-service.js +44 -0
- package/dist/cjs/src/mocks/device-service.js.map +1 -0
- package/dist/cjs/src/setupTests.d.ts +1 -0
- package/dist/cjs/src/setupTests.js +8 -0
- package/dist/cjs/src/setupTests.js.map +1 -0
- package/dist/deploy-info.json +560 -2
- package/dist/es/src/config/i18n.d.ts +2 -0
- package/dist/es/src/config/i18n.js +23 -0
- package/dist/es/src/config/i18n.js.map +1 -0
- package/dist/es/src/library/index.d.ts +8 -0
- package/dist/es/src/library/index.js +9 -0
- package/dist/es/src/library/index.js.map +1 -0
- package/dist/es/src/library/services/headset.d.ts +44 -0
- package/dist/es/src/library/services/headset.js +307 -0
- package/dist/es/src/library/services/headset.js.map +1 -0
- package/dist/es/src/library/services/headset.test.d.ts +1 -0
- package/dist/es/src/library/services/headset.test.js +795 -0
- package/dist/es/src/library/services/headset.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +45 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +251 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.d.ts +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +541 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts +33 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/types.js +17 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.d.ts +48 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js +393 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.d.ts +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js +940 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +7 -0
- package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +47 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +48 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.d.ts +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +109 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +352 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +388 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +62 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js +388 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.d.ts +2 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js +978 -0
- package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +42 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js +251 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.d.ts +1 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +680 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/types.d.ts +40 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/types.js +29 -0
- package/dist/es/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implementation.d.ts +49 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js +95 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implemntation.test.d.ts +1 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implemntation.test.js +104 -0
- package/dist/es/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -0
- package/dist/es/src/library/test-utils.d.ts +16 -0
- package/dist/es/src/library/test-utils.js +38 -0
- package/dist/es/src/library/test-utils.js.map +1 -0
- package/dist/es/src/library/types/call-info.d.ts +4 -0
- package/dist/es/src/library/types/call-info.js +2 -0
- package/dist/es/src/library/types/call-info.js.map +1 -0
- package/dist/es/src/library/types/consumed-headset-events.d.ts +32 -0
- package/dist/es/src/library/types/consumed-headset-events.js +15 -0
- package/dist/es/src/library/types/consumed-headset-events.js.map +1 -0
- package/dist/es/src/library/types/device-info.d.ts +8 -0
- package/dist/es/src/library/types/device-info.js +2 -0
- package/dist/es/src/library/types/device-info.js.map +1 -0
- package/dist/es/src/library/types/emitted-headset-events.d.ts +34 -0
- package/dist/es/src/library/types/emitted-headset-events.js +2 -0
- package/dist/es/src/library/types/emitted-headset-events.js.map +1 -0
- package/dist/es/src/library/types/headset-states.d.ts +10 -0
- package/dist/es/src/library/types/headset-states.js +2 -0
- package/dist/es/src/library/types/headset-states.js.map +1 -0
- package/dist/es/src/library/utils.d.ts +14 -0
- package/dist/es/src/library/utils.js +69 -0
- package/dist/es/src/library/utils.js.map +1 -0
- package/dist/es/src/library/utils.test.d.ts +1 -0
- package/dist/es/src/library/utils.test.js +44 -0
- package/dist/es/src/library/utils.test.js.map +1 -0
- package/dist/es/src/mocks/call.d.ts +11 -0
- package/dist/es/src/mocks/call.js +52 -0
- package/dist/es/src/mocks/call.js.map +1 -0
- package/dist/es/src/mocks/device-service.d.ts +8 -0
- package/dist/es/src/mocks/device-service.js +41 -0
- package/dist/es/src/mocks/device-service.js.map +1 -0
- package/dist/es/src/setupTests.d.ts +1 -0
- package/dist/es/src/setupTests.js +6 -0
- package/dist/es/src/setupTests.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,983 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
// import fetchJsonp from 'fetch-jsonp';
|
|
16
|
+
require("whatwg-fetch");
|
|
17
|
+
const plantronics_test_responses_1 = __importDefault(require("./plantronics-test-responses"));
|
|
18
|
+
require("regenerator-runtime");
|
|
19
|
+
const broadcast_channel_1 = require("broadcast-channel");
|
|
20
|
+
const browserama_1 = __importDefault(require("browserama"));
|
|
21
|
+
const test_utils_1 = require("../../../test-utils");
|
|
22
|
+
const plantronics_1 = __importDefault(require("./plantronics"));
|
|
23
|
+
const fetch_jsonp_1 = __importDefault(require("fetch-jsonp"));
|
|
24
|
+
jest.mock('broadcast-channel');
|
|
25
|
+
jest.mock('fetch-jsonp', () => jest.fn());
|
|
26
|
+
const mockPlantronicsHost = 'http://localhost:3000/plantronics';
|
|
27
|
+
const testDevice = {
|
|
28
|
+
ProductName: 'testDevice1',
|
|
29
|
+
};
|
|
30
|
+
const originalFetchFunction = plantronics_1.default.getInstance({ logger: console })._fetch;
|
|
31
|
+
function resetService(plantronicsService) {
|
|
32
|
+
plantronicsService.apiHost = mockPlantronicsHost;
|
|
33
|
+
plantronicsService.vendorName = 'Plantronics';
|
|
34
|
+
plantronicsService.pluginName = 'genesys-cloud-headset-library';
|
|
35
|
+
plantronicsService._deviceInfo = null;
|
|
36
|
+
plantronicsService.activePollingInterval = 2000;
|
|
37
|
+
plantronicsService.connectedDeviceInterval = 6000;
|
|
38
|
+
plantronicsService.disconnectedDeviceInterval = 2000;
|
|
39
|
+
plantronicsService.deviceIdRetryInterval = 2000;
|
|
40
|
+
plantronicsService.isActive = false;
|
|
41
|
+
plantronicsService.isConnected = false;
|
|
42
|
+
plantronicsService.isConnecting = false;
|
|
43
|
+
plantronicsService.disableEventPolling = false;
|
|
44
|
+
plantronicsService.deviceStatusTimer = null;
|
|
45
|
+
}
|
|
46
|
+
function buildMockFetch(response, isOk) {
|
|
47
|
+
return new Promise((resolve) => {
|
|
48
|
+
resolve({
|
|
49
|
+
ok: isOk,
|
|
50
|
+
json: () => {
|
|
51
|
+
return response;
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
let callbackCount = 1;
|
|
57
|
+
describe('PlantronicsService', () => {
|
|
58
|
+
let plantronicsService;
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
plantronicsService = plantronics_1.default.getInstance({ logger: console, createNew: true });
|
|
61
|
+
plantronicsService._fetch = (url) => {
|
|
62
|
+
const fullUrl = `${url}&callback=${callbackCount++}`;
|
|
63
|
+
return fetch(fullUrl, {
|
|
64
|
+
method: 'get',
|
|
65
|
+
headers: {
|
|
66
|
+
"Content-Type": "application/json"
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
describe('instantiation', () => {
|
|
72
|
+
afterEach(() => {
|
|
73
|
+
plantronicsService = null;
|
|
74
|
+
});
|
|
75
|
+
it('should be a singleton', () => {
|
|
76
|
+
const plantronicsService2 = plantronics_1.default.getInstance({ logger: console });
|
|
77
|
+
expect(plantronicsService).not.toBeFalsy();
|
|
78
|
+
expect(plantronicsService2).not.toBeFalsy();
|
|
79
|
+
expect(plantronicsService).toBe(plantronicsService2);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('deviceName', () => {
|
|
83
|
+
it('should return the value of deviceInfo.ProductName', () => {
|
|
84
|
+
plantronicsService._deviceInfo = testDevice;
|
|
85
|
+
const result = plantronicsService.deviceName;
|
|
86
|
+
expect(result).toEqual(testDevice.ProductName);
|
|
87
|
+
});
|
|
88
|
+
it('should return undefined if _deviceInfo is undefined', () => {
|
|
89
|
+
plantronicsService._deviceInfo = undefined;
|
|
90
|
+
const result = plantronicsService.deviceName;
|
|
91
|
+
expect(result).toBeUndefined();
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('vendorName', () => {
|
|
95
|
+
it('should return the expected name', () => {
|
|
96
|
+
const expected = 'Plantronics';
|
|
97
|
+
expect(plantronicsService.vendorName).toEqual(expected);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('deviceLabelMatchesVendor', () => {
|
|
101
|
+
beforeEach(() => {
|
|
102
|
+
plantronicsService = plantronics_1.default.getInstance({ logger: console });
|
|
103
|
+
plantronicsService.logger = test_utils_1.mockLogger;
|
|
104
|
+
});
|
|
105
|
+
it('should return true when the device label contains the string "plantronics"', () => {
|
|
106
|
+
let testLabel = 'plantronics headset';
|
|
107
|
+
let result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
108
|
+
expect(result).toBe(true);
|
|
109
|
+
testLabel = 'A headset PlanTroniCs made';
|
|
110
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
111
|
+
expect(result).toBe(true);
|
|
112
|
+
testLabel = 'A headset of Plantronics';
|
|
113
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
114
|
+
expect(result).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it('should return false when the device label does not contain the string "plantronics"', () => {
|
|
117
|
+
let testLabel = 'standard headset';
|
|
118
|
+
let result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
119
|
+
expect(result).toBe(false);
|
|
120
|
+
testLabel = 'A headset sennheiser made';
|
|
121
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
122
|
+
expect(result).toBe(false);
|
|
123
|
+
testLabel = 'A headset of awesome';
|
|
124
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
125
|
+
expect(result).toBe(false);
|
|
126
|
+
});
|
|
127
|
+
it('should return true when device label contains the string "plt"', () => {
|
|
128
|
+
let testLabel = 'plt: a sandwich';
|
|
129
|
+
let result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
130
|
+
expect(result).toBe(true);
|
|
131
|
+
testLabel = 'test test PlT';
|
|
132
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
133
|
+
expect(result).toBe(true);
|
|
134
|
+
testLabel = 'test pLt test';
|
|
135
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
136
|
+
expect(result).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
it('should return false when device label does not contain the string "plt"', () => {
|
|
139
|
+
const testLabel = 'standard headset';
|
|
140
|
+
const result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
141
|
+
expect(result).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
it('should return true when the device label contains the string "(047f:"', () => {
|
|
144
|
+
let testLabel = '(047f: headset';
|
|
145
|
+
let result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
146
|
+
expect(result).toBe(true);
|
|
147
|
+
testLabel = 'A headset (047f: made';
|
|
148
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
149
|
+
expect(result).toBe(true);
|
|
150
|
+
testLabel = 'A headset of (047f:';
|
|
151
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
152
|
+
expect(result).toBe(true);
|
|
153
|
+
});
|
|
154
|
+
it('should return false when the device label does not contain the string "(047f:"', () => {
|
|
155
|
+
let testLabel = 'standard headset';
|
|
156
|
+
let result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
157
|
+
expect(result).toBe(false);
|
|
158
|
+
testLabel = 'A headset sennheiser made';
|
|
159
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
160
|
+
expect(result).toBe(false);
|
|
161
|
+
testLabel = 'A headset of awesome';
|
|
162
|
+
result = plantronicsService.deviceLabelMatchesVendor(testLabel);
|
|
163
|
+
expect(result).toBe(false);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('pollForCallEvents', () => {
|
|
167
|
+
beforeEach(() => {
|
|
168
|
+
jest.useFakeTimers();
|
|
169
|
+
});
|
|
170
|
+
afterEach(() => {
|
|
171
|
+
jest.runOnlyPendingTimers();
|
|
172
|
+
jest.useRealTimers();
|
|
173
|
+
});
|
|
174
|
+
it('will not call getCallEventsSpy if proper flags are not met', () => {
|
|
175
|
+
const getCallEventsSpy = jest.spyOn(plantronicsService, 'getCallEvents');
|
|
176
|
+
const pollForCallEventsSpy = jest.spyOn(plantronicsService, 'pollForCallEvents');
|
|
177
|
+
plantronicsService.pollForCallEvents();
|
|
178
|
+
pollForCallEventsSpy.mockReset();
|
|
179
|
+
expect(getCallEventsSpy).not.toHaveBeenCalled();
|
|
180
|
+
jest.advanceTimersByTime(plantronicsService.activePollingInterval);
|
|
181
|
+
expect(pollForCallEventsSpy).toHaveBeenCalled();
|
|
182
|
+
});
|
|
183
|
+
it('will call getCallEventsSpy if proper flags are met', () => {
|
|
184
|
+
const getCallEventsSpy = jest.spyOn(plantronicsService, 'getCallEvents');
|
|
185
|
+
plantronicsService.isConnected = true;
|
|
186
|
+
plantronicsService.isActive = true;
|
|
187
|
+
plantronicsService.disableEventPolling = false;
|
|
188
|
+
plantronicsService.pollForCallEvents();
|
|
189
|
+
expect(getCallEventsSpy).toHaveBeenCalled();
|
|
190
|
+
jest.advanceTimersByTime(plantronicsService.activePollingInterval);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
describe('pollForDeviceStatus', () => {
|
|
194
|
+
afterEach(() => {
|
|
195
|
+
jest.useRealTimers();
|
|
196
|
+
});
|
|
197
|
+
it('will not call getDeviceStatusSpy if proper flags are not met', () => {
|
|
198
|
+
plantronicsService.isConnecting = true;
|
|
199
|
+
const getDeviceStatusSpy = jest.spyOn(plantronicsService, 'getDeviceStatus');
|
|
200
|
+
const pollForDeviceStatusSpy = jest.spyOn(plantronicsService, 'pollForDeviceStatus');
|
|
201
|
+
jest.useFakeTimers();
|
|
202
|
+
plantronicsService.pollForDeviceStatus();
|
|
203
|
+
expect(getDeviceStatusSpy).not.toHaveBeenCalled();
|
|
204
|
+
jest.advanceTimersByTime(plantronicsService.disconnectedDeviceInterval);
|
|
205
|
+
expect(pollForDeviceStatusSpy).toHaveBeenCalled();
|
|
206
|
+
});
|
|
207
|
+
it('will call getDeviceStatusSpy if proper flags are met', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
208
|
+
plantronicsService.isConnected = true;
|
|
209
|
+
plantronicsService.isConnecting = false;
|
|
210
|
+
const getDeviceStatusSpy = jest.spyOn(plantronicsService, 'getDeviceStatus');
|
|
211
|
+
const pollForDeviceStatusSpy = jest.spyOn(plantronicsService, 'pollForDeviceStatus');
|
|
212
|
+
jest.useFakeTimers();
|
|
213
|
+
plantronicsService.pollForDeviceStatus();
|
|
214
|
+
expect(getDeviceStatusSpy).toHaveBeenCalled();
|
|
215
|
+
jest.advanceTimersByTime(plantronicsService.disconnectedDeviceInterval);
|
|
216
|
+
expect(pollForDeviceStatusSpy).toHaveBeenCalled();
|
|
217
|
+
}));
|
|
218
|
+
it('will use connectedDeviceInterval if a device is attached', () => {
|
|
219
|
+
plantronicsService.isConnected = true;
|
|
220
|
+
plantronicsService.isConnecting = false;
|
|
221
|
+
const getDeviceStatusSpy = jest.spyOn(plantronicsService, 'getDeviceStatus');
|
|
222
|
+
const pollForDeviceStatusSpy = jest.spyOn(plantronicsService, 'pollForDeviceStatus');
|
|
223
|
+
Object.defineProperty(plantronicsService, 'isDeviceAttached', { get: () => { return true; } });
|
|
224
|
+
jest.useFakeTimers();
|
|
225
|
+
plantronicsService.pollForDeviceStatus();
|
|
226
|
+
expect(getDeviceStatusSpy).toHaveBeenCalled();
|
|
227
|
+
jest.advanceTimersByTime(plantronicsService.connectedDeviceInterval);
|
|
228
|
+
expect(pollForDeviceStatusSpy).toHaveBeenCalled();
|
|
229
|
+
const timeoutSpy = jest.spyOn(window, 'setTimeout');
|
|
230
|
+
plantronicsService.pollForDeviceStatus();
|
|
231
|
+
expect(timeoutSpy).toHaveBeenCalledWith(expect.anything(), plantronicsService.connectedDeviceInterval);
|
|
232
|
+
timeoutSpy.mockRestore();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('callCorrespondingFunction', () => {
|
|
236
|
+
it('will call deviceAnsweredCall', () => {
|
|
237
|
+
const deviceAnsweredCallSpy = jest.spyOn(plantronicsService, 'deviceAnsweredCall');
|
|
238
|
+
plantronicsService.callCorrespondingFunction({
|
|
239
|
+
name: 'AcceptCall',
|
|
240
|
+
code: '1',
|
|
241
|
+
event: {
|
|
242
|
+
CallId: {
|
|
243
|
+
Id: '123456'
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
expect(deviceAnsweredCallSpy).toHaveBeenCalled();
|
|
248
|
+
});
|
|
249
|
+
it('will call deviceRejectedCall', () => {
|
|
250
|
+
plantronicsService.incomingConversationId = 'convoId1234';
|
|
251
|
+
const deviceRejectedCallSpy = jest.spyOn(plantronicsService, 'deviceRejectedCall');
|
|
252
|
+
plantronicsService.callCorrespondingFunction({
|
|
253
|
+
name: 'RejectCall',
|
|
254
|
+
code: '23',
|
|
255
|
+
event: {
|
|
256
|
+
CallId: {
|
|
257
|
+
Id: '123456'
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
expect(deviceRejectedCallSpy).toHaveBeenCalledWith({ conversationId: 'convoId1234', name: 'RejectCall' });
|
|
262
|
+
});
|
|
263
|
+
it('will call deviceEndedCall', () => {
|
|
264
|
+
const deviceEndedCallSpy = jest.spyOn(plantronicsService, 'deviceEndedCall');
|
|
265
|
+
plantronicsService.callCorrespondingFunction({
|
|
266
|
+
name: 'TerminateCall',
|
|
267
|
+
event: {
|
|
268
|
+
CallId: {
|
|
269
|
+
Id: '123456',
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
expect(deviceEndedCallSpy).toHaveBeenCalled();
|
|
274
|
+
});
|
|
275
|
+
it('will call _checkIsActiveTask', () => {
|
|
276
|
+
const _checkIsActiveTaskSpy = jest.spyOn(plantronicsService, '_checkIsActiveTask');
|
|
277
|
+
plantronicsService.callCorrespondingFunction({
|
|
278
|
+
name: 'CallEnded',
|
|
279
|
+
event: {
|
|
280
|
+
CallId: {
|
|
281
|
+
Id: '123456'
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
expect(_checkIsActiveTaskSpy).toHaveBeenCalled();
|
|
286
|
+
});
|
|
287
|
+
it('will call deviceMuteChanged with the proper flag', () => {
|
|
288
|
+
plantronicsService.callMappings = { '123456': 'convo1234' };
|
|
289
|
+
const deviceMuteChangedSpy = jest.spyOn(plantronicsService, 'deviceMuteChanged');
|
|
290
|
+
plantronicsService.callCorrespondingFunction({
|
|
291
|
+
name: 'Mute',
|
|
292
|
+
event: {
|
|
293
|
+
CallId: {
|
|
294
|
+
Id: '123456'
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
expect(deviceMuteChangedSpy).toHaveBeenCalledWith({
|
|
299
|
+
conversationId: 'convo1234',
|
|
300
|
+
event: {
|
|
301
|
+
CallId: {
|
|
302
|
+
Id: '123456'
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
isMuted: true,
|
|
306
|
+
name: 'Mute'
|
|
307
|
+
});
|
|
308
|
+
plantronicsService.callCorrespondingFunction({
|
|
309
|
+
name: 'Unmute',
|
|
310
|
+
event: {
|
|
311
|
+
CallId: {
|
|
312
|
+
Id: '123456'
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
expect(deviceMuteChangedSpy).toHaveBeenCalledWith({
|
|
317
|
+
conversationId: 'convo1234',
|
|
318
|
+
event: {
|
|
319
|
+
CallId: {
|
|
320
|
+
Id: '123456'
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
isMuted: false,
|
|
324
|
+
name: 'Unmute'
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
it('will call deviceHoldStatusChanged with the proper flag', () => {
|
|
328
|
+
plantronicsService.callMappings = { '123456': 'convo1234' };
|
|
329
|
+
const deviceHoldStatusChangedSpy = jest.spyOn(plantronicsService, 'deviceHoldStatusChanged');
|
|
330
|
+
plantronicsService.callCorrespondingFunction({
|
|
331
|
+
name: 'HoldCall',
|
|
332
|
+
event: {
|
|
333
|
+
CallId: {
|
|
334
|
+
Id: '123456'
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
expect(deviceHoldStatusChangedSpy).toHaveBeenCalledWith({
|
|
339
|
+
conversationId: 'convo1234',
|
|
340
|
+
event: {
|
|
341
|
+
CallId: {
|
|
342
|
+
Id: '123456'
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
holdRequested: true,
|
|
346
|
+
name: 'HoldCall'
|
|
347
|
+
});
|
|
348
|
+
plantronicsService.callCorrespondingFunction({
|
|
349
|
+
name: 'ResumeCall',
|
|
350
|
+
event: {
|
|
351
|
+
CallId: {
|
|
352
|
+
Id: '123456'
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
expect(deviceHoldStatusChangedSpy).toHaveBeenCalledWith({
|
|
357
|
+
conversationId: 'convo1234',
|
|
358
|
+
event: {
|
|
359
|
+
CallId: {
|
|
360
|
+
Id: '123456'
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
holdRequested: false,
|
|
364
|
+
name: 'ResumeCall'
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
it('calls deviceEventLogs when no valid event was passed in', () => {
|
|
368
|
+
const deviceEventLogsSpy = jest.spyOn(plantronicsService, 'deviceEventLogs');
|
|
369
|
+
plantronicsService.callCorrespondingFunction({
|
|
370
|
+
name: 'Test',
|
|
371
|
+
event: {
|
|
372
|
+
CallId: {
|
|
373
|
+
Id: '123456'
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
expect(deviceEventLogsSpy).toHaveBeenCalled();
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
describe('check various endpoint calls', () => {
|
|
381
|
+
Object.defineProperty(window.navigator, 'hid', { get: () => ({
|
|
382
|
+
getDevices: () => { return []; }
|
|
383
|
+
}) });
|
|
384
|
+
Object.defineProperty(window.navigator, 'locks', { get: () => ({}) });
|
|
385
|
+
window.BroadcastChannel = broadcast_channel_1.BroadcastChannel;
|
|
386
|
+
it('connects properly with a clean state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
387
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
388
|
+
if (url.includes('/SessionManager/Register')) {
|
|
389
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.Register.default, true);
|
|
390
|
+
}
|
|
391
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
392
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.IsActive.default, true);
|
|
393
|
+
}
|
|
394
|
+
if (url.includes('/UserPreference/SetDefaultSoftphone')) {
|
|
395
|
+
return buildMockFetch(plantronics_test_responses_1.default.UserPreference.SetDefaultSoftPhone.default, true);
|
|
396
|
+
}
|
|
397
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
398
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
399
|
+
}
|
|
400
|
+
if (url.includes('/CallServices/CallManagerState')) {
|
|
401
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallManagerState.default, true);
|
|
402
|
+
}
|
|
403
|
+
return buildMockFetch({}, true);
|
|
404
|
+
});
|
|
405
|
+
yield plantronicsService.connect();
|
|
406
|
+
expect(plantronicsService.isConnected).toBeTruthy();
|
|
407
|
+
expect(plantronicsService.isActive).toBeFalsy();
|
|
408
|
+
expect(plantronicsService.isConnecting).toBeFalsy();
|
|
409
|
+
}), 30000);
|
|
410
|
+
it('builds an endpoint for incoming calls', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
411
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
412
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
413
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
414
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
415
|
+
}
|
|
416
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
417
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
418
|
+
}
|
|
419
|
+
return buildMockFetch({}, true);
|
|
420
|
+
});
|
|
421
|
+
let callInfo = { conversationId: 'convoId123', contactName: 'Dio Brando' };
|
|
422
|
+
plantronicsService['_createCallMapping'] = jest.fn().mockReturnValue(12345678);
|
|
423
|
+
const conversationIdString = `"Id":"${12345678}"`;
|
|
424
|
+
const contactNameString = `"Name":"${callInfo.contactName}"`;
|
|
425
|
+
const endpointParams = `?name=${plantronicsService.pluginName}&tones=Unknown&route=ToHeadset`;
|
|
426
|
+
let completeEndpoint = endpointParams;
|
|
427
|
+
completeEndpoint += `&callID={${encodeURI(conversationIdString)}}`;
|
|
428
|
+
completeEndpoint += `&contact={${encodeURI(contactNameString)}}`;
|
|
429
|
+
yield plantronicsService.incomingCall(callInfo);
|
|
430
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
431
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/IncomingCall${completeEndpoint}`);
|
|
432
|
+
resetService(plantronicsService);
|
|
433
|
+
completeEndpoint = endpointParams;
|
|
434
|
+
completeEndpoint += `&callID={${encodeURI(conversationIdString)}}`;
|
|
435
|
+
callInfo = { conversationId: 'convoId123' };
|
|
436
|
+
yield plantronicsService.incomingCall(callInfo);
|
|
437
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
438
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/IncomingCall${completeEndpoint}`);
|
|
439
|
+
resetService(plantronicsService);
|
|
440
|
+
try {
|
|
441
|
+
callInfo = { contactName: 'Dio Brando' };
|
|
442
|
+
yield plantronicsService.incomingCall(callInfo);
|
|
443
|
+
}
|
|
444
|
+
catch (err) {
|
|
445
|
+
expect(plantronicsService.isActive).toBe(false);
|
|
446
|
+
expect(err).toBeDefined();
|
|
447
|
+
}
|
|
448
|
+
}));
|
|
449
|
+
it('builds an endpoint for outgoing calls', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
450
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
451
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
452
|
+
if (url.includes('/CallServices/OutgoingCall')) {
|
|
453
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.OutgoingCall.default, true);
|
|
454
|
+
}
|
|
455
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
456
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
457
|
+
}
|
|
458
|
+
return buildMockFetch({}, true);
|
|
459
|
+
});
|
|
460
|
+
let callInfo = { conversationId: 'convoId123', contactName: 'Dio Brando' };
|
|
461
|
+
plantronicsService['_createCallMapping'] = jest.fn().mockReturnValue(12345678);
|
|
462
|
+
const conversationIdString = `"Id":"12345678"`;
|
|
463
|
+
const contactNameString = `"Name":"${callInfo.contactName}"`;
|
|
464
|
+
const endpointParams = `?name=${plantronicsService.pluginName}&tones=Unknown&route=ToHeadset`;
|
|
465
|
+
let completeEndpoint = endpointParams;
|
|
466
|
+
completeEndpoint += `&callID={${encodeURI(conversationIdString)}}`;
|
|
467
|
+
completeEndpoint += `&contact={${encodeURI(contactNameString)}}`;
|
|
468
|
+
yield plantronicsService.outgoingCall(Object.assign({}, callInfo));
|
|
469
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
470
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/OutgoingCall${completeEndpoint}`);
|
|
471
|
+
resetService(plantronicsService);
|
|
472
|
+
completeEndpoint = endpointParams;
|
|
473
|
+
completeEndpoint += `&callID={${encodeURI(conversationIdString)}}`;
|
|
474
|
+
callInfo = { conversationId: 'convoId123' };
|
|
475
|
+
yield plantronicsService.outgoingCall(Object.assign({}, callInfo));
|
|
476
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
477
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/OutgoingCall${completeEndpoint}`);
|
|
478
|
+
resetService(plantronicsService);
|
|
479
|
+
try {
|
|
480
|
+
callInfo = { contactName: 'Dio Brando' };
|
|
481
|
+
yield plantronicsService.outgoingCall(Object.assign({}, callInfo));
|
|
482
|
+
}
|
|
483
|
+
catch (err) {
|
|
484
|
+
expect(plantronicsService.isActive).toBe(false);
|
|
485
|
+
expect(err).toBeDefined();
|
|
486
|
+
}
|
|
487
|
+
}));
|
|
488
|
+
it('builds an endpoint for answering a call', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
489
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
490
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
491
|
+
if (url.includes('/CallServices/AnswerCall')) {
|
|
492
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.AnswerCall.default, true);
|
|
493
|
+
}
|
|
494
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
495
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
496
|
+
}
|
|
497
|
+
return buildMockFetch({}, true);
|
|
498
|
+
});
|
|
499
|
+
plantronicsService.callMappings = {
|
|
500
|
+
'convoId123': '12345678'
|
|
501
|
+
};
|
|
502
|
+
const conversationIdString = encodeURI(`"Id":"12345678"`);
|
|
503
|
+
let completeEndpoint = `?name=${plantronicsService.pluginName}`;
|
|
504
|
+
completeEndpoint += `&callID={${conversationIdString}}`;
|
|
505
|
+
yield plantronicsService.answerCall('convoId123');
|
|
506
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
507
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/AnswerCall${completeEndpoint}`);
|
|
508
|
+
}));
|
|
509
|
+
it('builds an endpoint for terminating a call', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
510
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
511
|
+
const getCallEventsSpy = jest.spyOn(plantronicsService, 'getCallEvents');
|
|
512
|
+
const _checkIsActiveTaskSpy = jest.spyOn(plantronicsService, '_checkIsActiveTask');
|
|
513
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
514
|
+
if (url.includes('/CallServices/TerminateCall')) {
|
|
515
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.TerminateCall.default, true);
|
|
516
|
+
}
|
|
517
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
518
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
519
|
+
}
|
|
520
|
+
return buildMockFetch({}, true);
|
|
521
|
+
});
|
|
522
|
+
const conversationId = 'myConvoId12345';
|
|
523
|
+
const callId = 555123;
|
|
524
|
+
plantronicsService.callMappings = {
|
|
525
|
+
[conversationId]: callId,
|
|
526
|
+
[callId]: conversationId
|
|
527
|
+
};
|
|
528
|
+
const conversationIdString = encodeURI(`"Id":"${callId}"`);
|
|
529
|
+
let completeEndpoint = `?name=${plantronicsService.pluginName}`;
|
|
530
|
+
completeEndpoint += `&callID={${conversationIdString}}`;
|
|
531
|
+
yield plantronicsService.endCall(conversationId);
|
|
532
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/TerminateCall${completeEndpoint}`);
|
|
533
|
+
expect(getCallEventsSpy).toHaveBeenCalled();
|
|
534
|
+
expect(_checkIsActiveTaskSpy).toHaveBeenCalled();
|
|
535
|
+
}));
|
|
536
|
+
it('calls endCall an appropriate number of times for endAllCalls', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
537
|
+
const endCallSpy = jest.spyOn(plantronicsService, 'endCall');
|
|
538
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
539
|
+
if (url.includes('/CallServices/CallManagerState')) {
|
|
540
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallManagerState.callsInProgress, true);
|
|
541
|
+
}
|
|
542
|
+
return buildMockFetch({}, true);
|
|
543
|
+
});
|
|
544
|
+
yield plantronicsService.endAllCalls();
|
|
545
|
+
expect(endCallSpy).toHaveBeenCalledTimes(2);
|
|
546
|
+
}));
|
|
547
|
+
it('properly calls endCall in the case of call rejection', () => {
|
|
548
|
+
plantronicsService.incomingConversationId = 'convoId1234';
|
|
549
|
+
const plantronicsEndCallSpy = jest.spyOn(plantronicsService, 'endCall');
|
|
550
|
+
plantronicsService.rejectCall('convoId1234');
|
|
551
|
+
expect(plantronicsService.incomingConversationId).toBe(null);
|
|
552
|
+
expect(plantronicsEndCallSpy).toHaveBeenCalledWith('convoId1234');
|
|
553
|
+
});
|
|
554
|
+
it('calls _makeRequestTask wth proper endpoint for mute', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
555
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
556
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
557
|
+
if (url.includes('/CallServices/MuteCall')) {
|
|
558
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.MuteCall[url.includes('&muted=true') ? 'mute' : 'unmute'], true);
|
|
559
|
+
}
|
|
560
|
+
return buildMockFetch({}, true);
|
|
561
|
+
});
|
|
562
|
+
yield plantronicsService.setMute(true);
|
|
563
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/MuteCall?name=${plantronicsService.pluginName}&muted=${true}`);
|
|
564
|
+
yield plantronicsService.setMute(false);
|
|
565
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/MuteCall?name=${plantronicsService.pluginName}&muted=${false}`);
|
|
566
|
+
}));
|
|
567
|
+
it('calls _makeRequestTask with proper endpoint for hold', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
568
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
569
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
570
|
+
if (url.includes('/CallServices/HoldCall')) {
|
|
571
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.HoldCall.default, true);
|
|
572
|
+
}
|
|
573
|
+
if (url.includes('/CallServices/ResumeCall')) {
|
|
574
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.ResumeCall.default, true);
|
|
575
|
+
}
|
|
576
|
+
return buildMockFetch({}, true);
|
|
577
|
+
});
|
|
578
|
+
plantronicsService.callMappings = {
|
|
579
|
+
"convoId123": '12345678'
|
|
580
|
+
};
|
|
581
|
+
const conversationIdString = encodeURI(`"Id":"12345678"`);
|
|
582
|
+
let completeEndpoint = `?name=${plantronicsService.pluginName}`;
|
|
583
|
+
completeEndpoint += `&callID={${conversationIdString}}`;
|
|
584
|
+
yield plantronicsService.setHold('convoId123', true);
|
|
585
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/HoldCall${completeEndpoint}`);
|
|
586
|
+
yield plantronicsService.setHold('convoId123', false);
|
|
587
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/CallServices/ResumeCall${completeEndpoint}`);
|
|
588
|
+
}));
|
|
589
|
+
it('checkIsActiveTask', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
590
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
591
|
+
if (url.includes('/CallServices/CallManagerState')) {
|
|
592
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallManagerState.callsInProgress, true);
|
|
593
|
+
}
|
|
594
|
+
return buildMockFetch({}, true);
|
|
595
|
+
});
|
|
596
|
+
yield plantronicsService._checkIsActiveTask();
|
|
597
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
598
|
+
}));
|
|
599
|
+
it('catches the error during _getActiveCalls', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
600
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
601
|
+
if (url.includes('/CallServices/CallManagerState')) {
|
|
602
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallManagerState.errorState, true);
|
|
603
|
+
}
|
|
604
|
+
return buildMockFetch({}, true);
|
|
605
|
+
});
|
|
606
|
+
plantronicsService.logger.info = jest.fn();
|
|
607
|
+
const result = yield plantronicsService._getActiveCalls();
|
|
608
|
+
expect(plantronicsService.logger.info).toHaveBeenCalledWith('Error making request for active calls', plantronics_test_responses_1.default.CallServices.CallManagerState.errorState);
|
|
609
|
+
expect(result).toStrictEqual([]);
|
|
610
|
+
}));
|
|
611
|
+
it('catches the error during getDeviceStatus', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
612
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
613
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
614
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
615
|
+
}
|
|
616
|
+
return buildMockFetch({}, true);
|
|
617
|
+
});
|
|
618
|
+
plantronicsService.logger.info = jest.fn();
|
|
619
|
+
yield plantronicsService.getDeviceStatus();
|
|
620
|
+
expect(plantronicsService.logger.info).toHaveBeenCalledWith('Error making request for device status', plantronics_test_responses_1.default.DeviceServices.Info.errorState);
|
|
621
|
+
}));
|
|
622
|
+
it('if noDeviceError is true, do not log', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
623
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
624
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
625
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.noDeviceErrorState, true);
|
|
626
|
+
}
|
|
627
|
+
return buildMockFetch({}, true);
|
|
628
|
+
});
|
|
629
|
+
plantronicsService.logger.info = jest.fn();
|
|
630
|
+
yield plantronicsService.getDeviceStatus();
|
|
631
|
+
expect(plantronicsService.logger.info).not.toHaveBeenCalledWith('Error making request for device status', plantronics_test_responses_1.default.DeviceServices.Info.errorState);
|
|
632
|
+
}));
|
|
633
|
+
it('handles scenarios for getCallEvents function', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
634
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
635
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
636
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
637
|
+
}
|
|
638
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
639
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
640
|
+
}
|
|
641
|
+
return buildMockFetch({}, true);
|
|
642
|
+
});
|
|
643
|
+
plantronicsService.isActive = true;
|
|
644
|
+
plantronicsService.isConnected = true;
|
|
645
|
+
}));
|
|
646
|
+
});
|
|
647
|
+
describe('getCallEvents', () => {
|
|
648
|
+
beforeEach(() => {
|
|
649
|
+
jest.restoreAllMocks();
|
|
650
|
+
jest.clearAllMocks();
|
|
651
|
+
});
|
|
652
|
+
it('should answer from headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
653
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
654
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
655
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
656
|
+
}
|
|
657
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
658
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.AnsweredCall, true);
|
|
659
|
+
}
|
|
660
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
661
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
662
|
+
}
|
|
663
|
+
return buildMockFetch({}, true);
|
|
664
|
+
});
|
|
665
|
+
plantronicsService.isActive = true;
|
|
666
|
+
plantronicsService.isConnected = true;
|
|
667
|
+
plantronicsService.getCallEvents();
|
|
668
|
+
const deviceAnswered = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceAnsweredCall');
|
|
669
|
+
yield deviceAnswered;
|
|
670
|
+
}));
|
|
671
|
+
it('should mute from headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
672
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
673
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
674
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
675
|
+
}
|
|
676
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
677
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.MuteCall, true);
|
|
678
|
+
}
|
|
679
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
680
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
681
|
+
}
|
|
682
|
+
return buildMockFetch({}, true);
|
|
683
|
+
});
|
|
684
|
+
plantronicsService.isActive = true;
|
|
685
|
+
plantronicsService.isConnected = true;
|
|
686
|
+
plantronicsService.getCallEvents();
|
|
687
|
+
const deviceMuted = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceMuteChanged');
|
|
688
|
+
yield deviceMuted;
|
|
689
|
+
}));
|
|
690
|
+
it('should unmute from headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
691
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
692
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
693
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
694
|
+
}
|
|
695
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
696
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.UnmuteCall, true);
|
|
697
|
+
}
|
|
698
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
699
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
700
|
+
}
|
|
701
|
+
return buildMockFetch({}, true);
|
|
702
|
+
});
|
|
703
|
+
plantronicsService.isActive = true;
|
|
704
|
+
plantronicsService.isConnected = true;
|
|
705
|
+
plantronicsService.getCallEvents();
|
|
706
|
+
const deviceUnmuted = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceMuteChanged');
|
|
707
|
+
yield deviceUnmuted;
|
|
708
|
+
}));
|
|
709
|
+
it('should hold from the headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
710
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
711
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
712
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
713
|
+
}
|
|
714
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
715
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.HoldCall, true);
|
|
716
|
+
}
|
|
717
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
718
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
719
|
+
}
|
|
720
|
+
return buildMockFetch({}, true);
|
|
721
|
+
});
|
|
722
|
+
plantronicsService.isActive = true;
|
|
723
|
+
plantronicsService.isConnected = true;
|
|
724
|
+
plantronicsService.getCallEvents();
|
|
725
|
+
const deviceHeld = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceHoldStatusChanged');
|
|
726
|
+
yield deviceHeld;
|
|
727
|
+
}));
|
|
728
|
+
it('should resume from the headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
729
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
730
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
731
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
732
|
+
}
|
|
733
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
734
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.ResumeCall, true);
|
|
735
|
+
}
|
|
736
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
737
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
738
|
+
}
|
|
739
|
+
return buildMockFetch({}, true);
|
|
740
|
+
});
|
|
741
|
+
plantronicsService.isActive = true;
|
|
742
|
+
plantronicsService.isConnected = true;
|
|
743
|
+
plantronicsService.getCallEvents();
|
|
744
|
+
const deviceResumed = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceHoldStatusChanged');
|
|
745
|
+
yield deviceResumed;
|
|
746
|
+
}));
|
|
747
|
+
it('should terminate the call from the headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
748
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
749
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
750
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
751
|
+
}
|
|
752
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
753
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.TerminateCall, true);
|
|
754
|
+
}
|
|
755
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
756
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
757
|
+
}
|
|
758
|
+
return buildMockFetch({}, true);
|
|
759
|
+
});
|
|
760
|
+
plantronicsService.isActive = true;
|
|
761
|
+
plantronicsService.isConnected = true;
|
|
762
|
+
plantronicsService.getCallEvents();
|
|
763
|
+
const deviceTerminated = (0, test_utils_1.eventValidation)(plantronicsService, 'deviceEndedCall');
|
|
764
|
+
yield deviceTerminated;
|
|
765
|
+
}));
|
|
766
|
+
it('should log an error if something goes wrong during _makeRequestTask', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
767
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
768
|
+
if (url.includes('/CallServices/IncomingCall')) {
|
|
769
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.IncomingCall.default, true);
|
|
770
|
+
}
|
|
771
|
+
if (url.includes('/CallServices/CallEvents')) {
|
|
772
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallEvents.TerminateCall, true);
|
|
773
|
+
}
|
|
774
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
775
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.errorState, true);
|
|
776
|
+
}
|
|
777
|
+
return buildMockFetch({}, true);
|
|
778
|
+
});
|
|
779
|
+
plantronicsService.isConnected = true;
|
|
780
|
+
plantronicsService.isActive = true;
|
|
781
|
+
plantronics_1.default['instance'] = null;
|
|
782
|
+
const loggerInfoSpy = jest.spyOn(plantronicsService.logger, 'info');
|
|
783
|
+
yield plantronicsService.getCallEvents();
|
|
784
|
+
expect(loggerInfoSpy).toHaveBeenCalledWith('Error making request for call events', expect.any(Error));
|
|
785
|
+
}));
|
|
786
|
+
it('should log a message if an unexpected event is received', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
787
|
+
plantronicsService.isActive = true;
|
|
788
|
+
plantronicsService.isConnected = true;
|
|
789
|
+
const loggerInfoSpy = jest.spyOn(plantronicsService.logger, 'info');
|
|
790
|
+
jest.spyOn(plantronicsService, '_makeRequestTask').mockResolvedValueOnce(plantronics_test_responses_1.default.CallServices.CallManagerState.unknownEvent);
|
|
791
|
+
yield plantronicsService.getCallEvents();
|
|
792
|
+
expect(loggerInfoSpy).toHaveBeenCalledWith('Unknown call event from headset', { event: plantronics_test_responses_1.default.CallServices.CallManagerState.unknownEvent.Result[0] });
|
|
793
|
+
}));
|
|
794
|
+
});
|
|
795
|
+
describe('connect function', () => {
|
|
796
|
+
it('handles all scenarios appropriately for Register endpoint', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
797
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
798
|
+
if (url.includes('/SessionManager/Register')) {
|
|
799
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.Register.errorState, true);
|
|
800
|
+
}
|
|
801
|
+
});
|
|
802
|
+
return expect(plantronicsService.connect()).rejects.toEqual(plantronics_test_responses_1.default.SessionManager.Register.errorState);
|
|
803
|
+
}));
|
|
804
|
+
it('handles all scenarios appropriately for isActive endpoint', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
805
|
+
plantronicsService.logger.debug = jest.fn();
|
|
806
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
807
|
+
if (url.includes('/SessionManager/Register')) {
|
|
808
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.Register.default, true);
|
|
809
|
+
}
|
|
810
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
811
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.IsActive.errorState, true);
|
|
812
|
+
}
|
|
813
|
+
});
|
|
814
|
+
try {
|
|
815
|
+
yield plantronicsService.connect();
|
|
816
|
+
}
|
|
817
|
+
catch (err) {
|
|
818
|
+
expect(plantronicsService.logger.debug).toHaveBeenCalledWith('Is Active', plantronics_test_responses_1.default.SessionManager.IsActive.errorState);
|
|
819
|
+
}
|
|
820
|
+
}));
|
|
821
|
+
it('handles all scenarios appropriately for getActiveCalls endpoint', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
822
|
+
plantronicsService.logger.info = jest.fn();
|
|
823
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
824
|
+
if (url.includes('/SessionManager/Register')) {
|
|
825
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.Register.default, true);
|
|
826
|
+
}
|
|
827
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
828
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.IsActive.default, true);
|
|
829
|
+
}
|
|
830
|
+
if (url.includes('/UserPreference/SetDefaultSoftphone')) {
|
|
831
|
+
return buildMockFetch(plantronics_test_responses_1.default.UserPreference.SetDefaultSoftPhone.default, true);
|
|
832
|
+
}
|
|
833
|
+
if (url.includes('/DeviceServices/Info')) {
|
|
834
|
+
return buildMockFetch(plantronics_test_responses_1.default.DeviceServices.Info.default, true);
|
|
835
|
+
}
|
|
836
|
+
if (url.includes('/CallServices/CallManagerState')) {
|
|
837
|
+
return buildMockFetch(plantronics_test_responses_1.default.CallServices.CallManagerState.callsInProgress, true);
|
|
838
|
+
}
|
|
839
|
+
return buildMockFetch({}, true);
|
|
840
|
+
});
|
|
841
|
+
yield plantronicsService.connect();
|
|
842
|
+
expect(plantronicsService.isActive).toBe(true);
|
|
843
|
+
expect(plantronicsService.logger.info).toHaveBeenCalledWith('Currently active calls in the session');
|
|
844
|
+
}));
|
|
845
|
+
it('logs an error message if we are unable to connect the headset', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
846
|
+
const errorLoggerSpy = jest.spyOn(plantronicsService.logger, 'error');
|
|
847
|
+
const testIsActiveEvent = {
|
|
848
|
+
Description: 'Is Active',
|
|
849
|
+
Result: true,
|
|
850
|
+
Type: 2,
|
|
851
|
+
Type_Name: 'Bool',
|
|
852
|
+
isError: false
|
|
853
|
+
};
|
|
854
|
+
jest.spyOn(plantronicsService, '_makeRequestTask')
|
|
855
|
+
.mockResolvedValueOnce(plantronics_test_responses_1.default.SessionManager.Register.default)
|
|
856
|
+
.mockResolvedValueOnce(testIsActiveEvent)
|
|
857
|
+
.mockRejectedValueOnce({ handled: true });
|
|
858
|
+
yield plantronicsService.connect();
|
|
859
|
+
expect(errorLoggerSpy).toHaveBeenCalledWith('Unable to properly connect headset');
|
|
860
|
+
}));
|
|
861
|
+
it('returns empty array if makeRequestTask resolves to undefined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
862
|
+
jest.spyOn(plantronicsService, '_makeRequestTask').mockResolvedValueOnce(undefined);
|
|
863
|
+
const getActiveCallsResult = yield plantronicsService._getActiveCalls();
|
|
864
|
+
expect(getActiveCallsResult).toStrictEqual([]);
|
|
865
|
+
}));
|
|
866
|
+
});
|
|
867
|
+
describe('_makeRequest function', () => {
|
|
868
|
+
beforeEach(() => {
|
|
869
|
+
Object.defineProperty(browserama_1.default, 'isFirefox', { get: () => true });
|
|
870
|
+
});
|
|
871
|
+
it('handles error from endpoint with 404 status and isRetry', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
872
|
+
plantronicsService.isConnected = true;
|
|
873
|
+
plantronicsService.isActive = true;
|
|
874
|
+
const disconnectSpy = jest.spyOn(plantronicsService, 'disconnect');
|
|
875
|
+
plantronicsService.logger.info = jest.fn();
|
|
876
|
+
const isActiveResponseWithStatus = Object.assign(Object.assign({}, plantronics_test_responses_1.default.SessionManager.IsActive.default), { status: 404, 'Type_Name': 'Error' });
|
|
877
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
878
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
879
|
+
return buildMockFetch(isActiveResponseWithStatus, true);
|
|
880
|
+
}
|
|
881
|
+
});
|
|
882
|
+
try {
|
|
883
|
+
yield plantronicsService._makeRequest(`/SessionManager/IsActive?name=${plantronicsService.pluginName}&active=true`, true);
|
|
884
|
+
}
|
|
885
|
+
catch (err) {
|
|
886
|
+
expect(plantronicsService.isConnected).toBe(false);
|
|
887
|
+
expect(disconnectSpy).toHaveBeenCalled();
|
|
888
|
+
expect(plantronicsService.logger.info).toHaveBeenCalledWith(err);
|
|
889
|
+
}
|
|
890
|
+
}));
|
|
891
|
+
it('handles error from endpoint with 404 status and !isRetry', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
892
|
+
plantronicsService.isConnected = true;
|
|
893
|
+
plantronicsService.isActive = true;
|
|
894
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask');
|
|
895
|
+
const isActiveResponseWithStatus = Object.assign(Object.assign({}, plantronics_test_responses_1.default.SessionManager.IsActive.default), { status: 404, 'Type_Name': 'Error' });
|
|
896
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
897
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
898
|
+
return buildMockFetch(isActiveResponseWithStatus, true);
|
|
899
|
+
}
|
|
900
|
+
});
|
|
901
|
+
try {
|
|
902
|
+
yield plantronicsService._makeRequestTask(`/SessionManager/IsActive?name=${plantronicsService.pluginName}&active=true`);
|
|
903
|
+
}
|
|
904
|
+
catch (err) {
|
|
905
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/SessionManager/IsActive?name=${plantronicsService.pluginName}&active=true`, true);
|
|
906
|
+
}
|
|
907
|
+
}));
|
|
908
|
+
it('handles browersama.isFirefox true error case', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
909
|
+
plantronicsService.isConnected = true;
|
|
910
|
+
plantronicsService.isActive = true;
|
|
911
|
+
const isActiveResponseWithStatus = Object.assign(Object.assign({}, plantronics_test_responses_1.default.SessionManager.IsActive.default), { status: 418, 'Type_Name': 'Error' });
|
|
912
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
913
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
914
|
+
return buildMockFetch(isActiveResponseWithStatus, true);
|
|
915
|
+
}
|
|
916
|
+
});
|
|
917
|
+
try {
|
|
918
|
+
yield plantronicsService._makeRequest(`/SessionManager/IsActive?name=${plantronicsService.pluginName}&active=true`, false);
|
|
919
|
+
}
|
|
920
|
+
catch (err) {
|
|
921
|
+
expect(plantronicsService.errorCode).toBe('browser');
|
|
922
|
+
expect(plantronicsService.disableRetry).toBe(true);
|
|
923
|
+
}
|
|
924
|
+
}));
|
|
925
|
+
it('handles successful return but no plantronics instance', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
926
|
+
plantronicsService.isConnected = true;
|
|
927
|
+
plantronicsService.isActive = true;
|
|
928
|
+
plantronics_1.default['instance'] = null;
|
|
929
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
930
|
+
if (url.includes('/SessionManager/IsActive')) {
|
|
931
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.IsActive.default, true);
|
|
932
|
+
}
|
|
933
|
+
});
|
|
934
|
+
const noInstanceError = new Error('Application destroyed.');
|
|
935
|
+
try {
|
|
936
|
+
yield plantronicsService._makeRequest(`/SessionManager/IsActive?name=${plantronicsService.pluginName}&active=true`, false);
|
|
937
|
+
}
|
|
938
|
+
catch (err) {
|
|
939
|
+
expect(err).toStrictEqual(noInstanceError);
|
|
940
|
+
}
|
|
941
|
+
}));
|
|
942
|
+
});
|
|
943
|
+
describe('disconnect function', () => {
|
|
944
|
+
it('calls makeRequestTask if the implementation is connected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
945
|
+
plantronicsService.isConnected = true;
|
|
946
|
+
const _makeRequestTaskSpy = jest.spyOn(plantronicsService, '_makeRequestTask').mockResolvedValue(null);
|
|
947
|
+
yield plantronicsService.disconnect();
|
|
948
|
+
expect(_makeRequestTaskSpy).toHaveBeenCalledWith(`/SessionManager/UnRegister?name=${plantronicsService.pluginName}`);
|
|
949
|
+
}));
|
|
950
|
+
it('sets the flags to the proper values after promise resolution', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
951
|
+
plantronicsService.isConnected = true;
|
|
952
|
+
const clearTimeoutsSpy = jest.spyOn(plantronicsService, 'clearTimeouts');
|
|
953
|
+
jest.spyOn(plantronicsService, '_fetch').mockImplementation((url) => {
|
|
954
|
+
if (url.includes('/SessionManager/UnRegister')) {
|
|
955
|
+
return buildMockFetch(plantronics_test_responses_1.default.SessionManager.UnRegister.default, true);
|
|
956
|
+
}
|
|
957
|
+
});
|
|
958
|
+
yield plantronicsService.disconnect();
|
|
959
|
+
expect(plantronicsService.isConnected).toBe(false);
|
|
960
|
+
expect(plantronicsService._deviceInfo).toBeNull();
|
|
961
|
+
expect(clearTimeoutsSpy).toHaveBeenCalled();
|
|
962
|
+
expect(plantronicsService.isActive).toBe(false);
|
|
963
|
+
}));
|
|
964
|
+
});
|
|
965
|
+
describe('_fetch', () => {
|
|
966
|
+
it('should call the fetchJsonp function with the proper URL', () => {
|
|
967
|
+
plantronicsService._fetch = originalFetchFunction;
|
|
968
|
+
console.log(plantronicsService._fetch('/test'));
|
|
969
|
+
plantronicsService._fetch('/test');
|
|
970
|
+
expect(fetch_jsonp_1.default).toHaveBeenCalledWith('/test');
|
|
971
|
+
});
|
|
972
|
+
});
|
|
973
|
+
describe('_createCallMapping', () => {
|
|
974
|
+
it('should populate the callMappings value in the service', () => {
|
|
975
|
+
const returnedValue = plantronicsService['_createCallMapping']('convoId123');
|
|
976
|
+
expect(plantronicsService.callMappings).toStrictEqual({
|
|
977
|
+
[returnedValue]: 'convoId123',
|
|
978
|
+
'convoId123': returnedValue
|
|
979
|
+
});
|
|
980
|
+
});
|
|
981
|
+
});
|
|
982
|
+
});
|
|
983
|
+
//# sourceMappingURL=plantronics.test.js.map
|