generated from nhcarrigan/template
fa906684c2
## Summary - **fix**: `show_thinking_blocks` setting now persists across sessions — it was defined on the TypeScript side but missing from the Rust `HikariConfig` struct, so serde silently dropped it on every save/load - **feat**: Tool calls are now rendered as collapsible blocks matching the Extended Thinking block aesthetic, replacing the old inline dropdown approach - **feat**: Add configurable max output tokens setting - **feat**: Use random creative names for conversation tabs - **test**: Significantly expanded frontend unit test coverage - **docs**: Require tests for all changes in CLAUDE.md - **feat**: Allow users to specify a custom terminal font (Closes #176) - **feat**: Display friendly names for memory files derived from the first heading (Closes #177) - **feat**: Add custom UI font support for the app chrome (buttons, labels, tabs) - **fix**: Apply custom UI font to the full app interface — `.app-container` was hardcoded, blocking inheritance from `body`; also renamed "Custom Font" to "Custom Terminal Font" for clarity ✨ This PR was created with help from Hikari~ 🌸 Reviewed-on: #175 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { NotificationType } from "./types";
|
|
import { claudeStore } from "$lib/stores/claude";
|
|
import { sendTerminalNotification } from "./terminalNotifier";
|
|
|
|
vi.mock("$lib/stores/claude", () => ({
|
|
claudeStore: {
|
|
addLine: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
describe("sendTerminalNotification", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("adds a system line for success type with sparkle emoji", () => {
|
|
sendTerminalNotification(NotificationType.SUCCESS);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith("system", expect.stringContaining("✨"));
|
|
});
|
|
|
|
it("adds a system line for error type with cross emoji", () => {
|
|
sendTerminalNotification(NotificationType.ERROR);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith("system", expect.stringContaining("❌"));
|
|
});
|
|
|
|
it("adds a system line for permission type with lock emoji", () => {
|
|
sendTerminalNotification(NotificationType.PERMISSION);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith("system", expect.stringContaining("🔐"));
|
|
});
|
|
|
|
it("adds a system line for connection type with link emoji", () => {
|
|
sendTerminalNotification(NotificationType.CONNECTION);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith("system", expect.stringContaining("🔗"));
|
|
});
|
|
|
|
it("adds a system line for task_start type with rocket emoji", () => {
|
|
sendTerminalNotification(NotificationType.TASK_START);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith("system", expect.stringContaining("🚀"));
|
|
});
|
|
|
|
it("includes the optional message in the notification", () => {
|
|
sendTerminalNotification(NotificationType.SUCCESS, "Custom message text");
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith(
|
|
"system",
|
|
expect.stringContaining("Custom message text")
|
|
);
|
|
});
|
|
|
|
it("includes the sound phrase as the notification title", () => {
|
|
sendTerminalNotification(NotificationType.SUCCESS);
|
|
|
|
expect(claudeStore.addLine).toHaveBeenCalledWith(
|
|
"system",
|
|
expect.stringContaining("I'm done!")
|
|
);
|
|
});
|
|
});
|