chatterbox-voice-studio / web /src /test /audio.test.ts
techfreakworm's picture
feat(web): API client, IndexedDB store, Recorder state machine
96f2542 unverified
raw
history blame contribute delete
867 Bytes
import { describe, expect, it } from "vitest";
import { Recorder } from "@/lib/audio";
describe("Recorder state machine", () => {
it("starts in idle", () => {
const r = new Recorder();
expect(r.state).toBe("idle");
});
it("transitions idle -> requesting on start()", () => {
const r = new Recorder();
r.requestStart();
expect(r.state).toBe("requesting");
});
it("transitions to error on permission denial", async () => {
const r = new Recorder({
getUserMedia: () => Promise.reject(new Error("denied")),
});
await r.start().catch(() => {});
expect(r.state).toBe("error");
expect(r.lastError?.message).toBe("denied");
});
it("ignores stop() in idle", async () => {
const r = new Recorder();
const result = await r.stop();
expect(r.state).toBe("idle");
expect(result).toBeNull();
});
});