Skip to main content
Glama
database-schema.test.ts4.37 kB
/** * Database schema validation tests */ import type { ContactPurpose, CreateContactInput } from "../database/types"; describe("Database Schema Validation", () => { describe("ContactPurpose Type", () => { it("should accept valid contact purposes", () => { const validPurposes: ContactPurpose[] = [ "collaboration", "job_opportunity", "consulting", "general_inquiry", ]; validPurposes.forEach((purpose) => { expect(typeof purpose).toBe("string"); }); }); }); describe("CreateContactInput Interface", () => { it("should validate required fields", () => { const validInput: CreateContactInput = { message: "This is a valid test message with sufficient length", purpose: "collaboration", }; expect(validInput.message).toBeDefined(); expect(validInput.purpose).toBeDefined(); expect(validInput.message.length).toBeGreaterThanOrEqual(10); }); it("should validate optional fields", () => { const inputWithOptionals: CreateContactInput = { message: "Test message with all optional fields included", contactEmail: "test@example.com", purpose: "job_opportunity", ipAddress: "192.168.1.1", userAgent: "Mozilla/5.0 (Test Browser)", }; expect(inputWithOptionals.contactEmail).toBeDefined(); expect(inputWithOptionals.ipAddress).toBeDefined(); expect(inputWithOptionals.userAgent).toBeDefined(); }); it("should handle minimal valid input", () => { const minimalInput: CreateContactInput = { message: "Minimal valid test message for database insertion", purpose: "general_inquiry", }; expect(minimalInput.message.length).toBeGreaterThanOrEqual(10); expect(minimalInput.purpose).toBe("general_inquiry"); }); }); describe("Message Validation", () => { it("should reject messages that are too short", () => { const shortMessage = "Short"; expect(shortMessage.length).toBeLessThan(10); }); it("should reject messages that are too long", () => { const longMessage = "A".repeat(501); expect(longMessage.length).toBeGreaterThan(500); }); it("should accept messages within valid range", () => { const validMessage = "This is a properly sized message for testing"; expect(validMessage.length).toBeGreaterThanOrEqual(10); expect(validMessage.length).toBeLessThanOrEqual(500); }); }); describe("Email Validation", () => { it("should validate email format", () => { const validEmails = [ "test@example.com", "user.name@domain.org", "contact+tag@company.co.uk", ]; const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; validEmails.forEach((email) => { expect(emailRegex.test(email)).toBe(true); }); }); it("should reject invalid email formats", () => { const invalidEmails = [ "notanemail", "@domain.com", "user@", "user@domain", "user space@domain.com", ]; const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; invalidEmails.forEach((email) => { expect(emailRegex.test(email)).toBe(false); }); }); }); describe("Reference ID Generation", () => { it("should generate unique reference IDs", () => { // Simulate reference ID generation logic function generateReferenceId(): string { const timestamp = Date.now().toString(36); const random = Math.random().toString(36).substr(2, 5); return `${timestamp}-${random}`.toUpperCase(); } const id1 = generateReferenceId(); const id2 = generateReferenceId(); expect(id1).not.toBe(id2); expect(id1).toMatch(/^[A-Z0-9]+-[A-Z0-9]+$/); expect(id2).toMatch(/^[A-Z0-9]+-[A-Z0-9]+$/); }); }); describe("Database Constraints", () => { it("should enforce purpose enum values", () => { const allowedPurposes = [ "collaboration", "job_opportunity", "consulting", "general_inquiry", ]; const testPurpose = "collaboration"; expect(allowedPurposes).toContain(testPurpose); }); it("should handle null values for optional fields", () => { const inputWithNulls: CreateContactInput = { message: "Test message with null optional fields", purpose: "general_inquiry", contactEmail: undefined, ipAddress: undefined, userAgent: undefined, }; expect(inputWithNulls.contactEmail).toBeUndefined(); expect(inputWithNulls.ipAddress).toBeUndefined(); expect(inputWithNulls.userAgent).toBeUndefined(); }); }); });

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/duyet/duyet-mcp-server'

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