Skip to main content
Glama
env-loading.test.js5.37 kB
/** * Tests for Environment Variable Loading * * Note: These tests verify dotenv loading logic using absolute paths. * process.chdir() is not supported in Vitest workers, so we test * path resolution logic without changing the working directory. */ import { writeFileSync, unlinkSync, existsSync } from "fs"; import { join, dirname } from "path"; import { fileURLToPath } from "url"; import { describe, it, expect, beforeEach, afterEach } from "vitest"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const rootDir = join(__dirname, ".."); describe("Environment Variable Loading", () => { const testEnvPath = join(rootDir, ".env.test"); let originalEnv; beforeEach(() => { // Backup original environment originalEnv = { ...process.env }; // Create test .env file const testEnvContent = ` WORDPRESS_SITE_URL=https://test.example.com WORDPRESS_USERNAME=testuser WORDPRESS_APP_PASSWORD=test1234567890 WORDPRESS_AUTH_METHOD=app-password DEBUG=false `; writeFileSync(testEnvPath, testEnvContent); }); afterEach(() => { // Restore original environment process.env = originalEnv; // Cleanup test .env file if (existsSync(testEnvPath)) { unlinkSync(testEnvPath); } }); it("should load .env from absolute path", async () => { // Clear environment variables delete process.env.WORDPRESS_SITE_URL; delete process.env.WORDPRESS_USERNAME; // Test the dotenv loading logic with absolute path const { config } = await import("dotenv"); const result = config({ path: testEnvPath }); expect(result.error).toBeUndefined(); expect(result.parsed).toBeDefined(); expect(result.parsed.WORDPRESS_SITE_URL).toBe("https://test.example.com"); expect(result.parsed.WORDPRESS_USERNAME).toBe("testuser"); }); it("should load environment variables using project root path", async () => { // Clear environment variables delete process.env.WORDPRESS_SITE_URL; delete process.env.WORDPRESS_USERNAME; // Test using path relative to project root (absolute) const { config } = await import("dotenv"); const envPath = join(rootDir, ".env.test"); const result = config({ path: envPath }); expect(result.error).toBeUndefined(); expect(result.parsed).toBeDefined(); expect(result.parsed.WORDPRESS_SITE_URL).toBe("https://test.example.com"); expect(result.parsed.WORDPRESS_USERNAME).toBe("testuser"); }); it("should handle missing .env file gracefully", async () => { const { config } = await import("dotenv"); const nonExistentPath = join(rootDir, ".env.nonexistent"); const result = config({ path: nonExistentPath }); // dotenv should not throw an error for missing files expect(result.error).toBeDefined(); expect(result.parsed).toEqual({}); }); it("should load environment variables in the correct format", async () => { const { config } = await import("dotenv"); const result = config({ path: testEnvPath }); expect(result.parsed).toMatchObject({ WORDPRESS_SITE_URL: expect.stringMatching(/^https?:\/\//), WORDPRESS_USERNAME: expect.any(String), WORDPRESS_APP_PASSWORD: expect.any(String), WORDPRESS_AUTH_METHOD: expect.stringMatching(/^(app-password|jwt|basic|api-key|cookie)$/), DEBUG: expect.stringMatching(/^(true|false)$/), }); }); it("should resolve paths correctly relative to dist directory", () => { // Simulate being in the dist directory (where compiled index.js is) const distDir = join(rootDir, "dist"); // Test path resolution logic const mockFilename = join(distDir, "index.js"); const mockDirname = dirname(mockFilename); const resolvedRootDir = join(mockDirname, ".."); const resolvedEnvPath = join(resolvedRootDir, ".env.test"); expect(resolvedRootDir).toBe(rootDir); expect(existsSync(resolvedEnvPath)).toBe(true); }); it("should work when server path resolves from dist directory", async () => { // Test path resolution logic that would be used in dist/index.js const mockDistPath = join(rootDir, "dist", "index.js"); const mockDistDir = dirname(mockDistPath); const resolvedRootDir = join(mockDistDir, ".."); const resolvedEnvPath = join(resolvedRootDir, ".env.test"); // Verify the path resolution works correctly expect(resolvedRootDir).toBe(rootDir); expect(existsSync(resolvedEnvPath)).toBe(true); // Test that we can load the env file from this resolved path const { config } = await import("dotenv"); const result = config({ path: resolvedEnvPath }); expect(result.error).toBeUndefined(); expect(result.parsed.WORDPRESS_SITE_URL).toBe("https://test.example.com"); }); it("should work with absolute paths regardless of resolution method", async () => { // The absolute path approach should always work const absoluteEnvPath = join(rootDir, ".env.test"); // Verify path exists expect(existsSync(absoluteEnvPath)).toBe(true); // The absolute path should work const { config } = await import("dotenv"); const result = config({ path: absoluteEnvPath }); expect(result.error).toBeUndefined(); expect(result.parsed.WORDPRESS_SITE_URL).toBe("https://test.example.com"); expect(result.parsed.WORDPRESS_USERNAME).toBe("testuser"); }); });

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/docdyhr/mcp-wordpress'

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