softphone-vendor-headsets 1.0.1 → 2.0.0-develop.11

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.
Files changed (216) hide show
  1. package/README.md +319 -3
  2. package/dist/1.softhphone-vendor-headsets.js +1 -1
  3. package/dist/1.softhphone-vendor-headsets.js.map +1 -1
  4. package/dist/2.softhphone-vendor-headsets.js +1 -1
  5. package/dist/2.softhphone-vendor-headsets.js.map +1 -1
  6. package/dist/3.softhphone-vendor-headsets.js +1 -1
  7. package/dist/3.softhphone-vendor-headsets.js.map +1 -1
  8. package/dist/cjs/src/config/i18n.js +1 -0
  9. package/dist/cjs/src/config/i18n.js.map +1 -1
  10. package/dist/cjs/src/library/index.d.ts +0 -1
  11. package/dist/cjs/src/library/index.js +5 -2
  12. package/dist/cjs/src/library/index.js.map +1 -1
  13. package/dist/cjs/src/library/services/headset.d.ts +5 -1
  14. package/dist/cjs/src/library/services/headset.js +170 -18
  15. package/dist/cjs/src/library/services/headset.js.map +1 -1
  16. package/dist/cjs/src/library/services/headset.test.js +503 -21
  17. package/dist/cjs/src/library/services/headset.test.js.map +1 -1
  18. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +5 -4
  19. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +75 -54
  20. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -1
  21. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +72 -62
  22. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -1
  23. package/dist/{es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.d.ts → cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts} +10 -0
  24. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/{jabra-native-types.js → types.js} +9 -2
  25. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
  26. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.d.ts +15 -14
  27. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js +177 -118
  28. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -1
  29. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js +371 -258
  30. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -1
  31. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
  32. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +11 -0
  33. package/dist/cjs/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
  34. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +11 -1
  35. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +39 -39
  36. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -1
  37. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +35 -35
  38. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -1
  39. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +101 -9
  40. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +168 -51
  41. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -1
  42. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +6 -2
  43. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js +56 -36
  44. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -1
  45. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js +408 -221
  46. package/dist/cjs/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -1
  47. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +1 -3
  48. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js +61 -87
  49. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -1
  50. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +140 -233
  51. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -1
  52. package/dist/{es/src/library/services/vendor-implementations/sennheiser/sennheiser-events.d.ts → cjs/src/library/services/vendor-implementations/sennheiser/types.d.ts} +19 -0
  53. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/{sennheiser-events.js → types.js} +8 -2
  54. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
  55. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.d.ts +7 -27
  56. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js +6 -6
  57. package/dist/cjs/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -1
  58. package/dist/cjs/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -1
  59. package/dist/{es/src/library/test-utils.test.d.ts → cjs/src/library/test-utils.d.ts} +1 -1
  60. package/dist/cjs/src/library/{test-utils.test.js → test-utils.js} +12 -9
  61. package/dist/cjs/src/library/test-utils.js.map +1 -0
  62. package/dist/cjs/src/library/types/consumed-headset-events.d.ts +8 -22
  63. package/dist/cjs/src/library/types/consumed-headset-events.js +0 -1
  64. package/dist/cjs/src/library/types/consumed-headset-events.js.map +1 -1
  65. package/dist/cjs/src/library/types/emitted-headset-events.d.ts +14 -11
  66. package/dist/cjs/src/library/types/headset-states.d.ts +10 -0
  67. package/dist/cjs/src/library/types/{jabra-request.js → headset-states.js} +1 -1
  68. package/dist/cjs/src/library/types/headset-states.js.map +1 -0
  69. package/dist/cjs/src/library/utils.js.map +1 -1
  70. package/dist/cjs/src/library/utils.test.js +2 -2
  71. package/dist/cjs/src/library/utils.test.js.map +1 -1
  72. package/dist/cjs/src/mocks/call.js +2 -1
  73. package/dist/cjs/src/mocks/call.js.map +1 -1
  74. package/dist/cjs/src/mocks/device-service.js +1 -0
  75. package/dist/cjs/src/mocks/device-service.js.map +1 -1
  76. package/dist/deploy-info.json +33 -195
  77. package/dist/es/src/config/i18n.js +1 -0
  78. package/dist/es/src/config/i18n.js.map +1 -1
  79. package/dist/es/src/library/index.d.ts +0 -1
  80. package/dist/es/src/library/index.js +0 -1
  81. package/dist/es/src/library/index.js.map +1 -1
  82. package/dist/es/src/library/services/headset.d.ts +5 -1
  83. package/dist/es/src/library/services/headset.js +170 -18
  84. package/dist/es/src/library/services/headset.js.map +1 -1
  85. package/dist/es/src/library/services/headset.test.js +503 -21
  86. package/dist/es/src/library/services/headset.test.js.map +1 -1
  87. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.d.ts +5 -4
  88. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js +60 -39
  89. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.js.map +1 -1
  90. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js +20 -14
  91. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native.test.js.map +1 -1
  92. package/dist/{cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.d.ts → es/src/library/services/vendor-implementations/jabra/jabra-native/types.d.ts} +10 -0
  93. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/{jabra-native-types.js → types.js} +8 -1
  94. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/types.js.map +1 -0
  95. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.d.ts +15 -14
  96. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js +181 -122
  97. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.js.map +1 -1
  98. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js +373 -260
  99. package/dist/es/src/library/services/vendor-implementations/jabra/jabra.test.js.map +1 -1
  100. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.d.ts +7 -0
  101. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js +7 -0
  102. package/dist/es/src/library/services/vendor-implementations/jabra/mock-jabra-sdk.js.map +1 -0
  103. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.d.ts +11 -1
  104. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js +38 -38
  105. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.js.map +1 -1
  106. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js +36 -36
  107. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-call-events.test.js.map +1 -1
  108. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.d.ts +101 -9
  109. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js +169 -52
  110. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics-test-responses.js.map +1 -1
  111. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.d.ts +6 -2
  112. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js +56 -36
  113. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.js.map +1 -1
  114. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js +403 -216
  115. package/dist/es/src/library/services/vendor-implementations/plantronics/plantronics.test.js.map +1 -1
  116. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.d.ts +1 -3
  117. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js +16 -46
  118. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.js.map +1 -1
  119. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js +37 -134
  120. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser.test.js.map +1 -1
  121. package/dist/{cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-events.d.ts → es/src/library/services/vendor-implementations/sennheiser/types.d.ts} +19 -0
  122. package/dist/es/src/library/services/vendor-implementations/sennheiser/{sennheiser-events.js → types.js} +7 -1
  123. package/dist/es/src/library/services/vendor-implementations/sennheiser/types.js.map +1 -0
  124. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.d.ts +7 -27
  125. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js +6 -6
  126. package/dist/es/src/library/services/vendor-implementations/vendor-implementation.js.map +1 -1
  127. package/dist/es/src/library/services/vendor-implementations/vendor-implemntation.test.js.map +1 -1
  128. package/dist/{cjs/src/library/test-utils.test.d.ts → es/src/library/test-utils.d.ts} +1 -1
  129. package/dist/es/src/library/{test-utils.test.js → test-utils.js} +10 -8
  130. package/dist/es/src/library/test-utils.js.map +1 -0
  131. package/dist/es/src/library/types/consumed-headset-events.d.ts +8 -22
  132. package/dist/es/src/library/types/consumed-headset-events.js +0 -1
  133. package/dist/es/src/library/types/consumed-headset-events.js.map +1 -1
  134. package/dist/es/src/library/types/emitted-headset-events.d.ts +14 -11
  135. package/dist/es/src/library/types/headset-states.d.ts +10 -0
  136. package/dist/es/src/library/types/headset-states.js +2 -0
  137. package/dist/es/src/library/types/headset-states.js.map +1 -0
  138. package/dist/es/src/library/utils.js.map +1 -1
  139. package/dist/es/src/mocks/call.js +1 -0
  140. package/dist/es/src/mocks/call.js.map +1 -1
  141. package/dist/es/src/mocks/device-service.js +1 -0
  142. package/dist/es/src/mocks/device-service.js.map +1 -1
  143. package/dist/softhphone-vendor-headsets.js +4 -19
  144. package/dist/softhphone-vendor-headsets.js.map +1 -1
  145. package/package.json +82 -88
  146. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.d.ts +0 -13
  147. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js +0 -18
  148. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js.map +0 -1
  149. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.d.ts +0 -12
  150. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js +0 -16
  151. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js.map +0 -1
  152. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.d.ts +0 -5
  153. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js +0 -10
  154. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js.map +0 -1
  155. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.d.ts +0 -38
  156. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js +0 -251
  157. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js.map +0 -1
  158. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.d.ts +0 -1
  159. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js +0 -573
  160. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js.map +0 -1
  161. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.d.ts +0 -13
  162. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.js +0 -18
  163. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-commands.js.map +0 -1
  164. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.d.ts +0 -6
  165. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js +0 -11
  166. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js.map +0 -1
  167. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.d.ts +0 -4
  168. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js +0 -3
  169. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js.map +0 -1
  170. package/dist/cjs/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.js.map +0 -1
  171. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.d.ts +0 -5
  172. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js +0 -10
  173. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js.map +0 -1
  174. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-events.js.map +0 -1
  175. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.d.ts +0 -16
  176. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js +0 -3
  177. package/dist/cjs/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js.map +0 -1
  178. package/dist/cjs/src/library/test-utils.test.js.map +0 -1
  179. package/dist/cjs/src/library/types/jabra-request.d.ts +0 -3
  180. package/dist/cjs/src/library/types/jabra-request.js.map +0 -1
  181. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.d.ts +0 -13
  182. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js +0 -15
  183. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-commands.js.map +0 -1
  184. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.d.ts +0 -12
  185. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js +0 -13
  186. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-event-translation.js.map +0 -1
  187. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.d.ts +0 -5
  188. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js +0 -7
  189. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome-requested-events.js.map +0 -1
  190. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.d.ts +0 -38
  191. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js +0 -248
  192. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.js.map +0 -1
  193. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.d.ts +0 -1
  194. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js +0 -568
  195. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-chrome/jabra-chrome.test.js.map +0 -1
  196. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.d.ts +0 -13
  197. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.js +0 -15
  198. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-commands.js.map +0 -1
  199. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.d.ts +0 -6
  200. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js +0 -8
  201. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-commands.js.map +0 -1
  202. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.d.ts +0 -4
  203. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js +0 -2
  204. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-heaset-state.js.map +0 -1
  205. package/dist/es/src/library/services/vendor-implementations/jabra/jabra-native/jabra-native-types.js.map +0 -1
  206. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.d.ts +0 -5
  207. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js +0 -7
  208. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-event-types.js.map +0 -1
  209. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-events.js.map +0 -1
  210. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.d.ts +0 -16
  211. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js +0 -2
  212. package/dist/es/src/library/services/vendor-implementations/sennheiser/sennheiser-payload.js.map +0 -1
  213. package/dist/es/src/library/test-utils.test.js.map +0 -1
  214. package/dist/es/src/library/types/jabra-request.d.ts +0 -3
  215. package/dist/es/src/library/types/jabra-request.js +0 -2
  216. package/dist/es/src/library/types/jabra-request.js.map +0 -1
