2
0

compatibility.test.ts 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. import { describe, test, expect, beforeEach, afterEach, vi } from 'vitest'
  2. import { SttSdk } from '../../src/core/stt-sdk'
  3. import type { ISttManagerAdapter, IRtmManagerAdapter } from '../../src/types'
  4. import { SttError } from '../../src/core/stt-error'
  5. describe('SDK Compatibility Test', () => {
  6. let sdk: SttSdk
  7. let sttManager: ISttManagerAdapter
  8. let rtmManager: IRtmManagerAdapter
  9. beforeEach(() => {
  10. sdk = new SttSdk()
  11. })
  12. afterEach(async () => {
  13. await sdk.destroy()
  14. })
  15. test('SDK should initialize successfully', async () => {
  16. await sdk.initialize({
  17. appId: 'test-app-id',
  18. certificate: 'test-certificate',
  19. logLevel: 'info',
  20. })
  21. expect(sdk.isInitialized).toBe(true)
  22. expect(sdk.config?.appId).toBe('test-app-id')
  23. expect(sdk.config?.certificate).toBe('test-certificate')
  24. })
  25. test('Should create STT manager with compatible API', async () => {
  26. // 先初始化SDK
  27. await sdk.initialize({
  28. appId: 'test-app-id',
  29. certificate: 'test-certificate',
  30. logLevel: 'info',
  31. })
  32. sttManager = sdk.createSttManager()
  33. // 验证管理器具有兼容的API
  34. expect(sttManager).toHaveProperty('init')
  35. expect(sttManager).toHaveProperty('startTranscription')
  36. expect(sttManager).toHaveProperty('stopTranscription')
  37. expect(sttManager).toHaveProperty('queryTranscription')
  38. expect(sttManager).toHaveProperty('updateTranscription')
  39. expect(sttManager).toHaveProperty('extendDuration')
  40. expect(sttManager).toHaveProperty('destroy')
  41. expect(sttManager).toHaveProperty('isInitialized')
  42. expect(sttManager).toHaveProperty('config')
  43. expect(sttManager).toHaveProperty('userId')
  44. expect(sttManager).toHaveProperty('channel')
  45. })
  46. test('Should create RTM manager with compatible API', async () => {
  47. // 先初始化SDK
  48. await sdk.initialize({
  49. appId: 'test-app-id',
  50. certificate: 'test-certificate',
  51. logLevel: 'info',
  52. })
  53. rtmManager = sdk.createRtmManager()
  54. // 验证管理器具有兼容的API
  55. expect(rtmManager).toHaveProperty('join')
  56. expect(rtmManager).toHaveProperty('updateSttData')
  57. expect(rtmManager).toHaveProperty('updateLanguages')
  58. expect(rtmManager).toHaveProperty('acquireLock')
  59. expect(rtmManager).toHaveProperty('releaseLock')
  60. expect(rtmManager).toHaveProperty('destroy')
  61. expect(rtmManager).toHaveProperty('isJoined')
  62. expect(rtmManager).toHaveProperty('config')
  63. expect(rtmManager).toHaveProperty('userId')
  64. expect(rtmManager).toHaveProperty('channel')
  65. expect(rtmManager).toHaveProperty('userList')
  66. })
  67. test('STT manager should handle initialization correctly', async () => {
  68. // 先初始化SDK
  69. await sdk.initialize({
  70. appId: 'test-app-id',
  71. certificate: 'test-certificate',
  72. logLevel: 'info',
  73. })
  74. sttManager = sdk.createSttManager()
  75. await sttManager.init({
  76. userId: 'test-user',
  77. channel: 'test-channel',
  78. userName: 'Test User',
  79. })
  80. expect(sttManager.isInitialized).toBe(true)
  81. expect(sttManager.userId).toBe('test-user')
  82. expect(sttManager.channel).toBe('test-channel')
  83. })
  84. test('STT manager should handle transcription lifecycle', async () => {
  85. // 先初始化SDK
  86. await sdk.initialize({
  87. appId: 'test-app-id',
  88. certificate: 'test-certificate',
  89. logLevel: 'info',
  90. })
  91. sttManager = sdk.createSttManager()
  92. await sttManager.init({
  93. userId: 'test-user',
  94. channel: 'test-channel',
  95. userName: 'Test User',
  96. })
  97. // 开始转录
  98. await sttManager.startTranscription({
  99. languages: [{ source: 'en', target: ['zh'] }],
  100. })
  101. // 查询转录结果
  102. const result = await sttManager.queryTranscription()
  103. expect(result).toHaveProperty('status')
  104. expect(result).toHaveProperty('results')
  105. // 更新转录
  106. await sttManager.updateTranscription({
  107. data: { newData: 'test' },
  108. updateMaskList: ['newData'],
  109. })
  110. // 停止转录
  111. await sttManager.stopTranscription()
  112. // 延长持续时间
  113. await sttManager.extendDuration({
  114. startTime: Date.now(),
  115. duration: 60000,
  116. })
  117. })
  118. test('RTM manager should handle channel operations', async () => {
  119. // 先初始化SDK
  120. await sdk.initialize({
  121. appId: 'test-app-id',
  122. certificate: 'test-certificate',
  123. logLevel: 'info',
  124. })
  125. rtmManager = sdk.createRtmManager()
  126. await rtmManager.join({
  127. channel: 'test-channel',
  128. userId: 'test-user',
  129. userName: 'Test User',
  130. })
  131. expect(rtmManager.isJoined).toBe(true)
  132. expect(rtmManager.userId).toBe('test-user')
  133. expect(rtmManager.channel).toBe('test-channel')
  134. // 更新STT数据
  135. await rtmManager.updateSttData({
  136. status: 'start',
  137. taskId: 'test-task-id',
  138. token: 'test-token',
  139. })
  140. // 更新语言设置
  141. await rtmManager.updateLanguages([{ source: 'en', target: ['zh'] }])
  142. // 锁操作
  143. await rtmManager.acquireLock()
  144. await rtmManager.releaseLock()
  145. })
  146. test('Should handle error events properly', async () => {
  147. const errorHandler = vi.fn()
  148. sdk.on('error', errorHandler)
  149. // 模拟错误
  150. const testError = new SttError('NETWORK_ERROR', 'Network error occurred')
  151. sdk.emit('error', testError)
  152. expect(errorHandler).toHaveBeenCalledWith(testError)
  153. })
  154. test('Should provide event emitter functionality', () => {
  155. const testHandler = vi.fn()
  156. // 测试事件监听
  157. sdk.on('initialized', testHandler)
  158. sdk.emit('initialized')
  159. expect(testHandler).toHaveBeenCalled()
  160. // 测试事件移除
  161. sdk.off('initialized', testHandler)
  162. sdk.emit('initialized')
  163. // 应该只被调用一次
  164. expect(testHandler).toHaveBeenCalledTimes(1)
  165. })
  166. test('Should handle manager destruction correctly', async () => {
  167. // 先初始化SDK
  168. await sdk.initialize({
  169. appId: 'test-app-id',
  170. certificate: 'test-certificate',
  171. logLevel: 'info',
  172. })
  173. sttManager = sdk.createSttManager()
  174. rtmManager = sdk.createRtmManager()
  175. await sttManager.init({
  176. userId: 'test-user',
  177. channel: 'test-channel',
  178. userName: 'Test User',
  179. })
  180. await rtmManager.join({
  181. channel: 'test-channel',
  182. userId: 'test-user',
  183. userName: 'Test User',
  184. })
  185. // 销毁管理器
  186. await sttManager.destroy()
  187. await rtmManager.destroy()
  188. expect(sttManager.isInitialized).toBe(false)
  189. expect(rtmManager.isJoined).toBe(false)
  190. })
  191. test('Should maintain backward compatibility with existing API patterns', async () => {
  192. // 模拟现有应用的使用模式
  193. // 1. 创建管理器实例
  194. await sdk.initialize({
  195. appId: 'test-app-id',
  196. certificate: 'test-certificate',
  197. logLevel: 'info',
  198. })
  199. const sttManager = sdk.createSttManager()
  200. const rtmManager = sdk.createRtmManager()
  201. // 2. 验证属性访问模式(如 window.sttManager.property)
  202. expect(typeof sttManager.userId).toBe('string')
  203. expect(typeof sttManager.channel).toBe('string')
  204. expect(typeof sttManager.isInitialized).toBe('boolean')
  205. expect(typeof rtmManager.userId).toBe('string')
  206. expect(typeof rtmManager.channel).toBe('string')
  207. expect(typeof rtmManager.isJoined).toBe('boolean')
  208. // 3. 验证方法调用模式
  209. expect(typeof sttManager.init).toBe('function')
  210. expect(typeof sttManager.startTranscription).toBe('function')
  211. expect(typeof sttManager.stopTranscription).toBe('function')
  212. expect(typeof sttManager.queryTranscription).toBe('function')
  213. expect(typeof rtmManager.join).toBe('function')
  214. expect(typeof rtmManager.updateSttData).toBe('function')
  215. expect(typeof rtmManager.updateLanguages).toBe('function')
  216. expect(typeof rtmManager.acquireLock).toBe('function')
  217. })
  218. })