Spaces:
Running
Running
File size: 2,746 Bytes
2f49513 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import { renderHook, act } from "@testing-library/react";
import useACEController from "../useACEController";
import WS from "jest-websocket-mock";
import pcmToWav from "../../utils/pcmToWav";
import extractWavSampleRate from "../../utils/extractWavSampleRate";
describe("useACEController", () => {
let server: WS;
const url = "ws://localhost:1234";
beforeEach(() => {
server = new WS(url);
});
afterEach(() => {
WS.clean();
});
test("connects to WebSocket server", async () => {
const onError = jest.fn();
const { result } = renderHook(() =>
useACEController({
url,
onError,
onAudioChunk: jest.fn(),
onTTS: jest.fn(),
onASR: jest.fn(),
})
);
act(() => {
result.current.connect();
});
await server.connected;
expect(result.current.connectionStatus).toBe("connected");
});
test("handles audio chunks", async () => {
const onAudioChunk = jest.fn();
const { result } = renderHook(() =>
useACEController({
url,
onError: jest.fn(),
onAudioChunk,
onTTS: jest.fn(),
onASR: jest.fn(),
})
);
// Connect to the WebSocket server first
act(() => {
result.current.connect();
});
await server.connected;
// Create sample audio data
const audioData = new Int16Array([1, 2, 3]);
const wavBuffer = pcmToWav(audioData.buffer, 16_000);
server.send(wavBuffer);
// Wait for async operations to complete
await act(async () => {
await new Promise((resolve) => setTimeout(resolve, 0));
});
expect(onAudioChunk).toHaveBeenCalled();
});
test("sends audio chunk as WAV through WebSocket", async () => {
const { result } = renderHook(() =>
useACEController({
url,
onError: jest.fn(),
onAudioChunk: jest.fn(),
onTTS: jest.fn(),
onASR: jest.fn(),
})
);
// Connect to the WebSocket server first
act(() => {
result.current.connect();
});
await server.connected;
// Create sample audio data and parameters
const sampleRate = 16000;
const numChannels = 1;
const audioData = new Int16Array([1, 2, 3, 4, 5]);
// Send the audio chunk
act(() => {
result.current.sendAudioChunk(audioData.buffer, sampleRate, numChannels);
});
// Wait for the message to be sent to the server
const receivedData = (await server.nextMessage) as ArrayBuffer;
// Verify the received data is a valid WAV file with the expected sample rate
expect(receivedData).toBeInstanceOf(ArrayBuffer);
const detectedSampleRate = extractWavSampleRate(receivedData);
expect(detectedSampleRate).toBe(sampleRate);
});
});
|