@charisma-ai/react
Version:
Charisma.ai chat component for React
75 lines (74 loc) • 3.37 kB
JavaScript
import React from "react";
import { render, act } from "@testing-library/react";
import { describe, it, vi, expect, beforeEach } from "vitest";
import "@testing-library/jest-dom/vitest";
import { AudioManagerProvider, useAudioManager } from "./useAudioManager.js";
// Mock AudioManager class
vi.mock("@charisma-ai/sdk", ()=>({
AudioManager: vi.fn(()=>({
initialise: vi.fn(),
startListening: vi.fn(),
stopListening: vi.fn(),
connect: vi.fn(),
resetTimeout: vi.fn(),
playCharacterSpeech: vi.fn(),
mediaAudioPlay: vi.fn(),
mediaAudioSetVolume: vi.fn(),
mediaAudioToggleMute: vi.fn(),
mediaAudioStopAll: vi.fn(),
browserIsSupported: vi.fn(()=>true)
}))
}));
// Helper component to access context in tests
const TestComponent = ()=>{
const { initialise, isListening, startListening, stopListening, connect, isBrowserSupported } = useAudioManager();
return /*#__PURE__*/ React.createElement("div", null, /*#__PURE__*/ React.createElement("button", {
type: "button",
onClick: initialise
}, "Initialise"), /*#__PURE__*/ React.createElement("button", {
type: "button",
onClick: ()=>startListening()
}, "Start Listening"), /*#__PURE__*/ React.createElement("button", {
type: "button",
onClick: stopListening
}, "Stop Listening"), /*#__PURE__*/ React.createElement("button", {
type: "button",
onClick: ()=>connect("test-token", "test-session")
}, "Connect"), /*#__PURE__*/ React.createElement("div", null, "Is Listening: ", isListening ? "Yes" : "No"), /*#__PURE__*/ React.createElement("div", null, "Is Browser Supported: ", isBrowserSupported ? "Yes" : "No"));
};
describe("useAudioManager", ()=>{
beforeEach(()=>{
vi.clearAllMocks();
});
it("should initialise AudioManager and check browser support", ()=>{
const { getByText } = render(/*#__PURE__*/ React.createElement(AudioManagerProvider, {
options: {}
}, /*#__PURE__*/ React.createElement(TestComponent, null)));
expect(getByText("Is Browser Supported: Yes")).toBeInTheDocument();
});
it("should start listening and set isListening to true", ()=>{
const { getByText } = render(/*#__PURE__*/ React.createElement(AudioManagerProvider, {
options: {}
}, /*#__PURE__*/ React.createElement(TestComponent, null)));
const startButton = getByText("Start Listening");
act(()=>{
startButton.click();
});
expect(getByText("Is Listening: Yes")).toBeInTheDocument();
});
it("should stop listening and set isListening to false", ()=>{
const { getByText } = render(/*#__PURE__*/ React.createElement(AudioManagerProvider, {
options: {}
}, /*#__PURE__*/ React.createElement(TestComponent, null)));
const startButton = getByText("Start Listening");
const stopButton = getByText("Stop Listening");
act(()=>{
startButton.click();
});
expect(getByText("Is Listening: Yes")).toBeInTheDocument();
act(()=>{
stopButton.click();
});
expect(getByText("Is Listening: No")).toBeInTheDocument();
});
});