2
0

integration.test.ts 6.3 KB

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