Squash merge feat/expo-app: app-expo, .cursor, workflows, package.json, .husky; remove app-android, app-ios, react-app
This commit is contained in:
70
app-expo/tests/features/voice/segmenter.test.ts
Normal file
70
app-expo/tests/features/voice/segmenter.test.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import { AudioSegmenter } from '@/features/voice/segmenter';
|
||||
|
||||
describe('AudioSegmenter', () => {
|
||||
beforeEach(() => {
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.useRealTimers();
|
||||
});
|
||||
|
||||
test('fires segment callbacks at fixed intervals', () => {
|
||||
const onSegment = jest.fn();
|
||||
const segmenter = new AudioSegmenter(onSegment, { fixedDurationMs: 1000 });
|
||||
|
||||
segmenter.start();
|
||||
|
||||
jest.advanceTimersByTime(1000);
|
||||
expect(onSegment).toHaveBeenCalledWith(0);
|
||||
|
||||
jest.advanceTimersByTime(1000);
|
||||
expect(onSegment).toHaveBeenCalledWith(1);
|
||||
|
||||
jest.advanceTimersByTime(1000);
|
||||
expect(onSegment).toHaveBeenCalledWith(2);
|
||||
|
||||
expect(onSegment).toHaveBeenCalledTimes(3);
|
||||
|
||||
segmenter.stop();
|
||||
});
|
||||
|
||||
test('stop returns the final segment index', () => {
|
||||
const onSegment = jest.fn();
|
||||
const segmenter = new AudioSegmenter(onSegment, { fixedDurationMs: 500 });
|
||||
|
||||
segmenter.start();
|
||||
jest.advanceTimersByTime(1500);
|
||||
|
||||
const finalIndex = segmenter.stop();
|
||||
expect(finalIndex).toBe(3);
|
||||
});
|
||||
|
||||
test('does not fire after stop', () => {
|
||||
const onSegment = jest.fn();
|
||||
const segmenter = new AudioSegmenter(onSegment, { fixedDurationMs: 100 });
|
||||
|
||||
segmenter.start();
|
||||
jest.advanceTimersByTime(250);
|
||||
segmenter.stop();
|
||||
|
||||
const callCount = onSegment.mock.calls.length;
|
||||
jest.advanceTimersByTime(500);
|
||||
|
||||
expect(onSegment).toHaveBeenCalledTimes(callCount);
|
||||
});
|
||||
|
||||
test('uses default 15s interval when no config provided', () => {
|
||||
const onSegment = jest.fn();
|
||||
const segmenter = new AudioSegmenter(onSegment);
|
||||
|
||||
segmenter.start();
|
||||
jest.advanceTimersByTime(14999);
|
||||
expect(onSegment).not.toHaveBeenCalled();
|
||||
|
||||
jest.advanceTimersByTime(1);
|
||||
expect(onSegment).toHaveBeenCalledTimes(1);
|
||||
|
||||
segmenter.stop();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user