Skip to main content
Glama

YouTube Transcript DL MCP Server

by jedarden
MIT License
0
2
TDD-ESM-MIGRATION-TESTS.md7.73 kB
# TDD Tests for ESM Migration - Complete Implementation ## 🎯 Task Completion Summary I have successfully created comprehensive **Test-Driven Development (TDD)** tests for the ESM migration of the YouTube Transcript MCP Server. These tests are designed to **FAIL FIRST** and then **PASS** after implementing the ESM migration, ensuring the exact `ERR_REQUIRE_ESM` error is fixed. ## 📋 Comprehensive Test Suite Created ### 1. **Binary Execution Tests** (`tests/esm-migration/binary-execution.test.ts`) - ✅ **Package.json Configuration**: Verifies `type: "module"` and Node.js >= 18 - ✅ **Binary File Structure**: Checks shebang, ESM imports vs require statements - ✅ **ERR_REQUIRE_ESM Prevention**: Directly tests the exact error we're fixing - ✅ **Command Execution**: Tests `--help`, `start`, and `test` commands - ✅ **Environment Variables**: Tests MCP_TRANSPORT and PORT handling - ✅ **Signal Handling**: Tests SIGINT/SIGTERM graceful shutdown ### 2. **Import Resolution Tests** (`tests/esm-migration/import-resolution.test.ts`) - ✅ **TypeScript Configuration**: ESNext modules, ES2022 target, node resolution - ✅ **Source File Analysis**: Ensures ESM syntax, no CommonJS patterns - ✅ **Compiled Output Verification**: .js extensions for relative imports - ✅ **MCP SDK Compatibility**: Tests all MCP SDK import paths - ✅ **Third-party Packages**: CommonJS package ESM compatibility - ✅ **Dynamic Imports**: Conditional and async import handling - ✅ **File Extension Resolution**: No .ts references in compiled code ### 3. **MCP SDK Compatibility Tests** (`tests/esm-migration/mcp-sdk-compatibility.test.ts`) - ✅ **Server Class Import**: `@modelcontextprotocol/sdk/server/index.js` - ✅ **Transport Modules**: stdio, SSE transport imports - ✅ **Protocol Types**: Schema and type imports - ✅ **Server Initialization**: ESM-compatible instantiation - ✅ **Request Handlers**: Tool registration without import errors - ✅ **Error Handling**: MCP error classes in ESM context - ✅ **TypeScript Types**: Generic and interface compatibility - ✅ **Integration Testing**: MCP + YouTube transcript service ### 4. **CLI Functionality Tests** (`tests/esm-migration/cli-functionality.test.ts`) - ✅ **Command Parsing**: Help, version, unknown command handling - ✅ **Start Command**: Transport, port, verbose option parsing - ✅ **Test Command**: Video ID, language, format options - ✅ **Environment Variables**: MCP_TRANSPORT, PORT respect - ✅ **Signal Handling**: SIGINT/SIGTERM graceful shutdown - ✅ **Error Handling**: Meaningful error messages, not ESM errors - ✅ **Argument Validation**: Required/optional parameter handling ### 5. **Transport Integration Tests** (`tests/esm-migration/transport-integration.test.ts`) - ✅ **Stdio Transport**: Initialization and MCP protocol handling - ✅ **HTTP Transport**: Port binding and server startup - ✅ **SSE Transport**: Initialization (if supported) - ✅ **Multi-Transport Mode**: MCP_MULTI_TRANSPORT environment variable - ✅ **Error Handling**: Invalid transport, port conflicts - ✅ **Transport Modules**: Dynamic loading without errors - ✅ **Async Operations**: Promise-based transport initialization - ✅ **Cleanup Handling**: Proper shutdown and resource cleanup ## 🛠️ Test Infrastructure Created ### Jest ESM Configuration (`tests/esm-migration/jest.esm.config.js`) ```javascript export default { preset: 'ts-jest/presets/default-esm', extensionsToTreatAsEsm: ['.ts'], testEnvironment: 'node', moduleNameMapping: { '^(\\.{1,2}/.*)\\.js$': '$1' }, transform: { '^.+\\.ts$': ['ts-jest', { useESM: true }] } // ... full ESM-compatible configuration } ``` ### ESM Test Setup (`tests/esm-migration/setup.esm.ts`) - ESM-compatible mocking with `jest.unstable_mockModule` - Error handlers for ESM-specific issues - Mock functions for winston and youtube-transcript ### Test Runner Script (`tests/esm-migration/run-esm-tests.sh`) - Automated build verification - Binary smoke tests - ESM module loading verification - Comprehensive test execution ### Package.json Scripts Added ```json { "test:esm": "jest --config=tests/esm-migration/jest.esm.config.js", "test:esm-migration": "./tests/esm-migration/run-esm-tests.sh", "verify:esm": "npm run build && npm run test:esm" } ``` ## 🎯 Current Test Status (Expected to FAIL) **BEFORE ESM Migration** - Tests will **FAIL** because: - ❌ Package.json has `"module": "commonjs"` - ❌ TypeScript compiles to CommonJS format - ❌ Binary uses `require()` statements - ❌ **ERR_REQUIRE_ESM error occurs** when running binary - ❌ Import statements don't have .js extensions - ❌ MCP SDK imports may not work correctly ## ✅ Expected Test Status (After ESM Migration) **AFTER ESM Migration** - Tests will **PASS** because: - ✅ Package.json has `"type": "module"` - ✅ TypeScript compiles to ESNext modules - ✅ Binary uses `import` statements with .js extensions - ✅ **No ERR_REQUIRE_ESM errors occur** - ✅ All imports resolve correctly - ✅ MCP SDK integration preserved - ✅ CLI functionality maintained - ✅ Transport modes work properly ## 🚀 How to Use These Tests ### 1. Run Tests Before Migration (Should FAIL) ```bash # This should show failing tests npm run test:esm-migration ``` ### 2. Implement ESM Migration Follow the test requirements to implement: - Add `"type": "module"` to package.json - Update tsconfig.json to `"module": "ESNext"` - Convert source files to ESM syntax - Add .js extensions to relative imports - Update binary imports ### 3. Run Tests After Migration (Should PASS) ```bash # This should show passing tests npm run test:esm-migration ``` ### 4. Verify Binary Works ```bash # Should NOT show ERR_REQUIRE_ESM node dist/bin/server.js --help node dist/bin/server.js start --transport stdio ``` ## 🔧 Key Implementation Guidelines ### Package Configuration ```json { "type": "module", "engines": { "node": ">=18.0.0" } } ``` ### TypeScript Configuration ```json { "compilerOptions": { "module": "ESNext", "target": "ES2022", "moduleResolution": "node" } } ``` ### Import Syntax ```typescript // ✅ Correct ESM imports import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { MyService } from './services/my-service.js'; // ❌ Avoid CommonJS const { Server } = require('@modelcontextprotocol/sdk/server'); ``` ## 📊 Test Coverage Areas The tests comprehensively cover: - **Binary Execution**: Prevent ERR_REQUIRE_ESM in CLI usage - **Import Resolution**: ESM syntax and .js extensions - **MCP SDK Integration**: Compatibility with external SDK - **CLI Commands**: All command-line functionality - **Transport Layers**: stdio, HTTP, SSE transport modes - **Error Handling**: Graceful errors, not import failures - **Environment Variables**: Configuration via env vars - **Signal Handling**: Graceful shutdown behavior ## 🎉 Success Criteria The ESM migration is successful when: 1. ✅ **All tests in `tests/esm-migration/` PASS** 2. ✅ **No ERR_REQUIRE_ESM errors anywhere** 3. ✅ **Binary executes all commands correctly** 4. ✅ **MCP SDK integration maintained** 5. ✅ **All transport modes functional** 6. ✅ **Existing behavior preserved** ## 📝 Next Steps 1. **Review Test Requirements**: Study the test expectations 2. **Implement ESM Migration**: Make changes to pass the tests 3. **Run Tests Iteratively**: Fix issues until all tests pass 4. **Verify Functionality**: Ensure no regressions 5. **Update Documentation**: Reflect ESM changes --- **These TDD tests serve as the definitive specification for the ESM migration. The implementation is successful when all these tests pass and no ERR_REQUIRE_ESM errors occur.**

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/jedarden/yt-transcript-dl-mcp'

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