Skip to main content
Glama

XcodeBuildMCP

test-runner-env-integration.test.ts5.62 kB
/** * Integration tests for TEST_RUNNER_ environment variable passing * * These tests verify that testRunnerEnv parameters are correctly processed * and passed through the execution chain. We focus on testing the core * functionality that matters most: environment variable normalization. */ import { describe, it, expect } from 'vitest'; import { normalizeTestRunnerEnv } from '../environment.ts'; describe('TEST_RUNNER_ Environment Variable Integration', () => { describe('Core normalization functionality', () => { it('should normalize environment variables correctly for real scenarios', () => { // Test the GitHub issue scenario: USE_DEV_MODE -> TEST_RUNNER_USE_DEV_MODE const gitHubIssueScenario = { USE_DEV_MODE: 'YES' }; const normalized = normalizeTestRunnerEnv(gitHubIssueScenario); expect(normalized).toEqual({ TEST_RUNNER_USE_DEV_MODE: 'YES' }); }); it('should handle mixed prefixed and unprefixed variables', () => { const mixedVars = { USE_DEV_MODE: 'YES', // Should be prefixed TEST_RUNNER_SKIP_ANIMATIONS: '1', // Already prefixed, preserve DEBUG_MODE: 'true', // Should be prefixed }; const normalized = normalizeTestRunnerEnv(mixedVars); expect(normalized).toEqual({ TEST_RUNNER_USE_DEV_MODE: 'YES', TEST_RUNNER_SKIP_ANIMATIONS: '1', TEST_RUNNER_DEBUG_MODE: 'true', }); }); it('should filter out null and undefined values', () => { const varsWithNulls = { VALID_VAR: 'value1', NULL_VAR: null as any, UNDEFINED_VAR: undefined as any, ANOTHER_VALID: 'value2', }; const normalized = normalizeTestRunnerEnv(varsWithNulls); expect(normalized).toEqual({ TEST_RUNNER_VALID_VAR: 'value1', TEST_RUNNER_ANOTHER_VALID: 'value2', }); // Ensure null/undefined vars are not present expect(normalized).not.toHaveProperty('TEST_RUNNER_NULL_VAR'); expect(normalized).not.toHaveProperty('TEST_RUNNER_UNDEFINED_VAR'); }); it('should handle special characters in keys and values', () => { const specialChars = { 'VAR_WITH-DASH': 'value-with-dash', 'VAR.WITH.DOTS': 'value/with/slashes', VAR_WITH_SPACES: 'value with spaces', TEST_RUNNER_PRE_EXISTING: 'already=prefixed=value', }; const normalized = normalizeTestRunnerEnv(specialChars); expect(normalized).toEqual({ 'TEST_RUNNER_VAR_WITH-DASH': 'value-with-dash', 'TEST_RUNNER_VAR.WITH.DOTS': 'value/with/slashes', TEST_RUNNER_VAR_WITH_SPACES: 'value with spaces', TEST_RUNNER_PRE_EXISTING: 'already=prefixed=value', }); }); it('should handle empty values correctly', () => { const emptyValues = { EMPTY_STRING: '', NORMAL_VAR: 'normal_value', }; const normalized = normalizeTestRunnerEnv(emptyValues); expect(normalized).toEqual({ TEST_RUNNER_EMPTY_STRING: '', TEST_RUNNER_NORMAL_VAR: 'normal_value', }); }); it('should handle edge case prefix variations', () => { const prefixEdgeCases = { TEST_RUN: 'not_quite_prefixed', // Should get prefixed TEST_RUNNER: 'no_underscore', // Should get prefixed TEST_RUNNER_CORRECT: 'already_good', // Should stay as-is test_runner_lowercase: 'lowercase', // Should get prefixed (case sensitive) }; const normalized = normalizeTestRunnerEnv(prefixEdgeCases); expect(normalized).toEqual({ TEST_RUNNER_TEST_RUN: 'not_quite_prefixed', TEST_RUNNER_TEST_RUNNER: 'no_underscore', TEST_RUNNER_CORRECT: 'already_good', TEST_RUNNER_test_runner_lowercase: 'lowercase', }); }); it('should preserve immutability of input object', () => { const originalInput = { FOO: 'bar', BAZ: 'qux' }; const inputCopy = { ...originalInput }; const normalized = normalizeTestRunnerEnv(originalInput); // Original should be unchanged expect(originalInput).toEqual(inputCopy); // Result should be different expect(normalized).not.toEqual(originalInput); expect(normalized).toEqual({ TEST_RUNNER_FOO: 'bar', TEST_RUNNER_BAZ: 'qux', }); }); it('should handle the complete test environment workflow', () => { // Simulate a comprehensive test environment setup const fullTestEnv = { // Core testing flags USE_DEV_MODE: 'YES', SKIP_ANIMATIONS: '1', FAST_MODE: 'true', // Already prefixed variables (user might provide these) TEST_RUNNER_TIMEOUT: '30', TEST_RUNNER_RETRIES: '3', // UI testing specific UI_TESTING_MODE: 'enabled', SCREENSHOT_MODE: 'disabled', // Performance testing PERFORMANCE_TESTS: 'false', MEMORY_TESTING: 'true', // Special values EMPTY_VAR: '', PATH_VAR: '/usr/local/bin:/usr/bin', }; const normalized = normalizeTestRunnerEnv(fullTestEnv); expect(normalized).toEqual({ TEST_RUNNER_USE_DEV_MODE: 'YES', TEST_RUNNER_SKIP_ANIMATIONS: '1', TEST_RUNNER_FAST_MODE: 'true', TEST_RUNNER_TIMEOUT: '30', TEST_RUNNER_RETRIES: '3', TEST_RUNNER_UI_TESTING_MODE: 'enabled', TEST_RUNNER_SCREENSHOT_MODE: 'disabled', TEST_RUNNER_PERFORMANCE_TESTS: 'false', TEST_RUNNER_MEMORY_TESTING: 'true', TEST_RUNNER_EMPTY_VAR: '', TEST_RUNNER_PATH_VAR: '/usr/local/bin:/usr/bin', }); }); }); });

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/cameroncooke/XcodeBuildMCP'

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