spb/vquant Public MIT
VibeQuant — AI-powered institutional-grade financial intelligence platform.
TypeScript 84.3%
Python 11.7%
JavaScript 1.6%
CSS 1.5%
HTML 0.7%
1/*2 * =============================================================================3 * VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 * -----------------------------------------------------------------------------5 * File: server/routes/validation.test.ts6 *7 * Author: Simon-Pierre Boucher8 * Contact: contact@spboucher.ai9 * Website: https://www.spboucher.ai10 * Demo: https://www.vquant.ai11 * License: MIT (see LICENSE)12 *13 * Copyright © 2026 Simon-Pierre Boucher. All rights reserved.14 * =============================================================================15 */1617import { describe, it, expect } from "vitest";18import {19 chatBodySchema,20 registerBodySchema,21 loginBodySchema,22 heartbeatBodySchema,23 shareBodySchema,24} from "./validation";2526describe("chatBodySchema", () => {27 it("accepts valid chat request", () => {28 const result = chatBodySchema.safeParse({29 query: "Analyze AAPL stock",30 });31 expect(result.success).toBe(true);32 if (result.success) {33 expect(result.data.query).toBe("Analyze AAPL stock");34 expect(result.data.history).toEqual([]);35 }36 });3738 it("accepts request with history", () => {39 const result = chatBodySchema.safeParse({40 query: "Follow up question",41 history: [{ question: "Previous Q", answer: "Previous A" }],42 sessionId: "abc-123",43 });44 expect(result.success).toBe(true);45 if (result.success) {46 expect(result.data.history).toHaveLength(1);47 expect(result.data.sessionId).toBe("abc-123");48 }49 });5051 it("rejects empty query", () => {52 const result = chatBodySchema.safeParse({ query: "" });53 expect(result.success).toBe(false);54 });5556 it("rejects missing query", () => {57 const result = chatBodySchema.safeParse({});58 expect(result.success).toBe(false);59 });6061 it("rejects query exceeding max length", () => {62 const result = chatBodySchema.safeParse({ query: "x".repeat(10001) });63 expect(result.success).toBe(false);64 });6566 it("accepts valid model selection", () => {67 const result = chatBodySchema.safeParse({68 query: "Test",69 model: "claude-opus-4-6",70 });71 expect(result.success).toBe(true);72 if (result.success) {73 expect(result.data.model).toBe("claude-opus-4-6");74 }75 });7677 it("defaults model to claude-opus-4-8", () => {78 const result = chatBodySchema.safeParse({ query: "Test" });79 expect(result.success).toBe(true);80 if (result.success) {81 expect(result.data.model).toBe("claude-opus-4-8");82 }83 });8485 it("rejects invalid model", () => {86 const result = chatBodySchema.safeParse({87 query: "Test",88 model: "gpt-4",89 });90 expect(result.success).toBe(false);91 });92});9394describe("registerBodySchema", () => {95 it("accepts valid name", () => {96 const result = registerBodySchema.safeParse({ name: "Alice" });97 expect(result.success).toBe(true);98 });99100 it("rejects name shorter than 2 chars", () => {101 const result = registerBodySchema.safeParse({ name: "A" });102 expect(result.success).toBe(false);103 });104105 it("rejects missing name", () => {106 const result = registerBodySchema.safeParse({});107 expect(result.success).toBe(false);108 });109});110111describe("loginBodySchema", () => {112 it("accepts valid token", () => {113 const result = loginBodySchema.safeParse({ token: "vquant-abc1234" });114 expect(result.success).toBe(true);115 });116117 it("rejects empty token", () => {118 const result = loginBodySchema.safeParse({ token: "" });119 expect(result.success).toBe(false);120 });121});122123describe("heartbeatBodySchema", () => {124 it("accepts valid heartbeat", () => {125 const result = heartbeatBodySchema.safeParse({126 sessionId: "sess-123",127 status: "generating",128 currentQuery: "Analyzing NVDA",129 });130 expect(result.success).toBe(true);131 });132133 it("accepts minimal heartbeat (sessionId only)", () => {134 const result = heartbeatBodySchema.safeParse({ sessionId: "sess-123" });135 expect(result.success).toBe(true);136 });137138 it("rejects missing sessionId", () => {139 const result = heartbeatBodySchema.safeParse({ status: "idle" });140 expect(result.success).toBe(false);141 });142});143144describe("shareBodySchema", () => {145 it("accepts valid share request", () => {146 const result = shareBodySchema.safeParse({147 question: "What is AAPL?",148 answer: "Apple Inc. is...",149 });150 expect(result.success).toBe(true);151 });152153 it("rejects missing question", () => {154 const result = shareBodySchema.safeParse({ answer: "Some answer" });155 expect(result.success).toBe(false);156 });157158 it("rejects missing answer", () => {159 const result = shareBodySchema.safeParse({ question: "Some question" });160 expect(result.success).toBe(false);161 });162});163