import { isSpecialKey, handleSpecialKey, parseResult, } from 'src/tenant/query-runner/utils/parse-result.util'; describe('isSpecialKey', () => { test('should return true if the key starts with "___"', () => { expect(isSpecialKey('___specialKey')).toBe(true); }); test('should return false if the key does not start with "___"', () => { expect(isSpecialKey('normalKey')).toBe(false); }); }); describe('handleSpecialKey', () => { let result; beforeEach(() => { result = {}; }); test('should correctly process a special key and add it to the result object', () => { handleSpecialKey(result, '___complexField_link', 'value1'); expect(result).toEqual({ complexField: { link: 'value1', }, }); }); test('should add values under the same newKey if called multiple times', () => { handleSpecialKey(result, '___complexField_link', 'value1'); handleSpecialKey(result, '___complexField_text', 'value2'); expect(result).toEqual({ complexField: { link: 'value1', text: 'value2', }, }); }); test('should not create a new field if the special key is not correctly formed', () => { handleSpecialKey(result, '___complexField', 'value1'); expect(result).toEqual({}); }); }); describe('parseResult', () => { test('should recursively parse an object and handle special keys', () => { const obj = { normalField: 'value1', ___specialField_part1: 'value2', nested: { ___specialFieldNested_part2: 'value3', }, }; const expectedResult = { normalField: 'value1', specialField: { part1: 'value2', }, nested: { specialFieldNested: { part2: 'value3', }, }, }; expect(parseResult(obj)).toEqual(expectedResult); }); test('should handle arrays and parse each element', () => { const objArray = [ { ___specialField_part1: 'value1', }, { ___specialField_part2: 'value2', }, ]; const expectedResult = [ { specialField: { part1: 'value1', }, }, { specialField: { part2: 'value2', }, }, ]; expect(parseResult(objArray)).toEqual(expectedResult); }); test('should return the original value if it is not an object or array', () => { expect(parseResult('stringValue')).toBe('stringValue'); expect(parseResult(12345)).toBe(12345); }); });