generated from nhcarrigan/template
feat: multiple UI improvements, font settings, and memory file display names (#175)
## 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>
This commit was merged in pull request #175.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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!")
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user