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,800 @@
|
|
|
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
|
+
const headset_1 = __importDefault(require("./headset"));
|
|
16
|
+
const vendor_implementation_1 = require("./vendor-implementations/vendor-implementation");
|
|
17
|
+
const plantronics_1 = __importDefault(require("./vendor-implementations/plantronics/plantronics"));
|
|
18
|
+
const sennheiser_1 = __importDefault(require("./vendor-implementations/sennheiser/sennheiser"));
|
|
19
|
+
const jabra_native_1 = __importDefault(require("./vendor-implementations/jabra/jabra-native/jabra-native"));
|
|
20
|
+
const jabra_1 = __importDefault(require("./vendor-implementations/jabra/jabra"));
|
|
21
|
+
require("regenerator-runtime");
|
|
22
|
+
const broadcast_channel_1 = require("broadcast-channel");
|
|
23
|
+
const consumed_headset_events_1 = require("../types/consumed-headset-events");
|
|
24
|
+
jest.mock('broadcast-channel');
|
|
25
|
+
describe('HeadsetService', () => {
|
|
26
|
+
let plantronics;
|
|
27
|
+
let sennheiser;
|
|
28
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
29
|
+
let jabraNative;
|
|
30
|
+
let jabra;
|
|
31
|
+
let headsetService;
|
|
32
|
+
const config = { logger: console };
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
headsetService = headset_1.default.getInstance(Object.assign(Object.assign({}, config), { createNew: true }));
|
|
35
|
+
plantronics = plantronics_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'Plantronics' }));
|
|
36
|
+
sennheiser = sennheiser_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'Sennheiser' }));
|
|
37
|
+
jabraNative = jabra_native_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'JabraNative' }));
|
|
38
|
+
/* eslint-enable */
|
|
39
|
+
jabra = jabra_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'Jabra' }));
|
|
40
|
+
jest.spyOn(sennheiser, 'connect').mockResolvedValue(true);
|
|
41
|
+
jest.spyOn(plantronics, 'connect').mockResolvedValue(true);
|
|
42
|
+
jest.spyOn(sennheiser, 'disconnect').mockResolvedValue(true);
|
|
43
|
+
jest.spyOn(plantronics, 'disconnect').mockResolvedValue(true);
|
|
44
|
+
});
|
|
45
|
+
afterEach(() => {
|
|
46
|
+
headsetService = null;
|
|
47
|
+
plantronics = null;
|
|
48
|
+
sennheiser = null;
|
|
49
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
50
|
+
jabraNative = null;
|
|
51
|
+
/* eslint-enable */
|
|
52
|
+
jabra = null;
|
|
53
|
+
jest.resetAllMocks();
|
|
54
|
+
jest.resetModules();
|
|
55
|
+
});
|
|
56
|
+
describe('instantiation', () => {
|
|
57
|
+
it('should be a singleton', () => {
|
|
58
|
+
headsetService = headset_1.default.getInstance(config);
|
|
59
|
+
const headsetService2 = headset_1.default.getInstance(config);
|
|
60
|
+
expect(headsetService).not.toBeFalsy();
|
|
61
|
+
expect(headsetService2).not.toBeFalsy();
|
|
62
|
+
expect(headsetService).toBe(headsetService2);
|
|
63
|
+
});
|
|
64
|
+
it('should fallback to console logger', () => {
|
|
65
|
+
headsetService = headset_1.default.getInstance({ createNew: true, logger: null });
|
|
66
|
+
expect(headsetService['logger']).toBe(console);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('implementations', () => {
|
|
70
|
+
it('should only include implementations that are supported', () => {
|
|
71
|
+
headsetService = headset_1.default.getInstance(config);
|
|
72
|
+
[headsetService['plantronics'], headsetService['sennheiser'], headsetService['jabra'], headsetService['jabraNative']]
|
|
73
|
+
.forEach((impl) => {
|
|
74
|
+
impl.isSupported = jest.fn().mockReturnValue(true);
|
|
75
|
+
});
|
|
76
|
+
headsetService['_implementations'] = [];
|
|
77
|
+
expect(headsetService.implementations.length).toBe(4);
|
|
78
|
+
[headsetService['jabra'], headsetService['jabraNative']].forEach((impl) => impl.isSupported.mockReturnValue(false));
|
|
79
|
+
headsetService['_implementations'] = [];
|
|
80
|
+
expect(headsetService.implementations.length).toBe(2);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
describe('changeImplementation', () => {
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
headsetService = headset_1.default.getInstance(config);
|
|
86
|
+
});
|
|
87
|
+
it('should do nothing if the implementation passed in is the current implementation', () => {
|
|
88
|
+
headsetService.selectedImplementation = sennheiser;
|
|
89
|
+
jest.spyOn(sennheiser, 'disconnect');
|
|
90
|
+
headsetService.changeImplementation(sennheiser, 'test label');
|
|
91
|
+
expect(sennheiser.disconnect).not.toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
it('should change the selected implementation to what was passed in', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
94
|
+
headsetService.selectedImplementation = sennheiser;
|
|
95
|
+
yield headsetService.changeImplementation(plantronics, 'test label');
|
|
96
|
+
expect(headsetService.selectedImplementation).toBe(plantronics);
|
|
97
|
+
}));
|
|
98
|
+
it('should call disconnect on the old implementation, and connect on the new implementation', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
99
|
+
jest.spyOn(sennheiser, 'disconnect');
|
|
100
|
+
jest.spyOn(plantronics, 'connect');
|
|
101
|
+
headsetService.selectedImplementation = sennheiser;
|
|
102
|
+
yield headsetService.changeImplementation(plantronics, 'test label');
|
|
103
|
+
expect(sennheiser.disconnect).toHaveBeenCalled();
|
|
104
|
+
expect(plantronics.connect).toHaveBeenCalled();
|
|
105
|
+
}));
|
|
106
|
+
it('should trigger implementationChanged event for new implementation', (done) => {
|
|
107
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
108
|
+
expect(event.event).toBe('implementationChanged');
|
|
109
|
+
expect(event.payload).toStrictEqual(plantronics);
|
|
110
|
+
expect(event.payload instanceof vendor_implementation_1.VendorImplementation).toBe(true);
|
|
111
|
+
done();
|
|
112
|
+
});
|
|
113
|
+
headsetService.selectedImplementation = sennheiser;
|
|
114
|
+
headsetService.changeImplementation(plantronics, 'test label');
|
|
115
|
+
});
|
|
116
|
+
it('should trigger implementationChanged event when clearing the implementation', done => {
|
|
117
|
+
headsetService.headsetEvents$.subscribe(value => {
|
|
118
|
+
expect(value.event).toBe('implementationChanged');
|
|
119
|
+
expect(value.payload).toBeNull();
|
|
120
|
+
done();
|
|
121
|
+
});
|
|
122
|
+
headsetService.selectedImplementation = plantronics;
|
|
123
|
+
headsetService.changeImplementation(null, '');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('incomingCall', () => {
|
|
127
|
+
beforeEach(() => {
|
|
128
|
+
headsetService = headset_1.default.getInstance(config);
|
|
129
|
+
jest.spyOn(plantronics, 'incomingCall').mockResolvedValue({});
|
|
130
|
+
headsetService.selectedImplementation = plantronics;
|
|
131
|
+
});
|
|
132
|
+
afterEach(() => {
|
|
133
|
+
jest.resetAllMocks();
|
|
134
|
+
});
|
|
135
|
+
it('should call incomingCall on the selected implementation when the implementation is connected', () => {
|
|
136
|
+
const callInfo = { conversationId: '1234', contactName: 'CM Punk' };
|
|
137
|
+
const hasOtherActiveCalls = false;
|
|
138
|
+
plantronics.isConnected = true;
|
|
139
|
+
headsetService.incomingCall(callInfo, hasOtherActiveCalls);
|
|
140
|
+
expect(plantronics.incomingCall).toHaveBeenCalledWith(callInfo, hasOtherActiveCalls);
|
|
141
|
+
});
|
|
142
|
+
it('shouldnot call incomingCall on the selected implmenetation when the implementation is not connected', () => {
|
|
143
|
+
const callInfo = { conversationId: '4321', contactName: 'Bryan Danielson' };
|
|
144
|
+
const hasOtherActiveCalls = false;
|
|
145
|
+
plantronics.isConnected = false;
|
|
146
|
+
headsetService.incomingCall(callInfo, hasOtherActiveCalls);
|
|
147
|
+
expect(plantronics.incomingCall).not.toHaveBeenCalled();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('outgoingCall', () => {
|
|
151
|
+
beforeEach(() => {
|
|
152
|
+
headsetService = headset_1.default.getInstance(config);
|
|
153
|
+
jest.spyOn(plantronics, 'outgoingCall').mockResolvedValue({});
|
|
154
|
+
headsetService.selectedImplementation = plantronics;
|
|
155
|
+
});
|
|
156
|
+
afterEach(() => {
|
|
157
|
+
jest.resetAllMocks();
|
|
158
|
+
});
|
|
159
|
+
it('should call outgoingCall on the selected implementation when the implementation is connected', () => {
|
|
160
|
+
const callInfo = { conversationId: '4567', contactName: 'Adam Cole' };
|
|
161
|
+
plantronics.isConnected = true;
|
|
162
|
+
headsetService.outgoingCall(callInfo);
|
|
163
|
+
expect(plantronics.outgoingCall).toHaveBeenCalledWith(callInfo);
|
|
164
|
+
});
|
|
165
|
+
it('shouldnot call outgoingCall on the selected implmenetation when the implementation is not connected', () => {
|
|
166
|
+
const callInfo = { conversationId: '7654', contactName: 'Marc Spector' };
|
|
167
|
+
plantronics.isConnected = false;
|
|
168
|
+
headsetService.outgoingCall(callInfo);
|
|
169
|
+
expect(plantronics.outgoingCall).not.toHaveBeenCalled();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe('answerCall', () => {
|
|
173
|
+
beforeEach(() => {
|
|
174
|
+
headsetService = headset_1.default.getInstance(config);
|
|
175
|
+
jest.spyOn(plantronics, 'answerCall').mockResolvedValue({});
|
|
176
|
+
headsetService.selectedImplementation = plantronics;
|
|
177
|
+
});
|
|
178
|
+
afterEach(() => {
|
|
179
|
+
jest.resetAllMocks();
|
|
180
|
+
});
|
|
181
|
+
it('should do nothing if already in the expected state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
182
|
+
const conversationId = 'convoId241123';
|
|
183
|
+
plantronics.isConnected = true;
|
|
184
|
+
headsetService['headsetConversationStates'] = {
|
|
185
|
+
[conversationId]: {
|
|
186
|
+
offHook: true,
|
|
187
|
+
muted: false,
|
|
188
|
+
held: true,
|
|
189
|
+
ringing: false,
|
|
190
|
+
conversationId
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
yield headsetService.answerCall(conversationId);
|
|
194
|
+
expect(plantronics.answerCall).not.toHaveBeenCalled();
|
|
195
|
+
}));
|
|
196
|
+
it('should call answerCall on the selected implementation when the implementation is connected', () => {
|
|
197
|
+
const conversationId = 'convoId123';
|
|
198
|
+
plantronics.isConnected = true;
|
|
199
|
+
headsetService['headsetConversationStates'] = {
|
|
200
|
+
'convoId123': {
|
|
201
|
+
offHook: false,
|
|
202
|
+
muted: false,
|
|
203
|
+
held: false,
|
|
204
|
+
ringing: true,
|
|
205
|
+
conversationId: 'convoId123'
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
headsetService.answerCall(conversationId);
|
|
209
|
+
expect(plantronics.answerCall).toHaveBeenCalledWith(conversationId);
|
|
210
|
+
});
|
|
211
|
+
it('should not call answerCall on the selected implmenetation when the implementation is not connected', () => {
|
|
212
|
+
const conversationId = '1234';
|
|
213
|
+
plantronics.isConnected = false;
|
|
214
|
+
headsetService.answerCall(conversationId);
|
|
215
|
+
expect(plantronics.answerCall).not.toHaveBeenCalled();
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('rejectCall', () => {
|
|
219
|
+
beforeEach(() => {
|
|
220
|
+
jest.useFakeTimers();
|
|
221
|
+
headsetService = headset_1.default.getInstance(config);
|
|
222
|
+
jest.spyOn(plantronics, 'rejectCall').mockResolvedValue({});
|
|
223
|
+
headsetService.selectedImplementation = plantronics;
|
|
224
|
+
});
|
|
225
|
+
afterEach(() => {
|
|
226
|
+
jest.resetAllMocks();
|
|
227
|
+
jest.useRealTimers();
|
|
228
|
+
});
|
|
229
|
+
it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
230
|
+
const conversationId = 'convoId12523';
|
|
231
|
+
plantronics.isConnected = true;
|
|
232
|
+
headsetService['headsetConversationStates'] = {
|
|
233
|
+
[conversationId]: {
|
|
234
|
+
offHook: false,
|
|
235
|
+
muted: false,
|
|
236
|
+
held: false,
|
|
237
|
+
ringing: false,
|
|
238
|
+
conversationId
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
yield headsetService.rejectCall(conversationId);
|
|
242
|
+
expect(plantronics.rejectCall).not.toHaveBeenCalled();
|
|
243
|
+
}));
|
|
244
|
+
it('should not delete the headset state if there is no removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
245
|
+
const conversationId = 'convoId12523';
|
|
246
|
+
plantronics.isConnected = true;
|
|
247
|
+
headsetService['headsetConversationStates'] = {
|
|
248
|
+
[conversationId]: {
|
|
249
|
+
offHook: false,
|
|
250
|
+
muted: false,
|
|
251
|
+
held: false,
|
|
252
|
+
ringing: true,
|
|
253
|
+
conversationId
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
yield headsetService.rejectCall(conversationId);
|
|
257
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
258
|
+
delete headsetService['headsetConversationStates'][conversationId].removeTimer;
|
|
259
|
+
jest.advanceTimersByTime(3000);
|
|
260
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
261
|
+
}));
|
|
262
|
+
it('should delete the headset state if there is removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
263
|
+
const conversationId = 'convoId12523';
|
|
264
|
+
plantronics.isConnected = true;
|
|
265
|
+
headsetService['headsetConversationStates'] = {
|
|
266
|
+
[conversationId]: {
|
|
267
|
+
offHook: false,
|
|
268
|
+
muted: false,
|
|
269
|
+
held: false,
|
|
270
|
+
ringing: true,
|
|
271
|
+
conversationId
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
yield headsetService.rejectCall(conversationId);
|
|
275
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
276
|
+
jest.advanceTimersByTime(3000);
|
|
277
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
|
|
278
|
+
}));
|
|
279
|
+
it('should call rejectCall on the selected implementation when the implementation is connected', () => {
|
|
280
|
+
const conversationId = 'convoId123';
|
|
281
|
+
plantronics.isConnected = true;
|
|
282
|
+
headsetService['headsetConversationStates'] = {
|
|
283
|
+
'convoId123': {
|
|
284
|
+
offHook: false,
|
|
285
|
+
muted: false,
|
|
286
|
+
held: false,
|
|
287
|
+
ringing: true,
|
|
288
|
+
conversationId: 'convoId123'
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
headsetService.rejectCall(conversationId);
|
|
292
|
+
expect(plantronics.rejectCall).toHaveBeenCalledWith(conversationId);
|
|
293
|
+
expect(headsetService['headsetConversationStates']['convoId123'].removeTimer).toBeDefined();
|
|
294
|
+
jest.advanceTimersByTime(2500);
|
|
295
|
+
expect(headsetService['headsetConversationStates']).toStrictEqual({});
|
|
296
|
+
});
|
|
297
|
+
it('should not call rejectCall on the selected implmenetation when the implementation is not connected', () => {
|
|
298
|
+
const conversationId = '1234';
|
|
299
|
+
plantronics.isConnected = false;
|
|
300
|
+
headsetService.rejectCall(conversationId);
|
|
301
|
+
expect(plantronics.rejectCall).not.toHaveBeenCalled();
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
describe('setMute', () => {
|
|
305
|
+
beforeEach(() => {
|
|
306
|
+
headsetService = headset_1.default.getInstance(config);
|
|
307
|
+
jest.spyOn(plantronics, 'setMute').mockResolvedValue({});
|
|
308
|
+
headsetService.selectedImplementation = plantronics;
|
|
309
|
+
});
|
|
310
|
+
afterEach(() => {
|
|
311
|
+
jest.resetAllMocks();
|
|
312
|
+
});
|
|
313
|
+
it('should do nothing if all calls are muted', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
314
|
+
const conversationId = 'convoId123';
|
|
315
|
+
plantronics.isConnected = true;
|
|
316
|
+
headsetService['headsetConversationStates'] = {
|
|
317
|
+
[conversationId]: {
|
|
318
|
+
offHook: true,
|
|
319
|
+
muted: true,
|
|
320
|
+
held: true,
|
|
321
|
+
ringing: false,
|
|
322
|
+
conversationId
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
yield headsetService.setMute(true);
|
|
326
|
+
expect(plantronics.setMute).not.toHaveBeenCalled();
|
|
327
|
+
}));
|
|
328
|
+
it('should call setMute on the selected implementation when the implementation is connected', () => {
|
|
329
|
+
plantronics.isConnected = true;
|
|
330
|
+
headsetService['headsetConversationStates'] = {
|
|
331
|
+
'convoId123': {
|
|
332
|
+
offHook: false,
|
|
333
|
+
muted: false,
|
|
334
|
+
held: false,
|
|
335
|
+
ringing: true,
|
|
336
|
+
conversationId: 'convoId123'
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
headsetService.setMute(true);
|
|
340
|
+
expect(plantronics.setMute).toHaveBeenCalledWith(true);
|
|
341
|
+
expect(headsetService['headsetConversationStates']['convoId123'].muted).toBe(true);
|
|
342
|
+
});
|
|
343
|
+
it('shouldnot call setMute on the selected implmenetation when the implementation is not connected', () => {
|
|
344
|
+
plantronics.isConnected = false;
|
|
345
|
+
headsetService.setMute(true);
|
|
346
|
+
expect(plantronics.setMute).not.toHaveBeenCalled();
|
|
347
|
+
});
|
|
348
|
+
});
|
|
349
|
+
describe('setHold', () => {
|
|
350
|
+
beforeEach(() => {
|
|
351
|
+
headsetService = headset_1.default.getInstance(config);
|
|
352
|
+
jest.spyOn(plantronics, 'setHold').mockResolvedValue(null);
|
|
353
|
+
headsetService.selectedImplementation = plantronics;
|
|
354
|
+
});
|
|
355
|
+
afterEach(() => {
|
|
356
|
+
jest.resetAllMocks();
|
|
357
|
+
});
|
|
358
|
+
it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
359
|
+
const conversationId = 'convoId123';
|
|
360
|
+
plantronics.isConnected = true;
|
|
361
|
+
headsetService['headsetConversationStates'] = {
|
|
362
|
+
[conversationId]: {
|
|
363
|
+
offHook: true,
|
|
364
|
+
muted: false,
|
|
365
|
+
held: true,
|
|
366
|
+
ringing: false,
|
|
367
|
+
conversationId
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
yield headsetService.setHold(conversationId, true);
|
|
371
|
+
expect(plantronics.setHold).not.toHaveBeenCalled();
|
|
372
|
+
}));
|
|
373
|
+
it('should call setHold on the selected implementation when the implementation is connected', () => {
|
|
374
|
+
const conversationId = 'convoId123';
|
|
375
|
+
plantronics.isConnected = true;
|
|
376
|
+
headsetService['headsetConversationStates'] = {
|
|
377
|
+
'convoId123': {
|
|
378
|
+
offHook: true,
|
|
379
|
+
muted: false,
|
|
380
|
+
held: false,
|
|
381
|
+
ringing: false,
|
|
382
|
+
conversationId: 'convoId123'
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
headsetService.setHold(conversationId, true);
|
|
386
|
+
expect(plantronics.setHold).toHaveBeenCalledWith(conversationId, true);
|
|
387
|
+
});
|
|
388
|
+
it('should not call setHold on the selected implmenetation when the implementation is not connected', () => {
|
|
389
|
+
const conversationId = '1234';
|
|
390
|
+
plantronics.isConnected = false;
|
|
391
|
+
headsetService.setHold(conversationId, true);
|
|
392
|
+
expect(plantronics.setHold).not.toHaveBeenCalled();
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
describe('endCall', () => {
|
|
396
|
+
beforeEach(() => {
|
|
397
|
+
jest.useFakeTimers();
|
|
398
|
+
headsetService = headset_1.default.getInstance(config);
|
|
399
|
+
jest.spyOn(plantronics, 'endCall').mockResolvedValue({});
|
|
400
|
+
headsetService.selectedImplementation = plantronics;
|
|
401
|
+
});
|
|
402
|
+
afterEach(() => {
|
|
403
|
+
jest.useRealTimers();
|
|
404
|
+
jest.resetAllMocks();
|
|
405
|
+
});
|
|
406
|
+
it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
407
|
+
const conversationId = 'myconvoId5';
|
|
408
|
+
plantronics.isConnected = true;
|
|
409
|
+
headsetService['headsetConversationStates'] = {
|
|
410
|
+
[conversationId]: {
|
|
411
|
+
conversationId,
|
|
412
|
+
held: false,
|
|
413
|
+
muted: false,
|
|
414
|
+
offHook: false,
|
|
415
|
+
ringing: false,
|
|
416
|
+
removeTimer: 12525
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
const timeoutSpy = jest.spyOn(window, 'setTimeout');
|
|
420
|
+
headsetService.endCall(conversationId, false);
|
|
421
|
+
expect(timeoutSpy).not.toHaveBeenCalled();
|
|
422
|
+
timeoutSpy.mockRestore();
|
|
423
|
+
}));
|
|
424
|
+
it('should delete headset state after time', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
425
|
+
const conversationId = 'myconvoId5';
|
|
426
|
+
plantronics.isConnected = true;
|
|
427
|
+
headsetService['headsetConversationStates'] = {
|
|
428
|
+
[conversationId]: {
|
|
429
|
+
conversationId,
|
|
430
|
+
held: false,
|
|
431
|
+
muted: false,
|
|
432
|
+
offHook: true,
|
|
433
|
+
ringing: false,
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
yield headsetService.endCall(conversationId, false);
|
|
437
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
438
|
+
jest.advanceTimersByTime(3000);
|
|
439
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
|
|
440
|
+
}));
|
|
441
|
+
it('should not delete headset state after time if there is no removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
442
|
+
const conversationId = 'myconvoId5';
|
|
443
|
+
plantronics.isConnected = true;
|
|
444
|
+
headsetService['headsetConversationStates'] = {
|
|
445
|
+
[conversationId]: {
|
|
446
|
+
conversationId,
|
|
447
|
+
held: false,
|
|
448
|
+
muted: false,
|
|
449
|
+
offHook: true,
|
|
450
|
+
ringing: false,
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
yield headsetService.endCall(conversationId, false);
|
|
454
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
455
|
+
delete headsetService['headsetConversationStates'][conversationId].removeTimer;
|
|
456
|
+
jest.advanceTimersByTime(3000);
|
|
457
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
458
|
+
}));
|
|
459
|
+
it('should call endCall on the selected implementation when the implementation is connected', () => {
|
|
460
|
+
const conversationId = 'convoId123';
|
|
461
|
+
const hasOtherActiveCalls = false;
|
|
462
|
+
plantronics.isConnected = true;
|
|
463
|
+
headsetService['headsetConversationStates'] = {
|
|
464
|
+
'convoId123': {
|
|
465
|
+
offHook: true,
|
|
466
|
+
muted: false,
|
|
467
|
+
held: false,
|
|
468
|
+
ringing: false,
|
|
469
|
+
conversationId: 'convoId123'
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
headsetService.endCall(conversationId, hasOtherActiveCalls);
|
|
473
|
+
expect(plantronics.endCall).toHaveBeenCalledWith(conversationId, hasOtherActiveCalls);
|
|
474
|
+
expect(headsetService['headsetConversationStates']['convoId123'].removeTimer).toBeDefined();
|
|
475
|
+
jest.advanceTimersByTime(2500);
|
|
476
|
+
expect(headsetService['headsetConversationStates']).toStrictEqual({});
|
|
477
|
+
});
|
|
478
|
+
it('shouldnot call endCall on the selected implmenetation when the implementation is not connected', () => {
|
|
479
|
+
const conversationId = '1234';
|
|
480
|
+
const hasOtherActiveCalls = false;
|
|
481
|
+
plantronics.isConnected = false;
|
|
482
|
+
headsetService.endCall(conversationId, hasOtherActiveCalls);
|
|
483
|
+
expect(plantronics.endCall).not.toHaveBeenCalled();
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
describe('endAllCalls', () => {
|
|
487
|
+
beforeEach(() => {
|
|
488
|
+
jest.useFakeTimers();
|
|
489
|
+
headsetService = headset_1.default.getInstance(config);
|
|
490
|
+
jest.spyOn(plantronics, 'endAllCalls').mockResolvedValue({});
|
|
491
|
+
headsetService.selectedImplementation = plantronics;
|
|
492
|
+
});
|
|
493
|
+
afterEach(() => {
|
|
494
|
+
jest.useRealTimers();
|
|
495
|
+
jest.resetAllMocks();
|
|
496
|
+
});
|
|
497
|
+
it('should not setTimeout if there is already a remove timer', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
498
|
+
plantronics.isConnected = true;
|
|
499
|
+
headsetService['headsetConversationStates'] = {
|
|
500
|
+
'myConvoId': {
|
|
501
|
+
conversationId: 'myConvoId',
|
|
502
|
+
held: false,
|
|
503
|
+
muted: false,
|
|
504
|
+
offHook: true,
|
|
505
|
+
ringing: false,
|
|
506
|
+
removeTimer: 12525
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
const timeoutSpy = jest.spyOn(window, 'setTimeout');
|
|
510
|
+
yield headsetService.endAllCalls();
|
|
511
|
+
expect(timeoutSpy).not.toHaveBeenCalled();
|
|
512
|
+
timeoutSpy.mockRestore();
|
|
513
|
+
}));
|
|
514
|
+
it('should not delete if theres no remove timer', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
515
|
+
plantronics.isConnected = true;
|
|
516
|
+
const conversationId = 'myConvoId15521';
|
|
517
|
+
headsetService['headsetConversationStates'] = {
|
|
518
|
+
[conversationId]: {
|
|
519
|
+
conversationId,
|
|
520
|
+
held: false,
|
|
521
|
+
muted: false,
|
|
522
|
+
offHook: true,
|
|
523
|
+
ringing: false,
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
yield headsetService.endAllCalls();
|
|
527
|
+
delete headsetService['headsetConversationStates'][conversationId].removeTimer;
|
|
528
|
+
jest.advanceTimersByTime(3000);
|
|
529
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
|
|
530
|
+
}));
|
|
531
|
+
it('should delete headset state', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
532
|
+
plantronics.isConnected = true;
|
|
533
|
+
const conversationId = 'myConvoId151';
|
|
534
|
+
headsetService['headsetConversationStates'] = {
|
|
535
|
+
[conversationId]: {
|
|
536
|
+
conversationId,
|
|
537
|
+
held: false,
|
|
538
|
+
muted: false,
|
|
539
|
+
offHook: true,
|
|
540
|
+
ringing: false,
|
|
541
|
+
}
|
|
542
|
+
};
|
|
543
|
+
yield headsetService.endAllCalls();
|
|
544
|
+
jest.advanceTimersByTime(3000);
|
|
545
|
+
expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
|
|
546
|
+
}));
|
|
547
|
+
it('should call endAllCalls on the selected implementation when the implementation is connected', () => {
|
|
548
|
+
plantronics.isConnected = true;
|
|
549
|
+
headsetService['headsetConversationStates'] = {
|
|
550
|
+
'convoId123': {
|
|
551
|
+
offHook: true,
|
|
552
|
+
muted: false,
|
|
553
|
+
held: false,
|
|
554
|
+
ringing: false,
|
|
555
|
+
conversationId: 'convoId123'
|
|
556
|
+
},
|
|
557
|
+
'convoId456': {
|
|
558
|
+
offHook: true,
|
|
559
|
+
muted: false,
|
|
560
|
+
held: false,
|
|
561
|
+
ringing: false,
|
|
562
|
+
conversationId: 'convoId456'
|
|
563
|
+
},
|
|
564
|
+
'convoId789': {
|
|
565
|
+
offHook: true,
|
|
566
|
+
muted: false,
|
|
567
|
+
held: false,
|
|
568
|
+
ringing: false,
|
|
569
|
+
conversationId: 'convoId789'
|
|
570
|
+
}
|
|
571
|
+
};
|
|
572
|
+
headsetService.endAllCalls();
|
|
573
|
+
Object.keys(headsetService['headsetConversationStates']).forEach((key) => {
|
|
574
|
+
expect(headsetService['headsetConversationStates'][key].removeTimer).toBeDefined();
|
|
575
|
+
});
|
|
576
|
+
expect(plantronics.endAllCalls).toHaveBeenCalled();
|
|
577
|
+
jest.advanceTimersByTime(2500);
|
|
578
|
+
expect(headsetService['headsetConversationStates']).toStrictEqual({});
|
|
579
|
+
});
|
|
580
|
+
it('shouldnot call endAllCalls on the selected implmenetation when the implementation is not connected', () => {
|
|
581
|
+
plantronics.isConnected = false;
|
|
582
|
+
headsetService.endAllCalls();
|
|
583
|
+
expect(plantronics.endAllCalls).not.toHaveBeenCalled();
|
|
584
|
+
});
|
|
585
|
+
});
|
|
586
|
+
describe('triggerDeviceAnsweredCall', () => {
|
|
587
|
+
Object.defineProperty(window.navigator, 'hid', { get: () => ({
|
|
588
|
+
getDevices: () => { return []; }
|
|
589
|
+
}) });
|
|
590
|
+
Object.defineProperty(window.navigator, 'locks', { get: () => ({}) });
|
|
591
|
+
window.BroadcastChannel = broadcast_channel_1.BroadcastChannel;
|
|
592
|
+
beforeEach(() => {
|
|
593
|
+
headsetService = headset_1.default.getInstance(config);
|
|
594
|
+
});
|
|
595
|
+
it('should return nothing if the selected implementation does not match the vendor passed in from the event', () => {
|
|
596
|
+
const result = headsetService['handleDeviceAnsweredCall']({ vendor: {}, body: { name: 'AcceptCall', code: '1', event: {}, conversationId: 'myconvo' } });
|
|
597
|
+
expect(result).toBeUndefined();
|
|
598
|
+
});
|
|
599
|
+
it('should send a headset event of type DEVICE_ANSWERED_CALL', (done) => {
|
|
600
|
+
const testEvent = { vendor: plantronics, body: { name: 'AcceptCall', code: '1', event: {} } };
|
|
601
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
602
|
+
expect(event.event).toBe('deviceAnsweredCall');
|
|
603
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
604
|
+
done();
|
|
605
|
+
});
|
|
606
|
+
headsetService.selectedImplementation = plantronics;
|
|
607
|
+
headsetService['handleDeviceAnsweredCall'](testEvent);
|
|
608
|
+
});
|
|
609
|
+
});
|
|
610
|
+
describe('triggerDeviceRejectedCall', () => {
|
|
611
|
+
beforeEach(() => {
|
|
612
|
+
headsetService = headset_1.default.getInstance(config);
|
|
613
|
+
});
|
|
614
|
+
it('should return nothing if the selected implementation does not match the vendor passed in from the event', () => {
|
|
615
|
+
const result = headsetService['handleDeviceRejectedCall']({ vendor: {}, body: { name: 'CallRejected', conversationId: 'a1b2c3' } });
|
|
616
|
+
expect(result).toBeUndefined();
|
|
617
|
+
});
|
|
618
|
+
it('should send a headset event of type DEVICE_REJECTED_CALL', (done) => {
|
|
619
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
620
|
+
expect(event.event).toBe('deviceRejectedCall');
|
|
621
|
+
expect(event.payload).toStrictEqual({ conversationId: 'a1b2c3', name: 'callrejected' });
|
|
622
|
+
done();
|
|
623
|
+
});
|
|
624
|
+
headsetService.selectedImplementation = plantronics;
|
|
625
|
+
const testEvent = { vendor: plantronics, body: { name: 'callrejected', conversationId: 'a1b2c3' } };
|
|
626
|
+
headsetService['handleDeviceRejectedCall'](testEvent);
|
|
627
|
+
});
|
|
628
|
+
});
|
|
629
|
+
describe('triggerDeviceEndedCall', () => {
|
|
630
|
+
beforeEach(() => {
|
|
631
|
+
headsetService = headset_1.default.getInstance(config);
|
|
632
|
+
jest.resetAllMocks();
|
|
633
|
+
});
|
|
634
|
+
it('should send a headset event of type DEVICE_ENDED_CALL', (done) => {
|
|
635
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
636
|
+
expect(event.event).toBe('deviceEndedCall');
|
|
637
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
638
|
+
done();
|
|
639
|
+
expect(event.event).toBe('loggableEvent');
|
|
640
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
641
|
+
done();
|
|
642
|
+
});
|
|
643
|
+
const testEvent = { vendor: {}, body: { name: 'TerminateCall', code: '2', event: {}, conversationId: 'convo421' } };
|
|
644
|
+
headsetService['handleDeviceEndedCall'](testEvent);
|
|
645
|
+
});
|
|
646
|
+
});
|
|
647
|
+
describe('triggerDeviceMuteStatusChanged', () => {
|
|
648
|
+
beforeEach(() => {
|
|
649
|
+
headsetService = headset_1.default.getInstance(config);
|
|
650
|
+
});
|
|
651
|
+
it('should send a headset event of type DEVICE_MUTE_STATUS_CHANGED', (done) => {
|
|
652
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
653
|
+
expect(event.event).toBe('deviceMuteStatusChanged');
|
|
654
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
655
|
+
done();
|
|
656
|
+
});
|
|
657
|
+
const testEvent = { vendor: {}, body: { name: 'Unmute', code: '12', event: {}, isMuted: false } };
|
|
658
|
+
headsetService['handleDeviceMuteStatusChanged'](testEvent);
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
describe('triggerDeviceHoldStatusChanged', () => {
|
|
662
|
+
beforeEach(() => {
|
|
663
|
+
headsetService = headset_1.default.getInstance(config);
|
|
664
|
+
});
|
|
665
|
+
it('should send a headset event of type DEVICE_HOLD_STATUS_CHANGED', (done) => {
|
|
666
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
667
|
+
expect(event.event).toBe('deviceHoldStatusChanged');
|
|
668
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
669
|
+
done();
|
|
670
|
+
});
|
|
671
|
+
const testEvent = { vendor: {}, body: { name: 'HoldCall', code: '3', event: {}, holdRequested: true, toggle: false, conversationId: 'convo41556' } };
|
|
672
|
+
headsetService['handleDeviceHoldStatusChanged'](testEvent);
|
|
673
|
+
});
|
|
674
|
+
});
|
|
675
|
+
describe('handleWebHidPermissionRequested', () => {
|
|
676
|
+
beforeEach(() => {
|
|
677
|
+
headsetService = headset_1.default.getInstance(config);
|
|
678
|
+
});
|
|
679
|
+
it('should send a headset event of type webHidPermissionRequested', (done) => {
|
|
680
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
681
|
+
expect(event.event).toBe(consumed_headset_events_1.HeadsetEvents.webHidPermissionRequested);
|
|
682
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
683
|
+
done();
|
|
684
|
+
});
|
|
685
|
+
const testEvent = {
|
|
686
|
+
vendor: {},
|
|
687
|
+
body: {
|
|
688
|
+
callback: () => { return; }
|
|
689
|
+
}
|
|
690
|
+
};
|
|
691
|
+
headsetService['handleWebHidPermissionRequested'](testEvent);
|
|
692
|
+
});
|
|
693
|
+
});
|
|
694
|
+
describe('triggerDeviceLogs', () => {
|
|
695
|
+
beforeEach(() => {
|
|
696
|
+
headsetService = headset_1.default.getInstance(config);
|
|
697
|
+
});
|
|
698
|
+
it('should send the "loggableEvent" event to the observable', (done) => {
|
|
699
|
+
headsetService.headsetEvents$.subscribe((event) => {
|
|
700
|
+
expect(event.event).toBe('loggableEvent');
|
|
701
|
+
expect(event.payload).toStrictEqual(testEvent.body);
|
|
702
|
+
done();
|
|
703
|
+
});
|
|
704
|
+
const testEvent = { vendor: plantronics, body: { name: 'CallRinging', code: 7, event: {} } };
|
|
705
|
+
headsetService['handleDeviceLogs'](testEvent);
|
|
706
|
+
});
|
|
707
|
+
});
|
|
708
|
+
describe('external mic change', () => {
|
|
709
|
+
beforeEach(() => {
|
|
710
|
+
headsetService = headset_1.default.getInstance(config);
|
|
711
|
+
});
|
|
712
|
+
it('should check a values label to determine which microphone is selected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
713
|
+
const changeImplementationSpy = jest.spyOn(headsetService, 'changeImplementation');
|
|
714
|
+
const disconnectSpy = jest.spyOn(sennheiser, 'disconnect');
|
|
715
|
+
headsetService['jabra'].isSupported = jest.fn().mockReturnValue(true);
|
|
716
|
+
headsetService['plantronics'].isSupported = jest.fn().mockReturnValue(true);
|
|
717
|
+
headsetService['sennheiser'].isSupported = jest.fn().mockReturnValue(true);
|
|
718
|
+
headsetService.activeMicChange('jabra');
|
|
719
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(jabra, 'jabra');
|
|
720
|
+
headsetService.activeMicChange('plantronics test');
|
|
721
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(plantronics, 'plantronics test');
|
|
722
|
+
headsetService.activeMicChange('plt test');
|
|
723
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(plantronics, 'plt test');
|
|
724
|
+
headsetService.activeMicChange('sennheiser test');
|
|
725
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(sennheiser, 'sennheiser test');
|
|
726
|
+
headsetService.activeMicChange('senn test');
|
|
727
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(sennheiser, 'senn test');
|
|
728
|
+
yield headsetService.activeMicChange('epos test');
|
|
729
|
+
expect(changeImplementationSpy).toHaveBeenCalledWith(sennheiser, 'epos test');
|
|
730
|
+
headsetService.selectedImplementation = sennheiser;
|
|
731
|
+
headsetService.activeMicChange(undefined);
|
|
732
|
+
expect(headsetService.selectedImplementation).toBeNull();
|
|
733
|
+
expect(disconnectSpy).toHaveBeenCalled();
|
|
734
|
+
headsetService.activeMicChange('test test');
|
|
735
|
+
expect(disconnectSpy).toHaveBeenCalled();
|
|
736
|
+
}));
|
|
737
|
+
});
|
|
738
|
+
describe('retryConnection', () => {
|
|
739
|
+
beforeEach(() => {
|
|
740
|
+
headsetService = headset_1.default.getInstance(config);
|
|
741
|
+
});
|
|
742
|
+
it('should reject if not connected', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
743
|
+
headsetService.selectedImplementation = null;
|
|
744
|
+
yield expect(() => headsetService.retryConnection('Test Label')).rejects.toThrow('No active headset');
|
|
745
|
+
}));
|
|
746
|
+
it('should call connect', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
747
|
+
const impl = {
|
|
748
|
+
connect: jest.fn().mockResolvedValue(null)
|
|
749
|
+
};
|
|
750
|
+
headsetService.selectedImplementation = impl;
|
|
751
|
+
yield headsetService.retryConnection('Test Label');
|
|
752
|
+
expect(impl.connect).toHaveBeenCalledWith('Test Label');
|
|
753
|
+
}));
|
|
754
|
+
});
|
|
755
|
+
describe('connectionStatus', () => {
|
|
756
|
+
it('should return proper connection status', () => {
|
|
757
|
+
headsetService.selectedImplementation = plantronics;
|
|
758
|
+
headsetService.selectedImplementation.isConnected = true;
|
|
759
|
+
expect(headsetService.connectionStatus()).toBe('running');
|
|
760
|
+
headsetService.selectedImplementation.isConnecting = true;
|
|
761
|
+
headsetService.selectedImplementation.isConnected = false;
|
|
762
|
+
expect(headsetService.connectionStatus()).toBe('checking');
|
|
763
|
+
headsetService.selectedImplementation.isConnecting = false;
|
|
764
|
+
expect(headsetService.connectionStatus()).toBe('notRunning');
|
|
765
|
+
headsetService.selectedImplementation = null;
|
|
766
|
+
expect(headsetService.connectionStatus()).toBe('noVendor');
|
|
767
|
+
});
|
|
768
|
+
});
|
|
769
|
+
describe('isDifferentState', () => {
|
|
770
|
+
it('should return the negated value of state after finding a value in this.headsetConversationStates', () => {
|
|
771
|
+
headsetService['headsetConversationStates'] = {
|
|
772
|
+
'convoId123': {
|
|
773
|
+
offHook: true,
|
|
774
|
+
muted: false,
|
|
775
|
+
held: false,
|
|
776
|
+
ringing: false,
|
|
777
|
+
conversationId: 'convoId123'
|
|
778
|
+
}
|
|
779
|
+
};
|
|
780
|
+
expect(headsetService['isDifferentState']({ conversationId: 'convoId123', state: {} })).toBe(false);
|
|
781
|
+
});
|
|
782
|
+
it('should check the passed in state if no state is pulled from this.headsetConversationStates', () => {
|
|
783
|
+
const testState = {
|
|
784
|
+
offHook: true,
|
|
785
|
+
muted: false,
|
|
786
|
+
held: false,
|
|
787
|
+
ringing: false,
|
|
788
|
+
conversationId: 'convoId123'
|
|
789
|
+
};
|
|
790
|
+
expect(headsetService['isDifferentState']({ conversationId: '828256', state: testState })).toStrictEqual(true);
|
|
791
|
+
});
|
|
792
|
+
});
|
|
793
|
+
describe('updateHeadsetState', () => {
|
|
794
|
+
it('should return false if the isDifferentState returns false, meaning the states are the same', () => {
|
|
795
|
+
headsetService['isDifferentState'] = jest.fn().mockReturnValueOnce(false);
|
|
796
|
+
expect(headsetService['updateHeadsetState']({ conversationId: 'convoId123', state: {} })).toBe(false);
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
});
|
|
800
|
+
//# sourceMappingURL=headset.test.js.map
|