| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- import { describe, test, expect, beforeEach, afterEach, vi } from 'vitest'
- import { SttSdk } from '../../src/core/stt-sdk'
- import type { ISttManagerAdapter, IRtmManagerAdapter } from '../../src/types'
- // 模拟现有应用的使用模式
- describe('Integration Test - Existing Application Pattern', () => {
- let sdk: SttSdk
- let sttManager: ISttManagerAdapter
- let rtmManager: IRtmManagerAdapter
- beforeEach(async () => {
- // 模拟现有应用的初始化过程
- sdk = new SttSdk()
- await sdk.initialize({
- appId: 'test-app-id',
- certificate: 'test-certificate',
- logLevel: 'info',
- })
- // 创建管理器实例(模拟现有应用的模式)
- sttManager = sdk.createSttManager()
- rtmManager = sdk.createRtmManager()
- // 模拟将管理器挂载到window对象(现有应用的做法)
- ;(globalThis as any).sttManager = sttManager
- ;(globalThis as any).rtmManager = rtmManager
- })
- afterEach(async () => {
- await sdk.destroy()
- ;(globalThis as any).sttManager = undefined
- ;(globalThis as any).rtmManager = undefined
- })
- test('Should work with existing application initialization pattern', async () => {
- // 模拟现有应用的初始化流程
- const userId = 'test-user-123'
- const channel = 'test-channel-456'
- const userName = 'Test User'
- // 初始化管理器(模拟现有应用的模式)
- await sttManager.init({
- userId,
- channel,
- userName,
- })
- await rtmManager.join({
- channel,
- userId,
- userName,
- })
- // 验证管理器状态
- expect(sttManager.isInitialized).toBe(true)
- expect(sttManager.userId).toBe(userId)
- expect(sttManager.channel).toBe(channel)
- expect(rtmManager.isJoined).toBe(true)
- expect(rtmManager.userId).toBe(userId)
- expect(rtmManager.channel).toBe(channel)
- })
- test('Should handle transcription lifecycle like existing application', async () => {
- // 模拟现有应用的转录流程
- await sttManager.init({
- userId: 'test-user',
- channel: 'test-channel',
- userName: 'Test User',
- })
- await rtmManager.join({
- channel: 'test-channel',
- userId: 'test-user',
- userName: 'Test User',
- })
- // 开始转录(模拟现有应用的模式)
- const languages = [
- { source: 'en', target: ['zh'] },
- { source: 'zh', target: ['en'] },
- ]
- await sttManager.startTranscription({ languages })
- // 查询转录结果
- const result = await sttManager.queryTranscription()
- expect(result).toHaveProperty('status')
- expect(result).toHaveProperty('results')
- // 停止转录
- await sttManager.stopTranscription()
- })
- test('Should handle RTM operations like existing application', async () => {
- await rtmManager.join({
- channel: 'test-channel',
- userId: 'test-user',
- userName: 'Test User',
- })
- // 更新STT数据(模拟现有应用的模式)
- const sttData = {
- status: 'start',
- taskId: 'test-task-id',
- token: 'test-token',
- startTime: Date.now(),
- duration: 60000,
- }
- await rtmManager.updateSttData(sttData)
- // 更新语言设置
- const languages = [{ source: 'en', target: ['zh'] }]
- await rtmManager.updateLanguages(languages)
- // 锁操作
- await rtmManager.acquireLock()
- await rtmManager.releaseLock()
- })
- test('Should provide event system compatible with existing application', () => {
- // 模拟现有应用的事件监听模式
- const sttDataChangedHandler = vi.fn()
- const languagesChangedHandler = vi.fn()
- const errorHandler = vi.fn()
- // 监听事件(模拟现有应用的模式)
- rtmManager.on('metadataUpdated', sttDataChangedHandler)
- rtmManager.on('languagesUpdated', languagesChangedHandler)
- sdk.on('error', errorHandler)
- // 触发事件
- rtmManager.emit('metadataUpdated', { data: { status: 'start' } })
- rtmManager.emit('languagesUpdated', { languages: [] })
- sdk.emit('error', new Error('Test error'))
- // 验证事件处理
- expect(sttDataChangedHandler).toHaveBeenCalledWith({ data: { status: 'start' } })
- expect(languagesChangedHandler).toHaveBeenCalledWith({ languages: [] })
- expect(errorHandler).toHaveBeenCalledWith(expect.any(Error))
- // 移除事件监听
- rtmManager.off('metadataUpdated', sttDataChangedHandler)
- rtmManager.off('languagesUpdated', languagesChangedHandler)
- sdk.off('error', errorHandler)
- })
- test('Should handle destruction like existing application', async () => {
- // 模拟现有应用的销毁流程
- await sttManager.init({
- userId: 'test-user',
- channel: 'test-channel',
- userName: 'Test User',
- })
- await rtmManager.join({
- channel: 'test-channel',
- userId: 'test-user',
- userName: 'Test User',
- })
- // 销毁管理器(模拟现有应用的模式)
- await sttManager.destroy()
- await rtmManager.destroy()
- // 验证状态
- expect(sttManager.isInitialized).toBe(false)
- expect(rtmManager.isJoined).toBe(false)
- })
- test('Should maintain property access patterns from existing application', () => {
- // 模拟现有应用的属性访问模式
- // 直接属性访问(如 window.sttManager.userId)
- expect(typeof (sttManager as any).userId).toBe('string')
- expect(typeof (sttManager as any).channel).toBe('string')
- expect(typeof (sttManager as any).isInitialized).toBe('boolean')
- expect(typeof (rtmManager as any).userId).toBe('string')
- expect(typeof (rtmManager as any).channel).toBe('string')
- expect(typeof (rtmManager as any).isJoined).toBe('boolean')
- expect(Array.isArray((rtmManager as any).userList)).toBe(true)
- // 配置访问
- expect((sttManager as any).config).toBeUndefined() // 初始化前应为undefined
- expect((rtmManager as any).config).toBeUndefined()
- })
- test('Should handle error scenarios like existing application', async () => {
- // 测试错误处理兼容性
- // 未初始化时调用方法应该抛出错误
- await expect(sttManager.startTranscription({ languages: [] })).rejects.toThrow()
- await expect(rtmManager.updateSttData({})).rejects.toThrow()
- // 初始化后应该正常工作
- await sttManager.init({
- userId: 'test-user',
- channel: 'test-channel',
- userName: 'Test User',
- })
- await rtmManager.join({
- channel: 'test-channel',
- userId: 'test-user',
- userName: 'Test User',
- })
- // 现在应该可以正常工作(需要提供有效的语言)
- await expect(
- sttManager.startTranscription({ languages: [{ source: 'en', target: ['zh'] }] })
- ).resolves.toBeUndefined()
- await expect(rtmManager.updateSttData({ status: 'test' })).resolves.toBeUndefined()
- })
- })
|