@@ -21,6 +21,7 @@ const jabra_1 = __importDefault(require("./vendor-implementations/jabra/jabra"))
21
21
  require("regenerator-runtime");
22
22
  const broadcast_channel_1 = require("broadcast-channel");
23
23
  const consumed_headset_events_1 = require("../types/consumed-headset-events");
24
+ const rxjs_1 = require("rxjs");
24
25
  jest.mock('broadcast-channel');
25
26
  describe('HeadsetService', () => {
26
27
  let plantronics;
@@ -29,10 +30,8 @@ describe('HeadsetService', () => {
29
30
  let jabraNative;
30
31
  let jabra;
31
32
  let headsetService;
32
- // let jabraSdk: Promise<IApi>;
33
33
  const config = { logger: console };
34
34
  beforeEach(() => {
35
- // jabraSdk = initializeSdk(subject);
36
35
  headsetService = headset_1.default.getInstance(Object.assign(Object.assign({}, config), { createNew: true }));
37
36
  plantronics = plantronics_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'Plantronics' }));
38
37
  sennheiser = sennheiser_1.default.getInstance(Object.assign(Object.assign({}, config), { vendorName: 'Sennheiser' }));
@@ -180,35 +179,123 @@ describe('HeadsetService', () => {
180
179
  afterEach(() => {
181
180
  jest.resetAllMocks();
182
181
  });
182
+ it('should do nothing if already in the expected state', () => __awaiter(void 0, void 0, void 0, function* () {
183
+ const conversationId = 'convoId241123';
184
+ plantronics.isConnected = true;
185
+ headsetService['headsetConversationStates'] = {
186
+ [conversationId]: {
187
+ offHook: true,
188
+ muted: false,
189
+ held: true,
190
+ ringing: false,
191
+ conversationId
192
+ }
193
+ };
194
+ yield headsetService.answerCall(conversationId);
195
+ expect(plantronics.answerCall).not.toHaveBeenCalled();
196
+ }));
183
197
  it('should call answerCall on the selected implementation when the implementation is connected', () => {
184
- const conversationId = '1234';
198
+ const conversationId = 'convoId123';
185
199
  plantronics.isConnected = true;
200
+ headsetService['headsetConversationStates'] = {
201
+ 'convoId123': {
202
+ offHook: false,
203
+ muted: false,
204
+ held: false,
205
+ ringing: true,
206
+ conversationId: 'convoId123'
207
+ }
208
+ };
186
209
  headsetService.answerCall(conversationId);
187
210
  expect(plantronics.answerCall).toHaveBeenCalledWith(conversationId);
188
211
  });
189
- it('shouldnot call answerCall on the selected implmenetation when the implementation is not connected', () => {
212
+ it('should not call answerCall on the selected implmenetation when the implementation is not connected', () => {
190
213
  const conversationId = '1234';
191
214
  plantronics.isConnected = false;
192
215
  headsetService.answerCall(conversationId);
193
216
  expect(plantronics.answerCall).not.toHaveBeenCalled();
194
217
  });
195
218
  });
196
- describe('answerCall', () => {
219
+ describe('rejectCall', () => {
197
220
  beforeEach(() => {
221
+ jest.useFakeTimers();
198
222
  headsetService = headset_1.default.getInstance(config);
199
223
  jest.spyOn(plantronics, 'rejectCall').mockResolvedValue({});
200
224
  headsetService.selectedImplementation = plantronics;
201
225
  });
202
226
  afterEach(() => {
203
227
  jest.resetAllMocks();
228
+ jest.useRealTimers();
204
229
  });
230
+ it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
231
+ const conversationId = 'convoId12523';
232
+ plantronics.isConnected = true;
233
+ headsetService['headsetConversationStates'] = {
234
+ [conversationId]: {
235
+ offHook: false,
236
+ muted: false,
237
+ held: false,
238
+ ringing: false,
239
+ conversationId
240
+ }
241
+ };
242
+ yield headsetService.rejectCall(conversationId);
243
+ expect(plantronics.rejectCall).not.toHaveBeenCalled();
244
+ }));
245
+ it('should not delete the headset state if there is no removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
246
+ const conversationId = 'convoId12523';
247
+ plantronics.isConnected = true;
248
+ headsetService['headsetConversationStates'] = {
249
+ [conversationId]: {
250
+ offHook: false,
251
+ muted: false,
252
+ held: false,
253
+ ringing: true,
254
+ conversationId
255
+ }
256
+ };
257
+ yield headsetService.rejectCall(conversationId);
258
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
259
+ delete headsetService['headsetConversationStates'][conversationId].removeTimer;
260
+ jest.advanceTimersByTime(3000);
261
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
262
+ }));
263
+ it('should delete the headset state if there is removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
264
+ const conversationId = 'convoId12523';
265
+ plantronics.isConnected = true;
266
+ headsetService['headsetConversationStates'] = {
267
+ [conversationId]: {
268
+ offHook: false,
269
+ muted: false,
270
+ held: false,
271
+ ringing: true,
272
+ conversationId
273
+ }
274
+ };
275
+ yield headsetService.rejectCall(conversationId);
276
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
277
+ jest.advanceTimersByTime(3000);
278
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
279
+ }));
205
280
  it('should call rejectCall on the selected implementation when the implementation is connected', () => {
206
- const conversationId = '1234';
281
+ const conversationId = 'convoId123';
207
282
  plantronics.isConnected = true;
283
+ headsetService['headsetConversationStates'] = {
284
+ 'convoId123': {
285
+ offHook: false,
286
+ muted: false,
287
+ held: false,
288
+ ringing: true,
289
+ conversationId: 'convoId123'
290
+ }
291
+ };
208
292
  headsetService.rejectCall(conversationId);
209
293
  expect(plantronics.rejectCall).toHaveBeenCalledWith(conversationId);
294
+ expect(headsetService['headsetConversationStates']['convoId123'].removeTimer).toBeDefined();
295
+ jest.advanceTimersByTime(2500);
296
+ expect(headsetService['headsetConversationStates']).toStrictEqual({});
210
297
  });
211
- it('shouldnot call answerCall on the selected implmenetation when the implementation is not connected', () => {
298
+ it('should not call rejectCall on the selected implmenetation when the implementation is not connected', () => {
212
299
  const conversationId = '1234';
213
300
  plantronics.isConnected = false;
214
301
  headsetService.rejectCall(conversationId);
@@ -224,10 +311,35 @@ describe('HeadsetService', () => {
224
311
  afterEach(() => {
225
312
  jest.resetAllMocks();
226
313
  });
314
+ it('should do nothing if all calls are muted', () => __awaiter(void 0, void 0, void 0, function* () {
315
+ const conversationId = 'convoId123';
316
+ plantronics.isConnected = true;
317
+ headsetService['headsetConversationStates'] = {
318
+ [conversationId]: {
319
+ offHook: true,
320
+ muted: true,
321
+ held: true,
322
+ ringing: false,
323
+ conversationId
324
+ }
325
+ };
326
+ yield headsetService.setMute(true);
327
+ expect(plantronics.setMute).not.toHaveBeenCalled();
328
+ }));
227
329
  it('should call setMute on the selected implementation when the implementation is connected', () => {
228
330
  plantronics.isConnected = true;
331
+ headsetService['headsetConversationStates'] = {
332
+ 'convoId123': {
333
+ offHook: false,
334
+ muted: false,
335
+ held: false,
336
+ ringing: true,
337
+ conversationId: 'convoId123'
338
+ }
339
+ };
229
340
  headsetService.setMute(true);
230
341
  expect(plantronics.setMute).toHaveBeenCalledWith(true);
342
+ expect(headsetService['headsetConversationStates']['convoId123'].muted).toBe(true);
231
343
  });
232
344
  it('shouldnot call setMute on the selected implmenetation when the implementation is not connected', () => {
233
345
  plantronics.isConnected = false;
@@ -244,9 +356,33 @@ describe('HeadsetService', () => {
244
356
  afterEach(() => {
245
357
  jest.resetAllMocks();
246
358
  });
359
+ it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
360
+ const conversationId = 'convoId123';
361
+ plantronics.isConnected = true;
362
+ headsetService['headsetConversationStates'] = {
363
+ [conversationId]: {
364
+ offHook: true,
365
+ muted: false,
366
+ held: true,
367
+ ringing: false,
368
+ conversationId
369
+ }
370
+ };
371
+ yield headsetService.setHold(conversationId, true);
372
+ expect(plantronics.setHold).not.toHaveBeenCalled();
373
+ }));
247
374
  it('should call setHold on the selected implementation when the implementation is connected', () => {
248
- const conversationId = '1234';
375
+ const conversationId = 'convoId123';
249
376
  plantronics.isConnected = true;
377
+ headsetService['headsetConversationStates'] = {
378
+ 'convoId123': {
379
+ offHook: true,
380
+ muted: false,
381
+ held: false,
382
+ ringing: false,
383
+ conversationId: 'convoId123'
384
+ }
385
+ };
250
386
  headsetService.setHold(conversationId, true);
251
387
  expect(plantronics.setHold).toHaveBeenCalledWith(conversationId, true);
252
388
  });
@@ -259,19 +395,86 @@ describe('HeadsetService', () => {
259
395
  });
260
396
  describe('endCall', () => {
261
397
  beforeEach(() => {
398
+ jest.useFakeTimers();
262
399
  headsetService = headset_1.default.getInstance(config);
263
400
  jest.spyOn(plantronics, 'endCall').mockResolvedValue({});
264
401
  headsetService.selectedImplementation = plantronics;
265
402
  });
266
403
  afterEach(() => {
404
+ jest.useRealTimers();
267
405
  jest.resetAllMocks();
268
406
  });
407
+ it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
408
+ const conversationId = 'myconvoId5';
409
+ plantronics.isConnected = true;
410
+ headsetService['headsetConversationStates'] = {
411
+ [conversationId]: {
412
+ conversationId,
413
+ held: false,
414
+ muted: false,
415
+ offHook: false,
416
+ ringing: false,
417
+ removeTimer: 12525
418
+ }
419
+ };
420
+ const timeoutSpy = jest.spyOn(window, 'setTimeout');
421
+ headsetService.endCall(conversationId, false);
422
+ expect(timeoutSpy).not.toHaveBeenCalled();
423
+ timeoutSpy.mockRestore();
424
+ }));
425
+ it('should delete headset state after time', () => __awaiter(void 0, void 0, void 0, function* () {
426
+ const conversationId = 'myconvoId5';
427
+ plantronics.isConnected = true;
428
+ headsetService['headsetConversationStates'] = {
429
+ [conversationId]: {
430
+ conversationId,
431
+ held: false,
432
+ muted: false,
433
+ offHook: true,
434
+ ringing: false,
435
+ }
436
+ };
437
+ yield headsetService.endCall(conversationId, false);
438
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
439
+ jest.advanceTimersByTime(3000);
440
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
441
+ }));
442
+ it('should not delete headset state after time if there is no removeTimer', () => __awaiter(void 0, void 0, void 0, function* () {
443
+ const conversationId = 'myconvoId5';
444
+ plantronics.isConnected = true;
445
+ headsetService['headsetConversationStates'] = {
446
+ [conversationId]: {
447
+ conversationId,
448
+ held: false,
449
+ muted: false,
450
+ offHook: true,
451
+ ringing: false,
452
+ }
453
+ };
454
+ yield headsetService.endCall(conversationId, false);
455
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
456
+ delete headsetService['headsetConversationStates'][conversationId].removeTimer;
457
+ jest.advanceTimersByTime(3000);
458
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
459
+ }));
269
460
  it('should call endCall on the selected implementation when the implementation is connected', () => {
270
- const conversationId = '1234';
461
+ const conversationId = 'convoId123';
271
462
  const hasOtherActiveCalls = false;
272
463
  plantronics.isConnected = true;
464
+ headsetService['headsetConversationStates'] = {
465
+ 'convoId123': {
466
+ offHook: true,
467
+ muted: false,
468
+ held: false,
469
+ ringing: false,
470
+ conversationId: 'convoId123'
471
+ }
472
+ };
273
473
  headsetService.endCall(conversationId, hasOtherActiveCalls);
274
474
  expect(plantronics.endCall).toHaveBeenCalledWith(conversationId, hasOtherActiveCalls);
475
+ expect(headsetService['headsetConversationStates']['convoId123'].removeTimer).toBeDefined();
476
+ jest.advanceTimersByTime(2500);
477
+ expect(headsetService['headsetConversationStates']).toStrictEqual({});
275
478
  });
276
479
  it('shouldnot call endCall on the selected implmenetation when the implementation is not connected', () => {
277
480
  const conversationId = '1234';
@@ -283,17 +486,97 @@ describe('HeadsetService', () => {
283
486
  });
284
487
  describe('endAllCalls', () => {
285
488
  beforeEach(() => {
489
+ jest.useFakeTimers();
286
490
  headsetService = headset_1.default.getInstance(config);
287
491
  jest.spyOn(plantronics, 'endAllCalls').mockResolvedValue({});
288
492
  headsetService.selectedImplementation = plantronics;
289
493
  });
290
494
  afterEach(() => {
495
+ jest.useRealTimers();
291
496
  jest.resetAllMocks();
292
497
  });
498
+ it('should not setTimeout if there is already a remove timer', () => __awaiter(void 0, void 0, void 0, function* () {
499
+ plantronics.isConnected = true;
500
+ headsetService['headsetConversationStates'] = {
501
+ 'myConvoId': {
502
+ conversationId: 'myConvoId',
503
+ held: false,
504
+ muted: false,
505
+ offHook: true,
506
+ ringing: false,
507
+ removeTimer: 12525
508
+ }
509
+ };
510
+ const timeoutSpy = jest.spyOn(window, 'setTimeout');
511
+ yield headsetService.endAllCalls();
512
+ expect(timeoutSpy).not.toHaveBeenCalled();
513
+ timeoutSpy.mockRestore();
514
+ }));
515
+ it('should not delete if theres no remove timer', () => __awaiter(void 0, void 0, void 0, function* () {
516
+ plantronics.isConnected = true;
517
+ const conversationId = 'myConvoId15521';
518
+ headsetService['headsetConversationStates'] = {
519
+ [conversationId]: {
520
+ conversationId,
521
+ held: false,
522
+ muted: false,
523
+ offHook: true,
524
+ ringing: false,
525
+ }
526
+ };
527
+ yield headsetService.endAllCalls();
528
+ delete headsetService['headsetConversationStates'][conversationId].removeTimer;
529
+ jest.advanceTimersByTime(3000);
530
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeTruthy();
531
+ }));
532
+ it('should delete headset state', () => __awaiter(void 0, void 0, void 0, function* () {
533
+ plantronics.isConnected = true;
534
+ const conversationId = 'myConvoId151';
535
+ headsetService['headsetConversationStates'] = {
536
+ [conversationId]: {
537
+ conversationId,
538
+ held: false,
539
+ muted: false,
540
+ offHook: true,
541
+ ringing: false,
542
+ }
543
+ };
544
+ yield headsetService.endAllCalls();
545
+ jest.advanceTimersByTime(3000);
546
+ expect(headsetService['headsetConversationStates'][conversationId]).toBeFalsy();
547
+ }));
293
548
  it('should call endAllCalls on the selected implementation when the implementation is connected', () => {
294
549
  plantronics.isConnected = true;
550
+ headsetService['headsetConversationStates'] = {
551
+ 'convoId123': {
552
+ offHook: true,
553
+ muted: false,
554
+ held: false,
555
+ ringing: false,
556
+ conversationId: 'convoId123'
557
+ },
558
+ 'convoId456': {
559
+ offHook: true,
560
+ muted: false,
561
+ held: false,
562
+ ringing: false,
563
+ conversationId: 'convoId456'
564
+ },
565
+ 'convoId789': {
566
+ offHook: true,
567
+ muted: false,
568
+ held: false,
569
+ ringing: false,
570
+ conversationId: 'convoId789'
571
+ }
572
+ };
295
573
  headsetService.endAllCalls();
574
+ Object.keys(headsetService['headsetConversationStates']).forEach((key) => {
575
+ expect(headsetService['headsetConversationStates'][key].removeTimer).toBeDefined();
576
+ });
296
577
  expect(plantronics.endAllCalls).toHaveBeenCalled();
578
+ jest.advanceTimersByTime(2500);
579
+ expect(headsetService['headsetConversationStates']).toStrictEqual({});
297
580
  });
298
581
  it('shouldnot call endAllCalls on the selected implmenetation when the implementation is not connected', () => {
299
582
  plantronics.isConnected = false;
@@ -311,11 +594,20 @@ describe('HeadsetService', () => {
311
594
  headsetService = headset_1.default.getInstance(config);
312
595
  });
313
596
  it('should return nothing if the selected implementation does not match the vendor passed in from the event', () => {
314
- const result = headsetService['handleDeviceAnsweredCall']({ vendor: {}, body: { name: 'AcceptCall', code: '1', event: {} } });
597
+ const result = headsetService['handleDeviceAnsweredCall']({ vendor: {}, body: { name: 'AcceptCall', code: '1', event: {}, conversationId: 'myconvo' } });
315
598
  expect(result).toBeUndefined();
316
599
  });
317
600
  it('should send a headset event of type DEVICE_ANSWERED_CALL', (done) => {
318
- const testEvent = { vendor: plantronics, body: { name: 'AcceptCall', code: '1', event: {} } };
601
+ const testEvent = { vendor: plantronics, body: { name: 'AcceptCall', code: '1', conversationId: 'convoId123', event: {} } };
602
+ headsetService['headsetConversationStates'] = {
603
+ [testEvent.body.conversationId]: {
604
+ offHook: false,
605
+ muted: false,
606
+ held: false,
607
+ ringing: true,
608
+ conversationId: testEvent.body.conversationId
609
+ }
610
+ };
319
611
  headsetService.headsetEvents$.subscribe((event) => {
320
612
  expect(event.event).toBe('deviceAnsweredCall');
321
613
  expect(event.payload).toStrictEqual(testEvent.body);
@@ -323,43 +615,128 @@ describe('HeadsetService', () => {
323
615
  });
324
616
  headsetService.selectedImplementation = plantronics;
325
617
  headsetService['handleDeviceAnsweredCall'](testEvent);
618
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toStrictEqual({
619
+ offHook: true,
620
+ muted: false,
621
+ held: false,
622
+ ringing: false,
623
+ conversationId: testEvent.body.conversationId
624
+ });
326
625
  });
327
626
  });
328
627
  describe('triggerDeviceRejectedCall', () => {
329
628
  beforeEach(() => {
629
+ jest.useFakeTimers();
330
630
  headsetService = headset_1.default.getInstance(config);
331
631
  });
632
+ afterEach(() => {
633
+ jest.useRealTimers();
634
+ });
332
635
  it('should return nothing if the selected implementation does not match the vendor passed in from the event', () => {
333
- const result = headsetService['handleDeviceRejectedCall']({ vendor: {}, body: { conversationId: 'a1b2c3' } });
636
+ const result = headsetService['handleDeviceRejectedCall']({ vendor: {}, body: { name: 'CallRejected', conversationId: 'a1b2c3' } });
334
637
  expect(result).toBeUndefined();
335
638
  });
336
639
  it('should send a headset event of type DEVICE_REJECTED_CALL', (done) => {
337
640
  headsetService.headsetEvents$.subscribe((event) => {
338
641
  expect(event.event).toBe('deviceRejectedCall');
339
- expect(event.payload).toStrictEqual({ conversationId: 'a1b2c3' });
642
+ expect(event.payload).toStrictEqual({ conversationId: 'a1b2c3', name: 'callrejected' });
340
643
  done();
341
644
  });
342
645
  headsetService.selectedImplementation = plantronics;
343
- const testEvent = { vendor: plantronics, body: { conversationId: 'a1b2c3' } };
646
+ const testEvent = { vendor: plantronics, body: { name: 'callrejected', conversationId: 'a1b2c3' } };
647
+ headsetService['headsetConversationStates'] = {
648
+ [testEvent.body.conversationId]: {
649
+ offHook: false,
650
+ muted: false,
651
+ held: false,
652
+ ringing: true,
653
+ conversationId: testEvent.body.conversationId
654
+ }
655
+ };
656
+ headsetService['handleDeviceRejectedCall'](testEvent);
657
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toMatchObject({
658
+ offHook: false,
659
+ muted: false,
660
+ held: false,
661
+ ringing: false,
662
+ conversationId: testEvent.body.conversationId
663
+ });
664
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toHaveProperty('removeTimer');
665
+ jest.advanceTimersByTime(3100);
666
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toBeFalsy();
667
+ });
668
+ it('should do nothing if already in expected state', () => {
669
+ headsetService.selectedImplementation = plantronics;
670
+ const testEvent = { vendor: plantronics, body: { name: 'callrejected', conversationId: 'a1b2c3' } };
671
+ headsetService['headsetConversationStates'] = {
672
+ [testEvent.body.conversationId]: {
673
+ offHook: false,
674
+ muted: false,
675
+ held: false,
676
+ ringing: false,
677
+ conversationId: testEvent.body.conversationId
678
+ }
679
+ };
680
+ const timeoutSpy = jest.spyOn(window, 'setTimeout');
344
681
  headsetService['handleDeviceRejectedCall'](testEvent);
682
+ expect(timeoutSpy).not.toHaveBeenCalled();
683
+ timeoutSpy.mockRestore();
345
684
  });
346
685
  });
347
686
  describe('triggerDeviceEndedCall', () => {
348
687
  beforeEach(() => {
688
+ jest.useFakeTimers();
349
689
  headsetService = headset_1.default.getInstance(config);
690
+ jest.resetAllMocks();
691
+ });
692
+ afterEach(() => {
693
+ jest.useRealTimers();
350
694
  });
351
695
  it('should send a headset event of type DEVICE_ENDED_CALL', (done) => {
352
696
  headsetService.headsetEvents$.subscribe((event) => {
353
697
  expect(event.event).toBe('deviceEndedCall');
354
698
  expect(event.payload).toStrictEqual(testEvent.body);
355
699
  done();
356
- expect(event.event).toBe('loggableEvent');
357
- expect(event.payload).toStrictEqual(testEvent.body);
358
- done();
359
700
  });
360
- const testEvent = { vendor: {}, body: { name: 'TerminateCall', code: '2', event: {} } };
701
+ const testEvent = { vendor: {}, body: { name: 'TerminateCall', code: '2', event: {}, conversationId: 'convo421' } };
702
+ headsetService['headsetConversationStates'] = {
703
+ [testEvent.body.conversationId]: {
704
+ offHook: true,
705
+ muted: false,
706
+ held: false,
707
+ ringing: false,
708
+ conversationId: testEvent.body.conversationId
709
+ }
710
+ };
711
+ headsetService['handleDeviceEndedCall'](testEvent);
712
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toMatchObject({
713
+ offHook: false,
714
+ muted: false,
715
+ held: false,
716
+ ringing: false,
717
+ conversationId: testEvent.body.conversationId
718
+ });
719
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toHaveProperty('removeTimer');
720
+ jest.advanceTimersByTime(3100);
721
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toBeFalsy();
722
+ });
723
+ it('should do nothing if already in expected state', () => __awaiter(void 0, void 0, void 0, function* () {
724
+ const testEvent = { vendor: {}, body: { name: 'TerminateCall', code: '2', event: {}, conversationId: 'convo421' } };
725
+ headsetService['headsetConversationStates'] = {
726
+ [testEvent.body.conversationId]: {
727
+ conversationId: testEvent.body.conversationId,
728
+ held: false,
729
+ muted: false,
730
+ offHook: false,
731
+ ringing: false,
732
+ removeTimer: 12525
733
+ }
734
+ };
735
+ const timeoutSpy = jest.spyOn(window, 'setTimeout');
361
736
  headsetService['handleDeviceEndedCall'](testEvent);
362
- });
737
+ expect(timeoutSpy).not.toHaveBeenCalled();
738
+ timeoutSpy.mockRestore();
739
+ }));
363
740
  });
364
741
  describe('triggerDeviceMuteStatusChanged', () => {
365
742
  beforeEach(() => {
@@ -371,8 +748,39 @@ describe('HeadsetService', () => {
371
748
  expect(event.payload).toStrictEqual(testEvent.body);
372
749
  done();
373
750
  });
374
- const testEvent = { vendor: {}, body: { name: 'Unmute', code: '12', event: {}, isMuted: false } };
751
+ const testEvent = { vendor: {}, body: { name: 'Mute', code: '12', event: {}, isMuted: true, conversationId: 'crazy88' } };
752
+ headsetService['headsetConversationStates'] = {
753
+ [testEvent.body.conversationId]: {
754
+ offHook: true,
755
+ muted: false,
756
+ held: false,
757
+ ringing: false,
758
+ conversationId: testEvent.body.conversationId
759
+ }
760
+ };
375
761
  headsetService['handleDeviceMuteStatusChanged'](testEvent);
762
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toStrictEqual({
763
+ offHook: true,
764
+ muted: true,
765
+ held: false,
766
+ ringing: false,
767
+ conversationId: testEvent.body.conversationId
768
+ });
769
+ });
770
+ it('should do nothing if already in expected state', () => {
771
+ const testEvent = { vendor: {}, body: { name: 'Mute', code: '12', event: {}, isMuted: true, conversationId: 'crazy88' } };
772
+ const testObject = {
773
+ offHook: true,
774
+ muted: true,
775
+ held: false,
776
+ ringing: false,
777
+ conversationId: testEvent.body.conversationId
778
+ };
779
+ headsetService['headsetConversationStates'] = {
780
+ [testEvent.body.conversationId]: testObject
781
+ };
782
+ headsetService['handleDeviceMuteStatusChanged'](testEvent);
783
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toStrictEqual(testObject);
376
784
  });
377
785
  });
378
786
  describe('triggerDeviceHoldStatusChanged', () => {
@@ -385,8 +793,24 @@ describe('HeadsetService', () => {
385
793
  expect(event.payload).toStrictEqual(testEvent.body);
386
794
  done();
387
795
  });
388
- const testEvent = { vendor: {}, body: { name: 'HoldCall', code: '3', event: {}, holdRequested: true, toggle: false } };
796
+ const testEvent = { vendor: {}, body: { name: 'HoldCall', code: '3', event: {}, holdRequested: true, toggle: false, conversationId: 'convo41556' } };
797
+ headsetService['headsetConversationStates'] = {
798
+ [testEvent.body.conversationId]: {
799
+ offHook: true,
800
+ muted: false,
801
+ held: false,
802
+ ringing: false,
803
+ conversationId: testEvent.body.conversationId
804
+ }
805
+ };
389
806
  headsetService['handleDeviceHoldStatusChanged'](testEvent);
807
+ expect(headsetService['headsetConversationStates'][testEvent.body.conversationId]).toStrictEqual({
808
+ offHook: true,
809
+ muted: false,
810
+ held: true,
811
+ ringing: false,
812
+ conversationId: testEvent.body.conversationId
813
+ });
390
814
  });
391
815
  });
392
816
  describe('handleWebHidPermissionRequested', () => {
@@ -451,6 +875,34 @@ describe('HeadsetService', () => {
451
875
  headsetService.activeMicChange('test test');
452
876
  expect(disconnectSpy).toHaveBeenCalled();
453
877
  }));
878
+ it('should not clear if there is no active vendor', () => {
879
+ const spy = headsetService['clearSelectedImplementation'] = jest.fn();
880
+ headsetService.selectedImplementation = null;
881
+ // should not find a selectable vendor
882
+ headsetService.activeMicChange('bose');
883
+ expect(spy).not.toHaveBeenCalled();
884
+ });
885
+ it('should clear if no new vendor', () => {
886
+ const spy = headsetService['clearSelectedImplementation'] = jest.fn();
887
+ headsetService.selectedImplementation = {};
888
+ // should not find a selectable vendor
889
+ headsetService.activeMicChange('bose');
890
+ expect(spy).toHaveBeenCalled();
891
+ });
892
+ });
893
+ describe('clearSelectedImplementation', () => {
894
+ it('should only emit an event if there is a selected implementation', () => {
895
+ headsetService.selectedImplementation = null;
896
+ const spy = jest.fn();
897
+ headsetService.headsetEvents$
898
+ .pipe((0, rxjs_1.filter)((event) => event.event === consumed_headset_events_1.HeadsetEvents.implementationChanged)).subscribe(spy);
899
+ headsetService['clearSelectedImplementation']();
900
+ expect(spy).not.toHaveBeenCalled();
901
+ headsetService.selectedImplementation = { disconnect: jest.fn() };
902
+ headsetService['clearSelectedImplementation']();
903
+ expect(spy).toHaveBeenCalled();
904
+ expect(headsetService.selectedImplementation).toBeNull();
905
+ });
454
906
  });
455
907
  describe('retryConnection', () => {
456
908
  beforeEach(() => {
@@ -483,5 +935,35 @@ describe('HeadsetService', () => {
483
935
  expect(headsetService.connectionStatus()).toBe('noVendor');
484
936
  });
485
937
  });
938
+ describe('isDifferentState', () => {
939
+ it('should return the negated value of state after finding a value in this.headsetConversationStates', () => {
940
+ headsetService['headsetConversationStates'] = {
941
+ 'convoId123': {
942
+ offHook: true,
943
+ muted: false,
944
+ held: false,
945
+ ringing: false,
946
+ conversationId: 'convoId123'
947
+ }
948
+ };
949
+ expect(headsetService['isDifferentState']({ conversationId: 'convoId123', state: {} })).toBe(false);
950
+ });
951
+ it('should check the passed in state if no state is pulled from this.headsetConversationStates', () => {
952
+ const testState = {
953
+ offHook: true,
954
+ muted: false,
955
+ held: false,
956
+ ringing: false,
957
+ conversationId: 'convoId123'
958
+ };
959
+ expect(headsetService['isDifferentState']({ conversationId: '828256', state: testState })).toStrictEqual(true);
960
+ });
961
+ });
962
+ describe('updateHeadsetState', () => {
963
+ it('should return false if the isDifferentState returns false, meaning the states are the same', () => {
964
+ headsetService['isDifferentState'] = jest.fn().mockReturnValueOnce(false);
965
+ expect(headsetService['updateHeadsetState']({ conversationId: 'convoId123', state: {} })).toBe(false);
966
+ });
967
+ });
486
968
  });
487
969
  //# sourceMappingURL=headset.test.js.map