diff --git a/tests/unit/profiles/kiro-integration.test.js b/tests/unit/profiles/kiro-integration.test.js index 97d78061..5f1e9e59 100644 --- a/tests/unit/profiles/kiro-integration.test.js +++ b/tests/unit/profiles/kiro-integration.test.js @@ -51,15 +51,16 @@ describe('Kiro Integration', () => { function mockCreateKiroStructure() { // This function simulates the actual kiro profile creation logic // It explicitly calls the mocked fs methods to ensure consistency with the test environment - + // Simulate directory creation calls - these will call the mocked mkdirSync fs.mkdirSync(path.join(tempDir, '.kiro'), { recursive: true }); fs.mkdirSync(path.join(tempDir, '.kiro', 'steering'), { recursive: true }); + fs.mkdirSync(path.join(tempDir, '.kiro', 'settings'), { recursive: true }); - // Create MCP config file at .kiro/mcp.json (not in settings subdirectory) + // Create MCP config file at .kiro/settings/mcp.json // This will call the mocked writeFileSync fs.writeFileSync( - path.join(tempDir, '.kiro', 'mcp.json'), + path.join(tempDir, '.kiro', 'settings', 'mcp.json'), JSON.stringify({ mcpServers: {} }, null, 2) ); @@ -97,6 +98,12 @@ describe('Kiro Integration', () => { recursive: true } ); + expect(fs.mkdirSync).toHaveBeenCalledWith( + path.join(tempDir, '.kiro', 'settings'), + { + recursive: true + } + ); }); test('creates Kiro mcp.json with mcpServers format', () => { @@ -105,7 +112,7 @@ describe('Kiro Integration', () => { // Assert expect(fs.writeFileSync).toHaveBeenCalledWith( - path.join(tempDir, '.kiro', 'mcp.json'), + path.join(tempDir, '.kiro', 'settings', 'mcp.json'), JSON.stringify({ mcpServers: {} }, null, 2) ); }); diff --git a/tests/unit/profiles/mcp-config-validation.test.js b/tests/unit/profiles/mcp-config-validation.test.js index 1d051370..edf3ac78 100644 --- a/tests/unit/profiles/mcp-config-validation.test.js +++ b/tests/unit/profiles/mcp-config-validation.test.js @@ -44,8 +44,8 @@ describe('MCP Configuration Validation', () => { kiro: { shouldHaveMcp: true, expectedDir: '.kiro', - expectedConfigName: 'mcp.json', - expectedPath: '.kiro/mcp.json' + expectedConfigName: 'settings/mcp.json', + expectedPath: '.kiro/settings/mcp.json' }, opencode: { shouldHaveMcp: true, @@ -134,6 +134,7 @@ describe('MCP Configuration Validation', () => { test('should ensure all MCP-enabled profiles use proper directory structure', () => { const rootProfiles = ['opencode', 'claude', 'codex']; // Profiles that use root directory for config + const nestedConfigProfiles = ['kiro']; // Profiles that use nested directories for config RULE_PROFILES.forEach((profileName) => { const profile = getRulesProfile(profileName); @@ -146,6 +147,11 @@ describe('MCP Configuration Validation', () => { // Other root profiles normalize to just the filename (no ./ prefix) expect(profile.mcpConfigPath).toMatch(/^[\w_.]+$/); } + } else if (nestedConfigProfiles.includes(profileName)) { + // Profiles with nested config directories + expect(profile.mcpConfigPath).toMatch( + /^\.[\w-]+\/[\w-]+\/[\w_.]+$/ + ); } else { // Other profiles should have config files in their specific directories expect(profile.mcpConfigPath).toMatch(/^\.[\w-]+\/[\w_.]+$/); @@ -353,6 +359,13 @@ describe('MCP Configuration Validation', () => { // Other root profiles normalize to just the filename expect(profile.mcpConfigPath).toBe(profile.mcpConfigName); } + } else if (profileName === 'kiro') { + // Kiro has a nested config structure + const parts = profile.mcpConfigPath.split('/'); + expect(parts).toHaveLength(3); // Should be profileDir/settings/mcp.json + expect(parts[0]).toBe(profile.profileDir); + expect(parts[1]).toBe('settings'); + expect(parts[2]).toBe('mcp.json'); } else { // Non-root profiles should have profileDir/configName structure const parts = profile.mcpConfigPath.split('/'); diff --git a/tests/unit/profiles/rule-transformer-kiro.test.js b/tests/unit/profiles/rule-transformer-kiro.test.js index 4fb76a74..b1a2ce81 100644 --- a/tests/unit/profiles/rule-transformer-kiro.test.js +++ b/tests/unit/profiles/rule-transformer-kiro.test.js @@ -202,8 +202,8 @@ Use the .mdc extension for all rule files.`; expect(kiroProfile.displayName).toBe('Kiro'); expect(kiroProfile.profileDir).toBe('.kiro'); expect(kiroProfile.mcpConfig).toBe(true); - expect(kiroProfile.mcpConfigName).toBe('mcp.json'); - expect(kiroProfile.mcpConfigPath).toBe('.kiro/mcp.json'); + expect(kiroProfile.mcpConfigName).toBe('settings/mcp.json'); + expect(kiroProfile.mcpConfigPath).toBe('.kiro/settings/mcp.json'); expect(kiroProfile.includeDefaultRules).toBe(true); expect(kiroProfile.fileMap).toEqual({ 'rules/cursor_rules.mdc': 'kiro_rules.md', diff --git a/tests/unit/profiles/rule-transformer.test.js b/tests/unit/profiles/rule-transformer.test.js index 0bc26833..4e2fbcee 100644 --- a/tests/unit/profiles/rule-transformer.test.js +++ b/tests/unit/profiles/rule-transformer.test.js @@ -215,8 +215,8 @@ describe('Rule Transformer - General', () => { }, kiro: { mcpConfig: true, - mcpConfigName: 'mcp.json', - expectedPath: '.kiro/mcp.json' + mcpConfigName: 'settings/mcp.json', + expectedPath: '.kiro/settings/mcp.json' }, opencode: { mcpConfig: true,