Skip to main content
Glama
record-utils.record-id-extraction.test.tsβ€’5.94 kB
/** * Tests for record ID extraction from list entries */ import { expect, describe, it } from 'vitest'; import { processListEntries } from '../../src/utils/record-utils.js'; import { AttioListEntry } from '../../src/types/attio.js'; describe('Record ID Extraction Tests', () => { it('should maintain existing record_id if already present', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record_id: 'existing-record-id', }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('existing-record-id'); }); it('should extract record_id from record.id.record_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record: { id: { record_id: 'nested-record-id', }, }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('nested-record-id'); }); it('should extract record_id from parent_record_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, parent_record_id: 'parent-record-id', }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('parent-record-id'); }); it('should extract record_id from values.record_id array', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, values: { record_id: [{ value: 'value-record-id' }], }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('value-record-id'); }); it('should extract record_id from values.record nested object', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, values: { record: { id: { record_id: 'nested-values-record-id', }, }, }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('nested-values-record-id'); }); it('should extract record_id from reference_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, reference_id: 'reference-id', }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('reference-id'); }); it('should extract record_id from object_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, object_id: 'object-id', }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('object-id'); }); it('should extract record_id from record.reference_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record: { reference_id: 'record-reference-id', }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('record-reference-id'); }); it('should extract record_id from record.record_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record: { record_id: 'direct-record-id', }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('direct-record-id'); }); it('should extract record_id from record.uri', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record: { uri: 'attio://companies/uri-record-id', }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('uri-record-id'); }); it('should extract record_id from property ending with _record_id', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, company_record_id: 'company-record-id', }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('company-record-id'); }); it('should leave record_id undefined when no record_id can be found', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, // No record_id information available }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBeUndefined(); }); it('should handle complex nested structures', () => { const entries: AttioListEntry[] = [ { id: { entry_id: 'entry1' }, record: { id: { // No record_id here another_field: 'value', }, // But has URI uri: 'attio://companies/complex-uri-id', }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('complex-uri-id'); }); it('should handle a mix of entry types in the same batch', () => { const entries: AttioListEntry[] = [ // Entry with direct record_id { id: { entry_id: 'entry1' }, record_id: 'direct-id-1', }, // Entry with nested record_id { id: { entry_id: 'entry2' }, record: { id: { record_id: 'nested-id-2', }, }, }, // Entry with parent_record_id { id: { entry_id: 'entry3' }, parent_record_id: 'parent-id-3', }, // Entry with no identifiable record_id { id: { entry_id: 'entry4' }, }, ]; const processed = processListEntries(entries); expect(processed[0].record_id).toBe('direct-id-1'); expect(processed[1].record_id).toBe('nested-id-2'); expect(processed[2].record_id).toBe('parent-id-3'); expect(processed[3].record_id).toBeUndefined(); }); });

Latest Blog Posts

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/kesslerio/attio-mcp-server'

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