Skip to main content
Glama
validation.unit.test.ts4.49 kB
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest" import { validateEnvironment } from "../../src/utils/validation" describe("validation utilities", () => { let originalEnv: NodeJS.ProcessEnv // eslint-disable-next-line @typescript-eslint/no-explicit-any let exitSpy: any // eslint-disable-next-line @typescript-eslint/no-explicit-any let consoleErrorSpy: any beforeEach(() => { // Save original environment originalEnv = { ...process.env } // Mock process.exit and console.error exitSpy = vi.spyOn(process, "exit").mockImplementation(() => { throw new Error("process.exit called") }) consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {}) }) afterEach(() => { // Restore original environment process.env = originalEnv // Restore mocks exitSpy.mockRestore() consoleErrorSpy.mockRestore() }) describe("validateEnvironment", () => { it("passes validation with valid delivery token", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" expect(() => validateEnvironment()).not.toThrow() expect(exitSpy).not.toHaveBeenCalled() expect(consoleErrorSpy).not.toHaveBeenCalled() }) it("fails validation without delivery token", () => { delete process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN expect(() => validateEnvironment()).toThrow("process.exit called") expect(exitSpy).toHaveBeenCalledWith(1) expect(consoleErrorSpy).toHaveBeenCalledWith( "CONTENTFUL_DELIVERY_ACCESS_TOKEN must be set for GraphQL operations", ) }) it("passes validation with HTTP server disabled", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "false" expect(() => validateEnvironment()).not.toThrow() expect(exitSpy).not.toHaveBeenCalled() }) it("passes validation with HTTP server enabled and valid port", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" process.env.HTTP_PORT = "3000" expect(() => validateEnvironment()).not.toThrow() expect(exitSpy).not.toHaveBeenCalled() }) it("passes validation with HTTP server enabled and no port specified", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" delete process.env.HTTP_PORT expect(() => validateEnvironment()).not.toThrow() expect(exitSpy).not.toHaveBeenCalled() }) it("fails validation with HTTP server enabled and invalid port", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" process.env.HTTP_PORT = "invalid" expect(() => validateEnvironment()).toThrow("process.exit called") expect(exitSpy).toHaveBeenCalledWith(1) expect(consoleErrorSpy).toHaveBeenCalledWith( "HTTP_PORT must be a valid port number (1-65535)", ) }) it("fails validation with HTTP server enabled and port out of range (too low)", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" process.env.HTTP_PORT = "0" expect(() => validateEnvironment()).toThrow("process.exit called") expect(exitSpy).toHaveBeenCalledWith(1) expect(consoleErrorSpy).toHaveBeenCalledWith( "HTTP_PORT must be a valid port number (1-65535)", ) }) it("fails validation with HTTP server enabled and port out of range (too high)", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" process.env.HTTP_PORT = "65536" expect(() => validateEnvironment()).toThrow("process.exit called") expect(exitSpy).toHaveBeenCalledWith(1) expect(consoleErrorSpy).toHaveBeenCalledWith( "HTTP_PORT must be a valid port number (1-65535)", ) }) it("passes validation with HTTP server enabled and edge case ports", () => { process.env.CONTENTFUL_DELIVERY_ACCESS_TOKEN = "test-token" process.env.ENABLE_HTTP_SERVER = "true" // Test minimum valid port process.env.HTTP_PORT = "1" expect(() => validateEnvironment()).not.toThrow() // Test maximum valid port process.env.HTTP_PORT = "65535" expect(() => validateEnvironment()).not.toThrow() }) }) })

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/ivo-toby/contentful-mcp-graphql'

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