Skip to main content
Glama

translator-ai

by DatanoiseTV
checkKeys.test.ts5.46 kB
import { compareKeys } from '../../src/helpers'; describe('Check Keys Feature', () => { describe('compareKeys', () => { it('should detect all keys are present', () => { const source = { greeting: 'Hello', farewell: 'Goodbye', nested: { item1: 'One', item2: 'Two' } }; const output = { greeting: 'Hola', farewell: 'Adiós', nested: { item1: 'Uno', item2: 'Dos' } }; const result = compareKeys(source, output); expect(result.isValid).toBe(true); expect(result.missingKeys.size).toBe(0); expect(result.extraKeys.size).toBe(0); expect(result.sourceKeys.size).toBe(5); // greeting, farewell, nested, nested.item1, nested.item2 }); it('should detect missing keys', () => { const source = { greeting: 'Hello', farewell: 'Goodbye', welcome: 'Welcome' }; const output = { greeting: 'Hola', farewell: 'Adiós' // welcome is missing }; const result = compareKeys(source, output); expect(result.isValid).toBe(false); expect(result.missingKeys.size).toBe(1); expect(result.missingKeys.has('welcome')).toBe(true); expect(result.extraKeys.size).toBe(0); }); it('should detect extra keys', () => { const source = { greeting: 'Hello' }; const output = { greeting: 'Hola', unexpected: 'Extra' }; const result = compareKeys(source, output); expect(result.isValid).toBe(true); // Extra keys don't invalidate expect(result.missingKeys.size).toBe(0); expect(result.extraKeys.size).toBe(1); expect(result.extraKeys.has('unexpected')).toBe(true); }); it('should handle nested missing keys', () => { const source = { user: { name: 'Name', email: 'Email', settings: { theme: 'Theme', language: 'Language' } } }; const output = { user: { name: 'Nombre', // email is missing settings: { theme: 'Tema' // language is missing } } }; const result = compareKeys(source, output); expect(result.isValid).toBe(false); expect(result.missingKeys.size).toBe(2); expect(result.missingKeys.has('user.email')).toBe(true); expect(result.missingKeys.has('user.settings.language')).toBe(true); }); it('should ignore metadata keys by default', () => { const source = { greeting: 'Hello' }; const output = { _translator_metadata: { tool: 'translator-ai', timestamp: '2024-01-01' }, greeting: 'Hola' }; const result = compareKeys(source, output); expect(result.isValid).toBe(true); expect(result.missingKeys.size).toBe(0); expect(result.extraKeys.size).toBe(0); // Metadata is ignored }); it('should handle arrays correctly', () => { const source = { items: ['One', 'Two', 'Three'], config: { options: ['A', 'B'] } }; const output = { items: ['Uno', 'Dos'], // Different length is OK config: { options: ['A', 'B', 'C'] // Different length is OK } }; const result = compareKeys(source, output); expect(result.isValid).toBe(true); expect(result.sourceKeys.has('items')).toBe(true); expect(result.sourceKeys.has('config.options')).toBe(true); // Individual array indices are not tracked expect(result.sourceKeys.has('items[0]')).toBe(false); }); it('should handle empty objects', () => { const source = {}; const output = {}; const result = compareKeys(source, output); expect(result.isValid).toBe(true); expect(result.sourceKeys.size).toBe(0); expect(result.outputKeys.size).toBe(0); }); it('should detect when entire nested object is missing', () => { const source = { section1: { item1: 'One', item2: 'Two' }, section2: { item3: 'Three' } }; const output = { section1: { item1: 'Uno', item2: 'Dos' } // section2 is completely missing }; const result = compareKeys(source, output); expect(result.isValid).toBe(false); expect(result.missingKeys.has('section2.item3')).toBe(true); }); }); describe('CLI integration', () => { it('should parse --check-keys flag', () => { const args = ['node', 'index.js', 'input.json', '-l', 'es', '-o', 'output.json', '--check-keys']; const checkKeysIndex = args.indexOf('--check-keys'); expect(checkKeysIndex).toBeGreaterThan(-1); }); it('should work with other flags', () => { const args = ['node', 'index.js', 'input.json', '-l', 'es', '-o', 'output.json', '--check-keys', '--sort-keys']; const checkKeysIndex = args.indexOf('--check-keys'); const sortKeysIndex = args.indexOf('--sort-keys'); expect(checkKeysIndex).toBeGreaterThan(-1); expect(sortKeysIndex).toBeGreaterThan(-1); }); }); });

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/DatanoiseTV/translator-ai'

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