Spaces:
Runtime error
Runtime error
webmuppet
Claude Sonnet 4.6
Refactor: replace Streamlit with React+Vite SPA + FastAPI server
b5c0df4 Download frontend/src/components/Sidebar.test.ts from webmuppetnz/hmc-rag: direct link, hf CLI and curl.
- Browser
- Download file 2.58 kB
-
https://huggingface.co/spaces/webmuppetnz/hmc-rag/resolve/main/frontend/src/components/Sidebar.test.ts
- Command line
-
hf download hf://spaces/webmuppetnz/hmc-rag/frontend/src/components/Sidebar.test.ts
-
curl -L -o Sidebar.test.ts https://huggingface.co/spaces/webmuppetnz/hmc-rag/resolve/main/frontend/src/components/Sidebar.test.ts
2.58 kB
| /** | |
| * Property-based tests for saved response sidebar truncation. | |
| * | |
| * **Validates: Requirements 8.3** | |
| * | |
| * Property 5: Saved response sidebar truncation — for any question string | |
| * exceeding 80 characters, the text displayed in the sidebar SHALL be between | |
| * 75 and 85 characters long (inclusive). Strings ≤ 80 characters are returned | |
| * unchanged. | |
| */ | |
| import { describe, it, expect } from "vitest"; | |
| import * as fc from "fast-check"; | |
| import { truncateQuestion } from "./Sidebar"; | |
| // --------------------------------------------------------------------------- | |
| // Property 5: Saved response sidebar truncation | |
| // --------------------------------------------------------------------------- | |
| describe("Property 5: Saved response sidebar truncation", () => { | |
| /** | |
| * **Validates: Requirements 8.3** | |
| * | |
| * For any question string exceeding 80 characters, truncateQuestion returns | |
| * a string within [75, 85] characters long (inclusive). | |
| */ | |
| it("truncated text is within [75, 85] characters when original exceeds 80 characters", () => { | |
| fc.assert( | |
| fc.property( | |
| fc.string({ minLength: 81, maxLength: 500 }), | |
| (question) => { | |
| const truncated = truncateQuestion(question); | |
| expect(truncated.length).toBeGreaterThanOrEqual(75); | |
| expect(truncated.length).toBeLessThanOrEqual(85); | |
| } | |
| ) | |
| ); | |
| }); | |
| it("truncated text ends with ellipsis when original exceeds 80 characters", () => { | |
| fc.assert( | |
| fc.property( | |
| fc.string({ minLength: 81, maxLength: 500 }), | |
| (question) => { | |
| const truncated = truncateQuestion(question); | |
| expect(truncated.endsWith("\u2026")).toBe(true); | |
| } | |
| ) | |
| ); | |
| }); | |
| it("strings of 80 characters or fewer are returned unchanged", () => { | |
| fc.assert( | |
| fc.property( | |
| fc.string({ minLength: 0, maxLength: 80 }), | |
| (question) => { | |
| const truncated = truncateQuestion(question); | |
| expect(truncated).toBe(question); | |
| } | |
| ) | |
| ); | |
| }); | |
| it("truncated text is a prefix of the original (minus ellipsis)", () => { | |
| fc.assert( | |
| fc.property( | |
| fc.string({ minLength: 81, maxLength: 500 }), | |
| (question) => { | |
| const truncated = truncateQuestion(question); | |
| // Remove the trailing ellipsis to get the prefix | |
| const prefix = truncated.slice(0, -1); | |
| // The prefix must be a substring of the original starting at index 0 | |
| expect(question.startsWith(prefix.trimEnd())).toBe(true); | |
| } | |
| ) | |
| ); | |
| }); | |
| }); | |