| 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(); |
| }); |
| }); |
|
|