d3ro-voice/apps/mobile-rn/__tests__/recording-queue-hook.test.tsx
2026-08-29 18:33:45 +09:00

53 lines
1.9 KiB
TypeScript

import React from 'react'
import { act, create } from 'react-test-renderer'
const mockResume = jest.fn()
const mockClearAll = jest.fn()
const mockClearUser = jest.fn()
const mockCancelRecorder = jest.fn()
jest.mock('../src/features/recording/durable-processing-queue', () => ({
resumeQueuedAudioForUser: (...args: unknown[]) => mockResume(...args),
clearAllQueuedAudio: (...args: unknown[]) => mockClearAll(...args),
clearQueuedAudioForUser: (...args: unknown[]) => mockClearUser(...args),
}))
jest.mock('../src/lib/audio-recorder', () => ({
audioRecorder: { cancel: (...args: unknown[]) => mockCancelRecorder(...args) },
}))
import { useRecordingProcessingQueue } from '../src/features/recording/use-recording-processing-queue'
function Harness({ userId, authReady }: { userId: string | null; authReady: boolean }): null {
useRecordingProcessingQueue(userId, authReady)
return null
}
describe('recording processing queue hook', () => {
beforeEach(() => {
mockResume.mockReset().mockResolvedValue(undefined)
mockClearAll.mockReset().mockResolvedValue(undefined)
mockClearUser.mockReset().mockResolvedValue(undefined)
mockCancelRecorder.mockReset().mockResolvedValue(undefined)
})
it('only resumes the authenticated owner and delegates every privacy deletion to AuthContext', async () => {
let renderer: ReturnType<typeof create>
await act(async () => {
renderer = create(<Harness userId="user-a" authReady />)
await Promise.resolve()
})
await act(async () => {
renderer!.update(<Harness userId={null} authReady={false} />)
await Promise.resolve()
})
await act(async () => {
renderer!.update(<Harness userId="user-b" authReady />)
await Promise.resolve()
})
expect(mockResume.mock.calls).toEqual([['user-a'], ['user-b']])
expect(mockClearAll).not.toHaveBeenCalled()
expect(mockClearUser).not.toHaveBeenCalled()
expect(mockCancelRecorder).not.toHaveBeenCalled()
})
})