integration.test.ts 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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. // 模拟现有应用的使用模式
  5. describe('Integration Test - Existing Application Pattern', () => {
  6. let sdk: SttSdk
  7. let sttManager: ISttManagerAdapter
  8. let rtmManager: IRtmManagerAdapter
  9. beforeEach(async () => {
  10. // 模拟现有应用的初始化过程
  11. sdk = new SttSdk()
  12. await sdk.initialize({
  13. appId: 'test-app-id',
  14. certificate: 'test-certificate',
  15. logLevel: 'info',
  16. })
  17. // 创建管理器实例(模拟现有应用的模式)
  18. sttManager = sdk.createSttManager()
  19. rtmManager = sdk.createRtmManager()
  20. // 模拟将管理器挂载到window对象(现有应用的做法)
  21. ;(globalThis as any).sttManager = sttManager
  22. ;(globalThis as any).rtmManager = rtmManager
  23. })
  24. afterEach(async () => {
  25. await sdk.destroy()
  26. ;(globalThis as any).sttManager = undefined
  27. ;(globalThis as any).rtmManager = undefined
  28. })
  29. test('Should work with existing application initialization pattern', async () => {
  30. // 模拟现有应用的初始化流程
  31. const userId = 'test-user-123'
  32. const channel = 'test-channel-456'
  33. const userName = 'Test User'
  34. // 初始化管理器(模拟现有应用的模式)
  35. await sttManager.init({
  36. userId,
  37. channel,
  38. userName,
  39. })
  40. await rtmManager.join({
  41. channel,
  42. userId,
  43. userName,
  44. })
  45. // 验证管理器状态
  46. expect(sttManager.isInitialized).toBe(true)
  47. expect(sttManager.userId).toBe(userId)
  48. expect(sttManager.channel).toBe(channel)
  49. expect(rtmManager.isJoined).toBe(true)
  50. expect(rtmManager.userId).toBe(userId)
  51. expect(rtmManager.channel).toBe(channel)
  52. })
  53. test('Should handle transcription lifecycle like existing application', async () => {
  54. // 模拟现有应用的转录流程
  55. await sttManager.init({
  56. userId: 'test-user',
  57. channel: 'test-channel',
  58. userName: 'Test User',
  59. })
  60. await rtmManager.join({
  61. channel: 'test-channel',
  62. userId: 'test-user',
  63. userName: 'Test User',
  64. })
  65. // 开始转录(模拟现有应用的模式)
  66. const languages = [
  67. { source: 'en', target: ['zh'] },
  68. { source: 'zh', target: ['en'] },
  69. ]
  70. await sttManager.startTranscription({ languages })
  71. // 查询转录结果
  72. const result = await sttManager.queryTranscription()
  73. expect(result).toHaveProperty('status')
  74. expect(result).toHaveProperty('results')
  75. // 停止转录
  76. await sttManager.stopTranscription()
  77. })
  78. test('Should handle RTM operations like existing application', async () => {
  79. await rtmManager.join({
  80. channel: 'test-channel',
  81. userId: 'test-user',
  82. userName: 'Test User',
  83. })
  84. // 更新STT数据(模拟现有应用的模式)
  85. const sttData = {
  86. status: 'start',
  87. taskId: 'test-task-id',
  88. token: 'test-token',
  89. startTime: Date.now(),
  90. duration: 60000,
  91. }
  92. await rtmManager.updateSttData(sttData)
  93. // 更新语言设置
  94. const languages = [{ source: 'en', target: ['zh'] }]
  95. await rtmManager.updateLanguages(languages)
  96. // 锁操作
  97. await rtmManager.acquireLock()
  98. await rtmManager.releaseLock()
  99. })
  100. test('Should provide event system compatible with existing application', () => {
  101. // 模拟现有应用的事件监听模式
  102. const sttDataChangedHandler = vi.fn()
  103. const languagesChangedHandler = vi.fn()
  104. const errorHandler = vi.fn()
  105. // 监听事件(模拟现有应用的模式)
  106. rtmManager.on('metadataUpdated', sttDataChangedHandler)
  107. rtmManager.on('languagesUpdated', languagesChangedHandler)
  108. sdk.on('error', errorHandler)
  109. // 触发事件
  110. rtmManager.emit('metadataUpdated', { data: { status: 'start' } })
  111. rtmManager.emit('languagesUpdated', { languages: [] })
  112. sdk.emit('error', new Error('Test error'))
  113. // 验证事件处理
  114. expect(sttDataChangedHandler).toHaveBeenCalledWith({ data: { status: 'start' } })
  115. expect(languagesChangedHandler).toHaveBeenCalledWith({ languages: [] })
  116. expect(errorHandler).toHaveBeenCalledWith(expect.any(Error))
  117. // 移除事件监听
  118. rtmManager.off('metadataUpdated', sttDataChangedHandler)
  119. rtmManager.off('languagesUpdated', languagesChangedHandler)
  120. sdk.off('error', errorHandler)
  121. })
  122. test('Should handle destruction like existing application', async () => {
  123. // 模拟现有应用的销毁流程
  124. await sttManager.init({
  125. userId: 'test-user',
  126. channel: 'test-channel',
  127. userName: 'Test User',
  128. })
  129. await rtmManager.join({
  130. channel: 'test-channel',
  131. userId: 'test-user',
  132. userName: 'Test User',
  133. })
  134. // 销毁管理器(模拟现有应用的模式)
  135. await sttManager.destroy()
  136. await rtmManager.destroy()
  137. // 验证状态
  138. expect(sttManager.isInitialized).toBe(false)
  139. expect(rtmManager.isJoined).toBe(false)
  140. })
  141. test('Should maintain property access patterns from existing application', () => {
  142. // 模拟现有应用的属性访问模式
  143. // 直接属性访问(如 window.sttManager.userId)
  144. expect(typeof (sttManager as any).userId).toBe('string')
  145. expect(typeof (sttManager as any).channel).toBe('string')
  146. expect(typeof (sttManager as any).isInitialized).toBe('boolean')
  147. expect(typeof (rtmManager as any).userId).toBe('string')
  148. expect(typeof (rtmManager as any).channel).toBe('string')
  149. expect(typeof (rtmManager as any).isJoined).toBe('boolean')
  150. expect(Array.isArray((rtmManager as any).userList)).toBe(true)
  151. // 配置访问
  152. expect((sttManager as any).config).toBeUndefined() // 初始化前应为undefined
  153. expect((rtmManager as any).config).toBeUndefined()
  154. })
  155. test('Should handle error scenarios like existing application', async () => {
  156. // 测试错误处理兼容性
  157. // 未初始化时调用方法应该抛出错误
  158. await expect(sttManager.startTranscription({ languages: [] })).rejects.toThrow()
  159. await expect(rtmManager.updateSttData({})).rejects.toThrow()
  160. // 初始化后应该正常工作
  161. await sttManager.init({
  162. userId: 'test-user',
  163. channel: 'test-channel',
  164. userName: 'Test User',
  165. })
  166. await rtmManager.join({
  167. channel: 'test-channel',
  168. userId: 'test-user',
  169. userName: 'Test User',
  170. })
  171. // 现在应该可以正常工作(需要提供有效的语言)
  172. await expect(
  173. sttManager.startTranscription({ languages: [{ source: 'en', target: ['zh'] }] })
  174. ).resolves.toBeUndefined()
  175. await expect(rtmManager.updateSttData({ status: 'test' })).resolves.toBeUndefined()
  176. })
  177. })