Skip to main content
Glama

DollhouseMCP

by DollhouseMCP
implement-configmanager-reset.shโ€ข6.35 kB
#!/bin/bash # Script to implement ConfigManager test-only reset method # This is a FEATURE, not a hotfix (no production issue) echo "=== ConfigManager Test Reset Implementation ===" echo "" echo "This script will guide you through implementing the test-only reset method." echo "This is a ~30 minute task that will allow the skipped tests to run." echo "" # Color codes for output GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}Step 1: GitFlow Branch Setup${NC}" echo "----------------------------------------" echo "Following GitFlow best practices:" echo "" echo -e "${YELLOW}Run these commands:${NC}" echo "" cat << 'EOF' # Ensure you're on develop and up to date git checkout develop git pull origin develop # Create feature branch (NOT hotfix - this isn't a production issue) git checkout -b feature/fix-configmanager-test-reset EOF echo "" echo -e "${BLUE}Step 2: Add Reset Method to ConfigManager${NC}" echo "----------------------------------------" echo "Edit: src/security/ConfigManager.ts" echo "" echo -e "${YELLOW}Add this method to the ConfigManager class:${NC}" echo "" cat << 'EOF' /** * Reset the singleton instance for testing purposes only. * This method is ONLY available in test environments. * * @throws Error if called outside test environment */ static resetForTesting(): void { // Security check: only allow in test environment if (process.env.NODE_ENV !== 'test') { const errorMsg = 'ConfigManager.resetForTesting() can only be called in test environment'; console.error(errorMsg); throw new Error(errorMsg); } // Reset the singleton instance ConfigManager.instance = null; // Log for debugging if (process.env.DEBUG) { console.log('[TEST] ConfigManager singleton reset'); } } EOF echo "" echo -e "${BLUE}Step 3: Update the Skipped Tests${NC}" echo "----------------------------------------" echo "Edit: test/__tests__/unit/security/ConfigManager.test.ts" echo "" echo -e "${YELLOW}1. Remove the .skip from these three tests:${NC}" echo " - 'should persist config values between instances'" echo " - 'should reject __proto__ in resetConfig section'" echo " - 'should reject constructor in resetConfig section'" echo "" echo -e "${YELLOW}2. Add beforeEach block to the describe block:${NC}" echo "" cat << 'EOF' describe('ConfigManager', () => { beforeEach(() => { // Reset singleton for each test to ensure clean state ConfigManager.resetForTesting(); }); // ... existing tests ... }); EOF echo "" echo -e "${BLUE}Step 4: Test Locally${NC}" echo "----------------------------------------" echo -e "${YELLOW}Run these commands to verify the fix:${NC}" echo "" cat << 'EOF' # Run only the ConfigManager tests npm test -- test/__tests__/unit/security/ConfigManager.test.ts # If all pass, run the full test suite npm test # Check test count (should be 3 more than before) npm test 2>&1 | grep -E "Tests:.*passed" EOF echo "" echo -e "${BLUE}Step 5: Commit with Detailed Message${NC}" echo "----------------------------------------" echo -e "${YELLOW}Use this commit message:${NC}" echo "" cat << 'EOF' git add -A git commit -m "feat: Add test-only reset method to ConfigManager for proper test isolation This implements the industry-standard solution for testing singletons by adding a resetForTesting() method that only works in test environments. ## Problem ConfigManager uses singleton pattern which maintains state between tests, preventing proper isolation for security tests. This caused 3 tests to be skipped even though the production security code works correctly. ## Solution Added ConfigManager.resetForTesting() method that: - Only works when NODE_ENV === 'test' (throws error otherwise) - Resets the singleton instance to null - Allows each test to start with fresh state - Follows patterns used by Google, Facebook, Microsoft ## Changes 1. Added resetForTesting() static method to ConfigManager 2. Added beforeEach() to reset singleton in tests 3. Unskipped 3 previously failing tests: - 'should persist config values between instances' - 'should reject __proto__ in resetConfig section' - 'should reject constructor in resetConfig section' ## Testing - All ConfigManager tests now pass (including previously skipped) - No impact on production code (protected by NODE_ENV check) - Full test suite passes This is a test infrastructure improvement, not a bug fix. The production security has always worked correctly. Closes #[issue-number] ๐Ÿค– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>" EOF echo "" echo -e "${BLUE}Step 6: Create Pull Request${NC}" echo "----------------------------------------" echo -e "${YELLOW}Create PR to develop (NOT main):${NC}" echo "" cat << 'EOF' gh pr create \ --base develop \ --title "feat: Add test-only reset method to ConfigManager" \ --body "## Summary Implements test-only reset method for ConfigManager singleton to enable proper test isolation. ## Problem - ConfigManager singleton maintains state between tests - 3 security tests were skipped due to isolation issues - Production code is secure but tests couldn't verify it ## Solution - Added \`resetForTesting()\` method (only works in test environment) - Updated tests to reset singleton in \`beforeEach()\` - Unskipped 3 previously failing tests ## Testing - โœ… All ConfigManager tests pass - โœ… Full test suite passes - โœ… No production impact (environment check) ## Type of Change - [ ] Bug fix - [x] New feature (test infrastructure) - [ ] Breaking change - [ ] Documentation update ## Notes - This follows industry best practices (Google, Meta, Microsoft) - Zero production risk - method only works in test environment - Improves test coverage and confidence" EOF echo "" echo -e "${GREEN}=== Implementation Complete ===${NC}" echo "" echo "Timeline:" echo "- Implementation: ~15 minutes" echo "- Testing: ~10 minutes" echo "- PR creation: ~5 minutes" echo "- Total: ~30 minutes" echo "" echo "Next steps:" echo "1. Follow the steps above to implement" echo "2. Create PR to develop branch" echo "3. Include in next release (v1.7.4 or v1.8.0)" echo "" echo -e "${GREEN}This is a safe, low-risk improvement that will restore full test coverage!${NC}"

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/DollhouseMCP/DollhouseMCP'

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