Skip to main content
Glama
sanity-check.test.ts10.1 kB
import { describe, it, expect, beforeEach, afterEach } from "vitest"; import Database from "better-sqlite3"; import { SCHEMA } from "../db/schema.js"; describe("Sanity Check - Database Integrity", () => { let db: Database.Database; beforeEach(() => { // Create in-memory database for testing db = new Database(":memory:"); db.exec(SCHEMA); }); afterEach(() => { db.close(); }); describe("Token checks", () => { it("should detect missing token categories", () => { // Insert tokens with only some categories db.prepare( "INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)" ).run("color", "primary", "color.primary", "#000", "--color-primary"); const categories = db.prepare("SELECT DISTINCT category FROM tokens").all() as Array<{ category: string; }>; expect(categories).toHaveLength(1); expect(categories[0].category).toBe("color"); }); it("should count tokens by category", () => { // Insert multiple tokens const insert = db.prepare( "INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)" ); insert.run("color", "primary-100", "color.primary.100", "#fff", "--color-primary-100"); insert.run("color", "primary-200", "color.primary.200", "#eee", "--color-primary-200"); insert.run("spacing", "mu100", "spacing.mu100", "16px", "--spacing-mu100"); const counts = db .prepare("SELECT category, COUNT(*) as count FROM tokens GROUP BY category") .all() as Array<{ category: string; count: number }>; expect(counts).toHaveLength(2); const colorCount = counts.find((c) => c.category === "color"); const spacingCount = counts.find((c) => c.category === "spacing"); expect(colorCount?.count).toBe(2); expect(spacingCount?.count).toBe(1); }); it("should detect missing required fields", () => { // Insert token with missing path db.prepare("INSERT INTO tokens (category, name, path, value_raw) VALUES (?, ?, ?, ?)").run( "color", "test", "", "value" ); const emptyPath = db .prepare("SELECT COUNT(*) as count FROM tokens WHERE path IS NULL OR path = ''") .get() as { count: number }; expect(emptyPath.count).toBe(1); }); }); describe("Component checks", () => { it("should count components by framework", () => { const insert = db.prepare( "INSERT INTO components (name, slug, category, frameworks) VALUES (?, ?, ?, ?)" ); insert.run("Button", "button", "action", '["vue"]'); insert.run("Input", "input", "form", '["vue"]'); insert.run("Card", "card", "layout", '["react"]'); insert.run("Modal", "modal", "feedback", '["vue", "react"]'); const vueCount = db .prepare("SELECT COUNT(*) as count FROM components WHERE frameworks LIKE '%vue%'") .get() as { count: number }; const reactCount = db .prepare("SELECT COUNT(*) as count FROM components WHERE frameworks LIKE '%react%'") .get() as { count: number }; expect(vueCount.count).toBe(3); expect(reactCount.count).toBe(2); }); it("should detect components without props", () => { const insertComponent = db.prepare( "INSERT INTO components (name, slug, frameworks) VALUES (?, ?, ?)" ); const insertProp = db.prepare( "INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)" ); const c1 = insertComponent.run("Button", "button", '["vue"]'); const c2 = insertComponent.run("Input", "input", '["vue"]'); insertComponent.run("Card", "card", '["react"]'); // Only add props to first two components insertProp.run(c1.lastInsertRowid, "size", "string"); insertProp.run(c2.lastInsertRowid, "value", "string"); const total = db.prepare("SELECT COUNT(*) as count FROM components").get() as { count: number; }; const withProps = db .prepare("SELECT COUNT(DISTINCT component_id) as count FROM component_props") .get() as { count: number }; expect(total.count).toBe(3); expect(withProps.count).toBe(2); expect(Math.round((withProps.count / total.count) * 100)).toBe(67); }); }); describe("CSS Utility checks", () => { it("should count CSS utility classes", () => { const insertUtility = db.prepare( "INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)" ); const insertClass = db.prepare( "INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)" ); const u1 = insertUtility.run("Flexy", "flexy", "layout"); const u2 = insertUtility.run("Margin", "margin", "utility"); insertClass.run(u1.lastInsertRowid, ".ml-flexy"); insertClass.run(u1.lastInsertRowid, ".ml-flexy__col"); insertClass.run(u1.lastInsertRowid, ".ml-flexy__col--6of12"); insertClass.run(u2.lastInsertRowid, ".mu100"); const counts = db .prepare( `SELECT u.name, COUNT(c.id) as count FROM css_utilities u LEFT JOIN css_utility_classes c ON c.utility_id = u.id GROUP BY u.id` ) .all() as Array<{ name: string; count: number }>; expect(counts.find((c) => c.name === "Flexy")?.count).toBe(3); expect(counts.find((c) => c.name === "Margin")?.count).toBe(1); }); it("should detect utilities without examples", () => { const insertUtility = db.prepare( "INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)" ); const insertExample = db.prepare( "INSERT INTO css_utility_examples (utility_id, title, code) VALUES (?, ?, ?)" ); const u1 = insertUtility.run("Flexy", "flexy", "layout"); insertUtility.run("Container", "container", "layout"); insertExample.run(u1.lastInsertRowid, "Basic", '<div class="ml-flexy"></div>'); const total = db.prepare("SELECT COUNT(*) as count FROM css_utilities").get() as { count: number; }; const withExamples = db .prepare("SELECT COUNT(DISTINCT utility_id) as count FROM css_utility_examples") .get() as { count: number }; expect(total.count).toBe(2); expect(withExamples.count).toBe(1); }); }); describe("Foreign Key Integrity", () => { it("should detect orphaned component_props", () => { // Disable FK constraints to test orphan detection logic db.pragma("foreign_keys = OFF"); // Insert component const insertComponent = db.prepare( "INSERT INTO components (name, slug, frameworks) VALUES (?, ?, ?)" ); const c1 = insertComponent.run("Button", "button", '["vue"]'); // Insert valid prop db.prepare("INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)").run( c1.lastInsertRowid, "size", "string" ); // Insert orphaned prop (referencing non-existent component) db.prepare("INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)").run( 9999, "orphan", "string" ); const orphans = db .prepare( `SELECT COUNT(*) as count FROM component_props cp WHERE NOT EXISTS (SELECT 1 FROM components c WHERE c.id = cp.component_id)` ) .get() as { count: number }; expect(orphans.count).toBe(1); // Re-enable FK constraints db.pragma("foreign_keys = ON"); }); it("should detect orphaned css_utility_classes", () => { // Disable FK constraints to test orphan detection logic db.pragma("foreign_keys = OFF"); const insertUtility = db.prepare( "INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)" ); const u1 = insertUtility.run("Flexy", "flexy", "layout"); db.prepare("INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)").run( u1.lastInsertRowid, ".ml-flexy" ); db.prepare("INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)").run( 9999, ".orphan" ); const orphans = db .prepare( `SELECT COUNT(*) as count FROM css_utility_classes cuc WHERE NOT EXISTS (SELECT 1 FROM css_utilities cu WHERE cu.id = cuc.utility_id)` ) .get() as { count: number }; expect(orphans.count).toBe(1); // Re-enable FK constraints db.pragma("foreign_keys = ON"); }); }); describe("Full-Text Search", () => { it("should index tokens for FTS", () => { db.prepare( "INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)" ).run("color", "primary-100", "color.primary.100", "#1a73e8", "--color-primary-100"); db.prepare( "INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)" ).run("color", "secondary-100", "color.secondary.100", "#666", "--color-secondary-100"); const results = db .prepare("SELECT COUNT(*) as count FROM tokens_fts WHERE tokens_fts MATCH 'primary'") .get() as { count: number }; expect(results.count).toBe(1); }); it("should index documentation for FTS", () => { db.prepare( "INSERT INTO documentation (title, path, content, category, keywords) VALUES (?, ?, ?, ?, ?)" ).run( "Button", "/components/button", "Button component documentation", "components", "button,action" ); db.prepare( "INSERT INTO documentation (title, path, content, category, keywords) VALUES (?, ?, ?, ?, ?)" ).run("Input", "/components/input", "Input field documentation", "components", "input,form"); const results = db .prepare("SELECT COUNT(*) as count FROM docs_fts WHERE docs_fts MATCH 'button'") .get() as { count: number }; expect(results.count).toBe(1); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MerzoukeMansouri/adeo-mozaic-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server