compatibility.test.ts 7.6 KB

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