Skip to main content
Glama
record-utils.test.tsβ€’4.52 kB
import { describe, it, test, expect } from 'vitest'; import { processListEntries, getRecordNameFromEntry, API_PARAMS, } from '../../src/utils/record-utils'; import { AttioListEntry } from '../../src/types/attio'; describe('record-utils', () => { // Test data for list entries const mockListEntries: AttioListEntry[] = [ // Entry with direct record_id { id: { entry_id: 'entry1' }, list_id: 'list1', record_id: 'record1', created_at: '2025-01-01T00:00:00Z', }, // Entry with nested record ID { id: { entry_id: 'entry2' }, list_id: 'list1', created_at: '2025-01-01T00:00:00Z', record: { id: { record_id: 'record2' }, values: {}, }, }, // Entry with record ID in values { id: { entry_id: 'entry3' }, list_id: 'list1', created_at: '2025-01-01T00:00:00Z', values: { record: { id: { record_id: 'record3' }, values: {}, // Required by AttioRecord }, }, }, // Entry with record ID as other property { id: { entry_id: 'entry4' }, list_id: 'list1', created_at: '2025-01-01T00:00:00Z', company_record_id: 'record4', }, // Entry without record ID { id: { entry_id: 'entry5' }, list_id: 'list1', created_at: '2025-01-01T00:00:00Z', }, ]; describe('processListEntries', () => { it('should process entries and extract record IDs', () => { // Act const processedEntries = processListEntries(mockListEntries); // Assert expect(processedEntries[0].record_id).toBe('record1'); // Unchanged (direct) expect(processedEntries[1].record_id).toBe('record2'); // Extracted from nested record expect(processedEntries[2].record_id).toBe('record3'); // Extracted from values expect(processedEntries[3].record_id).toBe('record4'); // Extracted from company_record_id expect(processedEntries[4].record_id).toBeUndefined(); // Still undefined }); it('should not modify entries when record_id is already defined', () => { // Entry with direct record_id const entry = { id: { entry_id: 'entry1' }, list_id: 'list1', record_id: 'existing-record-id', created_at: '2025-01-01T00:00:00Z', record: { id: { record_id: 'should-not-use-this' }, values: {}, }, }; // Act const result = processListEntries([entry])[0]; // Assert - should keep the existing record_id expect(result.record_id).toBe('existing-record-id'); }); }); describe('getRecordNameFromEntry', () => { it('should extract record name when available', () => { // Entry with record name const entry = { id: { entry_id: 'entry1' }, list_id: 'list1', record_id: 'record1', created_at: '2025-01-01T00:00:00Z', record: { id: { record_id: 'record1' }, values: { name: [{ value: 'Test Company' }], }, }, }; // Act const result = getRecordNameFromEntry(entry); // Assert expect(result.name).toBe('Test Company'); }); it('should return empty string when record data is not available', () => { // Entry without record data const entry = { id: { entry_id: 'entry1' }, list_id: 'list1', record_id: 'record1', created_at: '2025-01-01T00:00:00Z', }; // Act const result = getRecordNameFromEntry(entry); // Assert expect(result.name).toBe(''); }); it('should return empty string when name array is empty', () => { // Entry with empty name array const entry = { id: { entry_id: 'entry1' }, list_id: 'list1', record_id: 'record1', created_at: '2025-01-01T00:00:00Z', record: { id: { record_id: 'record1' }, values: { name: [], }, }, }; // Act const result = getRecordNameFromEntry(entry); // Assert expect(result.name).toBe(''); }); }); describe('API_PARAMS', () => { it('should define the expected API parameters', () => { // Assert expect(API_PARAMS.EXPAND).toBe('expand'); expect(API_PARAMS.RECORD).toBe('record'); expect(API_PARAMS.LIMIT).toBe('limit'); expect(API_PARAMS.OFFSET).toBe('offset'); expect(API_PARAMS.LIST_ID).toBe('list_id'); }); }); });

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