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,680 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import SennheiserService from './sennheiser';
|
|
11
|
+
import * as utils from '../../../utils';
|
|
12
|
+
import { mockLogger, createMockWebSocket } from '../../../test-utils';
|
|
13
|
+
import { SennheiserEvents, SennheiserEventTypes } from './types';
|
|
14
|
+
describe('SennheiserService', () => {
|
|
15
|
+
let sennheiserService;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
sennheiserService = SennheiserService.getInstance({ logger: console, createNew: true });
|
|
18
|
+
sennheiserService.logger = mockLogger;
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
jest.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
describe('instantiation', () => {
|
|
24
|
+
it('should be a singleton', () => {
|
|
25
|
+
const sennheiserService2 = SennheiserService.getInstance({ logger: console });
|
|
26
|
+
expect(sennheiserService).not.toBeFalsy();
|
|
27
|
+
expect(sennheiserService2).not.toBeFalsy();
|
|
28
|
+
expect(sennheiserService).toBe(sennheiserService2);
|
|
29
|
+
});
|
|
30
|
+
it('should have a connectTimeout value of 5000', () => {
|
|
31
|
+
expect(sennheiserService.connectTimeout).toBe(5000);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('deviceName', () => {
|
|
35
|
+
it('should return null if deviceInfo is null', () => {
|
|
36
|
+
sennheiserService.deviceInfo = null;
|
|
37
|
+
const result = sennheiserService.deviceName;
|
|
38
|
+
expect(result).toBeNull();
|
|
39
|
+
});
|
|
40
|
+
it('should return the name of the device if deviceInfo is not null', () => {
|
|
41
|
+
const ProductName = 'fake device';
|
|
42
|
+
sennheiserService.deviceInfo = { ProductName };
|
|
43
|
+
const result = sennheiserService.deviceName;
|
|
44
|
+
expect(result).toEqual(ProductName);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('isDeviceAttached', () => {
|
|
48
|
+
it('should return true if deviceInfo is defined', () => {
|
|
49
|
+
sennheiserService.deviceInfo = { ProductName: 'fakeDevice' };
|
|
50
|
+
const result = sennheiserService.isDeviceAttached;
|
|
51
|
+
expect(result).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
it('should return false if deviceInfo is undefined or null', () => {
|
|
54
|
+
sennheiserService.deviceInfo = null;
|
|
55
|
+
expect(sennheiserService.isDeviceAttached).toBe(false);
|
|
56
|
+
sennheiserService.deviceInfo = undefined;
|
|
57
|
+
expect(sennheiserService.isDeviceAttached).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('deviceLabelMatchesVendor', () => {
|
|
61
|
+
it('should return true when the device label contains the string "sennheiser"', () => {
|
|
62
|
+
let testLabel = 'sennheiser headset';
|
|
63
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
64
|
+
expect(result).toBe(true);
|
|
65
|
+
testLabel = 'A headset SennHeiseR made';
|
|
66
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
67
|
+
expect(result).toBe(true);
|
|
68
|
+
testLabel = 'A headset of Sennheiser';
|
|
69
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
70
|
+
expect(result).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('should return false when the device label does not contain the string "sennheiser"', () => {
|
|
73
|
+
let testLabel = 'standard headset';
|
|
74
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
75
|
+
expect(result).toBe(false);
|
|
76
|
+
testLabel = 'A headset plantronics made';
|
|
77
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
78
|
+
expect(result).toBe(false);
|
|
79
|
+
testLabel = 'A headset of awesome';
|
|
80
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
81
|
+
expect(result).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it('should return true when the device label contains the string "senn"', () => {
|
|
84
|
+
let testLabel = 'senn headset';
|
|
85
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
86
|
+
expect(result).toBe(true);
|
|
87
|
+
testLabel = 'A headset SeNN made';
|
|
88
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
89
|
+
expect(result).toBe(true);
|
|
90
|
+
testLabel = 'A headset of Senn';
|
|
91
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
92
|
+
expect(result).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
it('should return false when the device label does not contain the string "senn"', () => {
|
|
95
|
+
let testLabel = 'standard headset';
|
|
96
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
97
|
+
expect(result).toBe(false);
|
|
98
|
+
testLabel = 'A headset plantronics made';
|
|
99
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
100
|
+
expect(result).toBe(false);
|
|
101
|
+
testLabel = 'A headset of awesome';
|
|
102
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
103
|
+
expect(result).toBe(false);
|
|
104
|
+
});
|
|
105
|
+
it('should return true when the device label contains the string "epos"', () => {
|
|
106
|
+
let testLabel = 'EPOS headset';
|
|
107
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
108
|
+
expect(result).toBe(true);
|
|
109
|
+
testLabel = 'A headset EpOs made';
|
|
110
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
111
|
+
expect(result).toBe(true);
|
|
112
|
+
testLabel = 'A headset of ePoS';
|
|
113
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
114
|
+
expect(result).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
it('should return false when the device label does not contain the string "epos"', () => {
|
|
117
|
+
let testLabel = 'standard headset';
|
|
118
|
+
let result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
119
|
+
expect(result).toBe(false);
|
|
120
|
+
testLabel = 'A headset plantronics made';
|
|
121
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
122
|
+
expect(result).toBe(false);
|
|
123
|
+
testLabel = 'A headset of awesome';
|
|
124
|
+
result = sennheiserService.deviceLabelMatchesVendor(testLabel);
|
|
125
|
+
expect(result).toBe(false);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('disconnect', () => {
|
|
129
|
+
beforeEach(() => {
|
|
130
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
131
|
+
});
|
|
132
|
+
it('should not call _sendMessage if the service is not connected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
|
+
sennheiserService.isConnected = false;
|
|
134
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
135
|
+
yield sennheiserService.disconnect();
|
|
136
|
+
expect(sennheiserService._sendMessage).not.toHaveBeenCalled();
|
|
137
|
+
}));
|
|
138
|
+
it('should call _sendMessage with the correct payload when the service is connected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
+
sennheiserService.isConnected = true;
|
|
140
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
141
|
+
const expectedPayload = {
|
|
142
|
+
Event: SennheiserEvents.TerminateConnection,
|
|
143
|
+
EventType: SennheiserEventTypes.Request,
|
|
144
|
+
};
|
|
145
|
+
yield sennheiserService.disconnect();
|
|
146
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
147
|
+
}));
|
|
148
|
+
});
|
|
149
|
+
describe('setMute', () => {
|
|
150
|
+
beforeEach(() => {
|
|
151
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
152
|
+
});
|
|
153
|
+
it('should call _sendMessage with a payload using SennheiserEvents.MuteFromApp when the value argument is defined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
154
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
155
|
+
const expectedPayload = {
|
|
156
|
+
Event: SennheiserEvents.MuteFromApp,
|
|
157
|
+
EventType: SennheiserEventTypes.Request,
|
|
158
|
+
};
|
|
159
|
+
yield sennheiserService.setMute(true);
|
|
160
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
161
|
+
}));
|
|
162
|
+
it('should call _sendMessage with a payload using SennheiserEvents.UnmuteFromApp when the value argument is defined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
163
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
164
|
+
const value = null;
|
|
165
|
+
const expectedPayload = {
|
|
166
|
+
Event: SennheiserEvents.UnmuteFromApp,
|
|
167
|
+
EventType: SennheiserEventTypes.Request,
|
|
168
|
+
};
|
|
169
|
+
yield sennheiserService.setMute(value);
|
|
170
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
171
|
+
}));
|
|
172
|
+
});
|
|
173
|
+
describe('setHold', () => {
|
|
174
|
+
beforeEach(() => {
|
|
175
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
176
|
+
});
|
|
177
|
+
it('should call _sendMessage with a payload using SennheiserEvents.Hold when the value argument is defined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
178
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
179
|
+
const conversationId = '23f897b';
|
|
180
|
+
const expectedPayload = {
|
|
181
|
+
Event: SennheiserEvents.Hold,
|
|
182
|
+
EventType: SennheiserEventTypes.Request,
|
|
183
|
+
CallID: conversationId
|
|
184
|
+
};
|
|
185
|
+
yield sennheiserService.setHold(conversationId, true);
|
|
186
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
187
|
+
}));
|
|
188
|
+
it('should call _sendMessage with a payload using SennheiserEvents.Resume when the value argument is defined', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
189
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
190
|
+
const value = null;
|
|
191
|
+
const conversationId = '23f897b';
|
|
192
|
+
const expectedPayload = {
|
|
193
|
+
Event: SennheiserEvents.Resume,
|
|
194
|
+
EventType: SennheiserEventTypes.Request,
|
|
195
|
+
CallID: conversationId
|
|
196
|
+
};
|
|
197
|
+
yield sennheiserService.setHold(conversationId, value);
|
|
198
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
199
|
+
}));
|
|
200
|
+
});
|
|
201
|
+
describe('incomingCall', () => {
|
|
202
|
+
beforeEach(() => {
|
|
203
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
204
|
+
});
|
|
205
|
+
it('should call _sendMessage with a payload using SennheiserEvents.IncomingCall and the generated callId', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
206
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
207
|
+
const callInfo = {
|
|
208
|
+
contactName: 'Ted Danson',
|
|
209
|
+
conversationId: '23f897b'
|
|
210
|
+
};
|
|
211
|
+
// Run Test
|
|
212
|
+
yield sennheiserService.incomingCall(callInfo);
|
|
213
|
+
// Get generated call mapping to create expected payload
|
|
214
|
+
// const generatedCallId = sennheiserService.callMappings[callInfo.conversationId];
|
|
215
|
+
const expectedPayload = {
|
|
216
|
+
Event: SennheiserEvents.IncomingCall,
|
|
217
|
+
EventType: SennheiserEventTypes.Request,
|
|
218
|
+
CallID: callInfo.conversationId
|
|
219
|
+
};
|
|
220
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
221
|
+
}));
|
|
222
|
+
});
|
|
223
|
+
describe('answerCall', () => {
|
|
224
|
+
beforeEach(() => {
|
|
225
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
226
|
+
});
|
|
227
|
+
it('should call _sendMessage with a payload using SennheiserEvents.CallEnded', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
228
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
229
|
+
const conversationId = '23f897b';
|
|
230
|
+
const expectedPayload = {
|
|
231
|
+
Event: SennheiserEvents.IncomingCallAccepted,
|
|
232
|
+
EventType: SennheiserEventTypes.Request,
|
|
233
|
+
CallID: conversationId,
|
|
234
|
+
};
|
|
235
|
+
yield sennheiserService.answerCall(conversationId);
|
|
236
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
237
|
+
}));
|
|
238
|
+
});
|
|
239
|
+
describe('rejectCall', () => {
|
|
240
|
+
beforeEach(() => {
|
|
241
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
242
|
+
});
|
|
243
|
+
it('should call _sendMessage with a payload using SennheiserEvents.CallEnded', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
244
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
245
|
+
const conversationId = '23f897b';
|
|
246
|
+
const expectedPayload = {
|
|
247
|
+
Event: SennheiserEvents.IncomingCallRejected,
|
|
248
|
+
EventType: SennheiserEventTypes.Request,
|
|
249
|
+
CallID: conversationId
|
|
250
|
+
};
|
|
251
|
+
yield sennheiserService.rejectCall(conversationId);
|
|
252
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
253
|
+
}));
|
|
254
|
+
});
|
|
255
|
+
describe('outgoingCall', () => {
|
|
256
|
+
beforeEach(() => {
|
|
257
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
258
|
+
});
|
|
259
|
+
it('should call _sendMessage with a payload using SennheiserEvents.OutgoingCall', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
260
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
261
|
+
const callInfo = {
|
|
262
|
+
contactName: 'Joe Fixit',
|
|
263
|
+
conversationId: '23f897b'
|
|
264
|
+
};
|
|
265
|
+
// Run Test
|
|
266
|
+
yield sennheiserService.outgoingCall(callInfo);
|
|
267
|
+
// Get generated call mapping to create expected payload
|
|
268
|
+
// const generatedCallId = sennheiserService.callMappings[callInfo.conversationId];
|
|
269
|
+
const expectedPayload = {
|
|
270
|
+
Event: SennheiserEvents.OutgoingCall,
|
|
271
|
+
EventType: SennheiserEventTypes.Request,
|
|
272
|
+
CallID: callInfo.conversationId
|
|
273
|
+
};
|
|
274
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
275
|
+
}));
|
|
276
|
+
});
|
|
277
|
+
describe('endCall', () => {
|
|
278
|
+
beforeEach(() => {
|
|
279
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
280
|
+
});
|
|
281
|
+
it('should call _sendMessage with a payload using SennheiserEvents.CallEnded', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
282
|
+
jest.spyOn(sennheiserService, '_sendMessage');
|
|
283
|
+
const conversationId = '23f897b';
|
|
284
|
+
const expectedPayload = {
|
|
285
|
+
Event: SennheiserEvents.CallEnded,
|
|
286
|
+
EventType: SennheiserEventTypes.Request,
|
|
287
|
+
CallID: conversationId
|
|
288
|
+
};
|
|
289
|
+
yield sennheiserService.endCall(conversationId);
|
|
290
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
291
|
+
}));
|
|
292
|
+
});
|
|
293
|
+
describe('_handleMessage', () => {
|
|
294
|
+
let message;
|
|
295
|
+
beforeEach(() => {
|
|
296
|
+
sennheiserService.websocket = createMockWebSocket();
|
|
297
|
+
jest.spyOn(sennheiserService, '_handleAck');
|
|
298
|
+
jest.spyOn(sennheiserService, '_handleError');
|
|
299
|
+
jest.spyOn(sennheiserService, '_registerSoftphone');
|
|
300
|
+
sennheiserService._sendMessage = jest.fn();
|
|
301
|
+
jest.spyOn(sennheiserService, 'deviceAnsweredCall');
|
|
302
|
+
jest.spyOn(sennheiserService, 'deviceEndedCall');
|
|
303
|
+
jest.spyOn(sennheiserService, 'deviceHoldStatusChanged');
|
|
304
|
+
jest.spyOn(sennheiserService, 'deviceMuteChanged');
|
|
305
|
+
jest.spyOn(sennheiserService, 'deviceRejectedCall');
|
|
306
|
+
});
|
|
307
|
+
it('should call _handleError() if there is a ReturnCode in the message', () => {
|
|
308
|
+
message = { data: '{ "ReturnCode": 4 }' };
|
|
309
|
+
sennheiserService._handleMessage(message);
|
|
310
|
+
expect(sennheiserService._handleError).toHaveBeenCalledTimes(1);
|
|
311
|
+
});
|
|
312
|
+
it('should log an error if there is an error parsing the message', () => {
|
|
313
|
+
message = { data: '{"fail : "asdf" }' };
|
|
314
|
+
jest.spyOn(mockLogger, 'error');
|
|
315
|
+
sennheiserService._handleMessage(message);
|
|
316
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
317
|
+
});
|
|
318
|
+
describe(`event type: ${SennheiserEvents.SocketConnected}`, () => {
|
|
319
|
+
it(`should call _registerSoftphone when the message event is '${SennheiserEvents.SocketConnected}'`, () => {
|
|
320
|
+
message = { data: `{ "Event": "${SennheiserEvents.SocketConnected}" }` };
|
|
321
|
+
sennheiserService._handleMessage(message);
|
|
322
|
+
expect(sennheiserService._registerSoftphone).toHaveBeenCalledTimes(1);
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
describe(`event type: ${SennheiserEvents.EstablishConnection}`, () => {
|
|
326
|
+
it(`should call _sendMessage with the correct payload when the message event is '${SennheiserEvents.EstablishConnection}'`, () => {
|
|
327
|
+
message = { data: `{ "Event": "${SennheiserEvents.EstablishConnection}" }` };
|
|
328
|
+
const expectedPayload = {
|
|
329
|
+
Event: SennheiserEvents.SPLogin,
|
|
330
|
+
EventType: SennheiserEventTypes.Request,
|
|
331
|
+
};
|
|
332
|
+
sennheiserService._handleMessage(message);
|
|
333
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledTimes(1);
|
|
334
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
describe(`event type: ${SennheiserEvents.SPLogin}`, () => {
|
|
338
|
+
beforeEach(() => {
|
|
339
|
+
message = { data: `{ "Event": "${SennheiserEvents.SPLogin}" }` };
|
|
340
|
+
});
|
|
341
|
+
it(`should call _sendMessage with the correct payload when the message event is '${SennheiserEvents.SPLogin}'`, () => {
|
|
342
|
+
const expectedPayload = {
|
|
343
|
+
Event: SennheiserEvents.SystemInformation,
|
|
344
|
+
EventType: SennheiserEventTypes.Request,
|
|
345
|
+
};
|
|
346
|
+
sennheiserService.isConnected = true;
|
|
347
|
+
sennheiserService._handleMessage(message);
|
|
348
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledTimes(1);
|
|
349
|
+
expect(sennheiserService._sendMessage).toHaveBeenCalledWith(expectedPayload);
|
|
350
|
+
});
|
|
351
|
+
it('should set isConnecting to false', () => {
|
|
352
|
+
sennheiserService.isConnecting = true;
|
|
353
|
+
sennheiserService._handleMessage(message);
|
|
354
|
+
expect(sennheiserService.isConnecting).toBe(false);
|
|
355
|
+
});
|
|
356
|
+
it('should set isConnected to true', () => {
|
|
357
|
+
sennheiserService.isConnected = false;
|
|
358
|
+
sennheiserService._handleMessage(message);
|
|
359
|
+
expect(sennheiserService.isConnected).toBe(true);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
describe(`event type: ${SennheiserEvents.HeadsetConnected}`, () => {
|
|
363
|
+
it('should set deviceInfo to the correct values if payload.HeadsetName is defined', () => {
|
|
364
|
+
const name = 'Test Headset';
|
|
365
|
+
const type = 'The kind that you wear on your head';
|
|
366
|
+
message = {
|
|
367
|
+
data: `{
|
|
368
|
+
"Event": "${SennheiserEvents.HeadsetConnected}",
|
|
369
|
+
"HeadsetName": "${name}",
|
|
370
|
+
"HeadsetType": "${type}"
|
|
371
|
+
}`,
|
|
372
|
+
};
|
|
373
|
+
sennheiserService.deviceInfo = null;
|
|
374
|
+
const expectedDeviceInfo = {
|
|
375
|
+
deviceName: name,
|
|
376
|
+
headsetType: type,
|
|
377
|
+
};
|
|
378
|
+
sennheiserService._handleMessage(message);
|
|
379
|
+
expect(sennheiserService.deviceInfo).toEqual(expectedDeviceInfo);
|
|
380
|
+
});
|
|
381
|
+
it('should not change deviceInfo if payload.HeadsetName is undefined', () => {
|
|
382
|
+
message = { data: `{ "Event": "${SennheiserEvents.HeadsetConnected}" }` };
|
|
383
|
+
const expectedDeviceInfo = {
|
|
384
|
+
deviceName: 'Test Headset',
|
|
385
|
+
headsetType: 'Test Headset Type',
|
|
386
|
+
};
|
|
387
|
+
sennheiserService.deviceInfo = expectedDeviceInfo;
|
|
388
|
+
sennheiserService._handleMessage(message);
|
|
389
|
+
expect(sennheiserService.deviceInfo).toEqual(expectedDeviceInfo);
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
describe(`event type: ${SennheiserEvents.HeadsetDisconnected}`, () => {
|
|
393
|
+
it('should set deviceInfo to null if the HeadsetName on the payload is the same as the currently set deviceName', () => {
|
|
394
|
+
const testDeviceName = 'Test Device';
|
|
395
|
+
message = {
|
|
396
|
+
data: `{
|
|
397
|
+
"Event": "${SennheiserEvents.HeadsetDisconnected}",
|
|
398
|
+
"HeadsetName": "${testDeviceName}"
|
|
399
|
+
}`,
|
|
400
|
+
};
|
|
401
|
+
sennheiserService.deviceInfo = { ProductName: testDeviceName };
|
|
402
|
+
sennheiserService._handleMessage(message);
|
|
403
|
+
expect(sennheiserService.deviceInfo).toBeNull();
|
|
404
|
+
});
|
|
405
|
+
it('should NOT set deviceInfo to null if the HeadsetName on the payload is the different than the currently set deviceName', () => {
|
|
406
|
+
const testDeviceName1 = 'Test Device 1';
|
|
407
|
+
const testDeviceName2 = 'Test Device 2';
|
|
408
|
+
message = {
|
|
409
|
+
data: `{
|
|
410
|
+
"Event": "${SennheiserEvents.HeadsetDisconnected}",
|
|
411
|
+
"HeadsetName": "${testDeviceName2}"
|
|
412
|
+
}`,
|
|
413
|
+
};
|
|
414
|
+
sennheiserService.deviceInfo = { ProductName: testDeviceName1 };
|
|
415
|
+
sennheiserService._handleMessage(message);
|
|
416
|
+
expect(sennheiserService.deviceInfo).not.toBeNull();
|
|
417
|
+
expect(sennheiserService.deviceInfo.ProductName).toEqual(testDeviceName1);
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
describe(`event type: ${SennheiserEvents.IncomingCallAccepted}`, () => {
|
|
421
|
+
it(`should call deviceAnsweredCall() when the payload EventType is '${SennheiserEventTypes.Notification}'`, () => {
|
|
422
|
+
message = {
|
|
423
|
+
data: `{
|
|
424
|
+
"Event": "${SennheiserEvents.IncomingCallAccepted}",
|
|
425
|
+
"EventType": "${SennheiserEventTypes.Notification}"
|
|
426
|
+
}`,
|
|
427
|
+
};
|
|
428
|
+
sennheiserService._handleMessage(message);
|
|
429
|
+
expect(sennheiserService.deviceAnsweredCall).toHaveBeenCalledTimes(1);
|
|
430
|
+
});
|
|
431
|
+
it(`should NOT call deviceAnsweredCall() when the payload EventType is NOT '${SennheiserEventTypes.Notification}'`, () => {
|
|
432
|
+
message = {
|
|
433
|
+
data: `{
|
|
434
|
+
"Event": "${SennheiserEvents.IncomingCallAccepted}",
|
|
435
|
+
"EventType": "${SennheiserEventTypes.Ack}"
|
|
436
|
+
}`,
|
|
437
|
+
};
|
|
438
|
+
sennheiserService._handleMessage(message);
|
|
439
|
+
expect(sennheiserService.deviceAnsweredCall).not.toHaveBeenCalled();
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
describe(`event type: ${SennheiserEvents.Hold}`, () => {
|
|
443
|
+
it(`should call _handleAck with the payload if the event type is '${SennheiserEventTypes.Notification}'`, () => {
|
|
444
|
+
const expectedPayload = {
|
|
445
|
+
Event: SennheiserEvents.Hold,
|
|
446
|
+
EventType: SennheiserEventTypes.Ack,
|
|
447
|
+
};
|
|
448
|
+
message = { data: JSON.stringify(expectedPayload) };
|
|
449
|
+
sennheiserService._handleMessage(message);
|
|
450
|
+
expect(sennheiserService._handleAck).toHaveBeenCalledWith(expectedPayload);
|
|
451
|
+
expect(sennheiserService.deviceHoldStatusChanged).not.toHaveBeenCalled();
|
|
452
|
+
});
|
|
453
|
+
it(`should call deviceHoldStatusChanged(true) if the event type is NOT ${SennheiserEventTypes.Notification}`, () => {
|
|
454
|
+
const expectedPayload = {
|
|
455
|
+
CallID: '23f897b',
|
|
456
|
+
Event: SennheiserEvents.Hold,
|
|
457
|
+
EventType: SennheiserEventTypes.Notification,
|
|
458
|
+
};
|
|
459
|
+
message = { data: JSON.stringify(expectedPayload) };
|
|
460
|
+
sennheiserService._handleMessage(message);
|
|
461
|
+
expect(sennheiserService._handleAck).not.toHaveBeenCalled();
|
|
462
|
+
expect(sennheiserService.deviceHoldStatusChanged).toHaveBeenCalledWith({ holdRequested: true, name: SennheiserEvents.Hold, conversationId: expectedPayload.CallID });
|
|
463
|
+
});
|
|
464
|
+
});
|
|
465
|
+
describe(`event type: ${SennheiserEvents.Resume}`, () => {
|
|
466
|
+
it(`should call _handleAck with the payload if the event type is '${SennheiserEventTypes.Ack}'`, () => {
|
|
467
|
+
const expectedPayload = {
|
|
468
|
+
Event: SennheiserEvents.Resume,
|
|
469
|
+
EventType: SennheiserEventTypes.Ack,
|
|
470
|
+
};
|
|
471
|
+
message = { data: JSON.stringify(expectedPayload) };
|
|
472
|
+
sennheiserService._handleMessage(message);
|
|
473
|
+
expect(sennheiserService._handleAck).toHaveBeenCalledWith(expectedPayload);
|
|
474
|
+
expect(sennheiserService.deviceHoldStatusChanged).not.toHaveBeenCalled();
|
|
475
|
+
});
|
|
476
|
+
it(`should call deviceHoldStatusChanged(false) if the event type is NOT ${SennheiserEventTypes.Notification}`, () => {
|
|
477
|
+
const expectedPayload = {
|
|
478
|
+
CallID: '23f897b',
|
|
479
|
+
Event: SennheiserEvents.Resume,
|
|
480
|
+
EventType: SennheiserEventTypes.Notification,
|
|
481
|
+
};
|
|
482
|
+
message = { data: JSON.stringify(expectedPayload) };
|
|
483
|
+
sennheiserService._handleMessage(message);
|
|
484
|
+
expect(sennheiserService._handleAck).not.toHaveBeenCalled();
|
|
485
|
+
expect(sennheiserService.deviceHoldStatusChanged).toHaveBeenCalledWith({ holdRequested: false, name: SennheiserEvents.Resume, conversationId: expectedPayload.CallID });
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
describe(`event type: ${SennheiserEvents.MuteFromHeadset}`, () => {
|
|
489
|
+
it('should call deviceMuteChanged(true)', () => {
|
|
490
|
+
message = { data: `{ "Event": "${SennheiserEvents.MuteFromHeadset}" }` };
|
|
491
|
+
sennheiserService._handleMessage(message);
|
|
492
|
+
expect(sennheiserService.deviceMuteChanged).toHaveBeenCalledWith({ isMuted: true, name: SennheiserEvents.MuteFromHeadset });
|
|
493
|
+
});
|
|
494
|
+
});
|
|
495
|
+
describe(`event type: ${SennheiserEvents.UnmuteFromHeadset}`, () => {
|
|
496
|
+
it('should call deviceMuteChanged(false)', () => {
|
|
497
|
+
message = { data: `{ "Event": "${SennheiserEvents.UnmuteFromHeadset}" }` };
|
|
498
|
+
sennheiserService._handleMessage(message);
|
|
499
|
+
expect(sennheiserService.deviceMuteChanged).toHaveBeenCalledWith({ isMuted: false, name: SennheiserEvents.UnmuteFromHeadset });
|
|
500
|
+
});
|
|
501
|
+
});
|
|
502
|
+
describe(`event type: ${SennheiserEvents.CallEnded}`, () => {
|
|
503
|
+
it('should delete the call mappings for callId and conversationId', () => {
|
|
504
|
+
const payload = {
|
|
505
|
+
CallID: '23f897b',
|
|
506
|
+
Event: SennheiserEvents.CallEnded,
|
|
507
|
+
EventType: SennheiserEventTypes.Notification,
|
|
508
|
+
};
|
|
509
|
+
message = { data: JSON.stringify(payload) };
|
|
510
|
+
sennheiserService._handleMessage(message);
|
|
511
|
+
expect(sennheiserService.deviceEndedCall).toHaveBeenCalledWith({ name: SennheiserEvents.CallEnded, conversationId: payload.CallID });
|
|
512
|
+
});
|
|
513
|
+
it(`should call deviceEndedCall() when the payload event type is '${SennheiserEventTypes.Notification}'`, () => {
|
|
514
|
+
const payload = {
|
|
515
|
+
Event: SennheiserEvents.CallEnded,
|
|
516
|
+
EventType: SennheiserEventTypes.Notification,
|
|
517
|
+
};
|
|
518
|
+
message = { data: JSON.stringify(payload) };
|
|
519
|
+
sennheiserService._handleMessage(message);
|
|
520
|
+
expect(sennheiserService.deviceEndedCall).toHaveBeenCalledTimes(1);
|
|
521
|
+
});
|
|
522
|
+
it(`should NOT call deviceEndedCall() when the payload event type is NOT '${SennheiserEventTypes.Notification}'`, () => {
|
|
523
|
+
const payload = {
|
|
524
|
+
Event: SennheiserEvents.CallEnded,
|
|
525
|
+
EventType: SennheiserEventTypes.Ack,
|
|
526
|
+
};
|
|
527
|
+
message = { data: JSON.stringify(payload) };
|
|
528
|
+
sennheiserService._handleMessage(message);
|
|
529
|
+
expect(sennheiserService.deviceEndedCall).not.toHaveBeenCalled();
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
describe(`event type: ${SennheiserEvents.IncomingCallRejected}`, () => {
|
|
533
|
+
it('should call deviceRejectedCall() with the relevant conversationID', () => {
|
|
534
|
+
const conversationId = '12r3kh';
|
|
535
|
+
const payload = {
|
|
536
|
+
CallID: conversationId,
|
|
537
|
+
Event: SennheiserEvents.IncomingCallRejected,
|
|
538
|
+
};
|
|
539
|
+
message = { data: JSON.stringify(payload) };
|
|
540
|
+
sennheiserService._handleMessage(message);
|
|
541
|
+
expect(sennheiserService.deviceRejectedCall).toHaveBeenCalledWith({ name: payload.Event, conversationId: payload.CallID });
|
|
542
|
+
});
|
|
543
|
+
});
|
|
544
|
+
describe(`event type: ${SennheiserEvents.TerminateConnection}`, () => {
|
|
545
|
+
let mockWebSocket;
|
|
546
|
+
beforeEach(() => {
|
|
547
|
+
mockWebSocket = sennheiserService.websocket;
|
|
548
|
+
});
|
|
549
|
+
it('should close the websocket connection if the socket.ReadyState === 1, and set the websocket to null', () => {
|
|
550
|
+
message = { data: `{ "Event": "${SennheiserEvents.TerminateConnection}" }` };
|
|
551
|
+
mockWebSocket.readyState = 1;
|
|
552
|
+
jest.spyOn(mockWebSocket, 'close');
|
|
553
|
+
sennheiserService._handleMessage(message);
|
|
554
|
+
expect(sennheiserService.websocket).toBeNull();
|
|
555
|
+
expect(mockWebSocket.close).toHaveBeenCalled();
|
|
556
|
+
});
|
|
557
|
+
it('should NOT call close() on the websocket if socket.ReadyState is !== 1', () => {
|
|
558
|
+
message = { data: `{ "Event": "${SennheiserEvents.TerminateConnection}" }` };
|
|
559
|
+
mockWebSocket.readyState = 2;
|
|
560
|
+
jest.spyOn(mockWebSocket, 'close');
|
|
561
|
+
sennheiserService._handleMessage(message);
|
|
562
|
+
expect(sennheiserService.websocket).toBeNull();
|
|
563
|
+
expect(mockWebSocket.close).not.toHaveBeenCalled();
|
|
564
|
+
});
|
|
565
|
+
});
|
|
566
|
+
describe('default case', () => {
|
|
567
|
+
it(`should call _handleAck with the given payload when the event type is ${SennheiserEventTypes.Ack}`, () => {
|
|
568
|
+
const payload = {
|
|
569
|
+
Event: 'UnexpectedEvent',
|
|
570
|
+
EventType: SennheiserEventTypes.Ack,
|
|
571
|
+
};
|
|
572
|
+
message = { data: JSON.stringify(payload) };
|
|
573
|
+
sennheiserService._handleMessage(message);
|
|
574
|
+
expect(sennheiserService._handleAck).toHaveBeenCalledWith(payload);
|
|
575
|
+
});
|
|
576
|
+
it(`should call NOT _handleAck with the given payload when the event type is NOT ${SennheiserEventTypes.Ack}`, () => {
|
|
577
|
+
const payload = {
|
|
578
|
+
Event: 'UnexpectedEvent',
|
|
579
|
+
EventType: SennheiserEventTypes.Notification,
|
|
580
|
+
};
|
|
581
|
+
message = { data: JSON.stringify(payload) };
|
|
582
|
+
sennheiserService._handleMessage(message);
|
|
583
|
+
expect(sennheiserService._handleAck).not.toHaveBeenCalled();
|
|
584
|
+
});
|
|
585
|
+
});
|
|
586
|
+
});
|
|
587
|
+
describe('endAllCalls', () => {
|
|
588
|
+
it('should return a Promise<void>', () => {
|
|
589
|
+
jest.spyOn(mockLogger, 'warn');
|
|
590
|
+
sennheiserService.endAllCalls();
|
|
591
|
+
expect(mockLogger.warn).toHaveBeenCalled();
|
|
592
|
+
});
|
|
593
|
+
});
|
|
594
|
+
describe('webSocketOnOpen', () => {
|
|
595
|
+
it('should set websocketConnected to true', () => {
|
|
596
|
+
sennheiserService.websocketConnected = false;
|
|
597
|
+
sennheiserService.webSocketOnOpen();
|
|
598
|
+
expect(sennheiserService.websocketConnected).toBe(true);
|
|
599
|
+
});
|
|
600
|
+
it('should call logger to inform that the websocket is connected', () => {
|
|
601
|
+
jest.spyOn(mockLogger, 'info');
|
|
602
|
+
sennheiserService.webSocketOnOpen();
|
|
603
|
+
expect(mockLogger.info).toHaveBeenCalled();
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
describe('webSocketOnClose', () => {
|
|
607
|
+
beforeEach(() => {
|
|
608
|
+
sennheiserService.websocketConnected = true;
|
|
609
|
+
});
|
|
610
|
+
it('should set websocketConnected to false', () => {
|
|
611
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
612
|
+
expect(sennheiserService.websocketConnected).toBe(false);
|
|
613
|
+
});
|
|
614
|
+
it('should log error for unclean close', () => {
|
|
615
|
+
const spy = sennheiserService.logger.error = jest.fn();
|
|
616
|
+
const err = { code: 123, reason: 'something broke', wasClean: false };
|
|
617
|
+
sennheiserService.webSocketOnClose(err);
|
|
618
|
+
expect(sennheiserService.websocketConnected).toBe(false);
|
|
619
|
+
expect(spy).toHaveBeenCalledWith(err);
|
|
620
|
+
});
|
|
621
|
+
it('should log an error message when err.wasClean is false', () => {
|
|
622
|
+
jest.spyOn(mockLogger, 'error');
|
|
623
|
+
const err = { code: 123, reason: 'something broke', wasClean: true };
|
|
624
|
+
sennheiserService.webSocketOnClose(err);
|
|
625
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
626
|
+
});
|
|
627
|
+
it('should set isConnecting to false', () => {
|
|
628
|
+
sennheiserService.isConnecting = true;
|
|
629
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
630
|
+
expect(sennheiserService.isConnecting).toBe(false);
|
|
631
|
+
});
|
|
632
|
+
it('should set isConnected to false', () => {
|
|
633
|
+
sennheiserService.isConnected = true;
|
|
634
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
635
|
+
expect(sennheiserService.isConnected).toBe(false);
|
|
636
|
+
});
|
|
637
|
+
it('should log an error if isConnected is false', () => {
|
|
638
|
+
sennheiserService.isConnected = false;
|
|
639
|
+
jest.spyOn(mockLogger, 'error');
|
|
640
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
641
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
642
|
+
});
|
|
643
|
+
it("should set errorCode to 'browser' when isConnected is false and the browser is Firefox", () => {
|
|
644
|
+
sennheiserService.isConnected = false;
|
|
645
|
+
sennheiserService.errorCode = null;
|
|
646
|
+
jest.spyOn(utils, 'isFirefox').mockReturnValue(true);
|
|
647
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
648
|
+
expect(sennheiserService.errorCode).toEqual('browser');
|
|
649
|
+
});
|
|
650
|
+
it('should set disableRetry to true when isConnected is false and the browser is Firefox', () => {
|
|
651
|
+
sennheiserService.isConnected = false;
|
|
652
|
+
sennheiserService.disableRetry = false;
|
|
653
|
+
jest.spyOn(utils, 'isFirefox').mockReturnValue(true);
|
|
654
|
+
sennheiserService.webSocketOnClose({ code: 123, reason: 'something broke', wasClean: true });
|
|
655
|
+
expect(sennheiserService.disableRetry).toEqual(true);
|
|
656
|
+
});
|
|
657
|
+
});
|
|
658
|
+
describe('connect', () => {
|
|
659
|
+
it('should set isConnecting to true and isConnected to false', () => {
|
|
660
|
+
sennheiserService.isConnecting = false;
|
|
661
|
+
sennheiserService.isConnected = true;
|
|
662
|
+
sennheiserService.connect();
|
|
663
|
+
expect(sennheiserService.isConnected).toBe(false);
|
|
664
|
+
expect(sennheiserService.isConnecting).toBe(true);
|
|
665
|
+
});
|
|
666
|
+
it('should set the socket opopen, onclose, and onmessage functions', () => {
|
|
667
|
+
sennheiserService.websocket = null;
|
|
668
|
+
sennheiserService.connect();
|
|
669
|
+
expect(typeof sennheiserService.websocket.onopen).toBe('function');
|
|
670
|
+
expect(typeof sennheiserService.websocket.onclose).toBe('function');
|
|
671
|
+
expect(typeof sennheiserService.websocket.onmessage).toBe('function');
|
|
672
|
+
});
|
|
673
|
+
it('should set the service websocket', () => {
|
|
674
|
+
sennheiserService.websocket = null;
|
|
675
|
+
sennheiserService.connect();
|
|
676
|
+
expect(sennheiserService.websocket).toBeTruthy();
|
|
677
|
+
});
|
|
678
|
+
});
|
|
679
|
+
});
|
|
680
|
+
//# sourceMappingURL=sennheiser.test.js.map
|