Spaces:
Build error
Build error
twenty / packages /twenty-shared /src /logic-function /__tests__ /build-tool-input-json-schema.test.ts
| import { buildToolInputJsonSchema } from '@/logic-function/build-tool-input-json-schema'; | |
| describe('buildToolInputJsonSchema', () => { | |
| it('should collapse a record-typed object to an id string with a resolved label', () => { | |
| const result = buildToolInputJsonSchema( | |
| { | |
| type: 'object', | |
| objectUniversalIdentifier: 'company-universal-identifier', | |
| }, | |
| (universalIdentifier) => | |
| universalIdentifier === 'company-universal-identifier' | |
| ? 'Company' | |
| : undefined, | |
| ); | |
| expect(result).toEqual({ | |
| type: 'string', | |
| description: 'Id of the Company record', | |
| }); | |
| }); | |
| it('should fall back to a generic label when none resolves', () => { | |
| expect( | |
| buildToolInputJsonSchema({ | |
| type: 'object', | |
| objectUniversalIdentifier: 'company-universal-identifier', | |
| }), | |
| ).toEqual({ | |
| type: 'string', | |
| description: 'Id of the linked record', | |
| }); | |
| }); | |
| it('should collapse arrays of records to arrays of id strings', () => { | |
| const result = buildToolInputJsonSchema( | |
| { | |
| type: 'array', | |
| items: { | |
| type: 'object', | |
| objectUniversalIdentifier: 'person-universal-identifier', | |
| }, | |
| }, | |
| () => 'Person', | |
| ); | |
| expect(result).toEqual({ | |
| type: 'array', | |
| items: { type: 'string', description: 'Id of the Person record' }, | |
| }); | |
| }); | |
| it('should collapse a record type to an id string', () => { | |
| expect( | |
| buildToolInputJsonSchema( | |
| { | |
| type: 'record', | |
| objectUniversalIdentifier: 'company-universal-identifier', | |
| }, | |
| () => 'Company', | |
| ), | |
| ).toEqual({ type: 'string', description: 'Id of the Company record' }); | |
| }); | |
| it('should collapse a records type to an array of id strings', () => { | |
| expect( | |
| buildToolInputJsonSchema( | |
| { | |
| type: 'records', | |
| objectUniversalIdentifier: 'person-universal-identifier', | |
| }, | |
| () => 'Person', | |
| ), | |
| ).toEqual({ | |
| type: 'array', | |
| items: { type: 'string', description: 'Id of the Person record' }, | |
| }); | |
| }); | |
| it('should strip custom keywords recursively while keeping standard ones', () => { | |
| const result = buildToolInputJsonSchema( | |
| { | |
| type: 'object', | |
| label: 'Params', | |
| properties: { | |
| company: { | |
| type: 'object', | |
| objectUniversalIdentifier: 'company-universal-identifier', | |
| description: 'A company', | |
| }, | |
| people: { | |
| type: 'array', | |
| label: 'People', | |
| items: { | |
| type: 'object', | |
| objectUniversalIdentifier: 'person-universal-identifier', | |
| }, | |
| }, | |
| note: { type: 'string', multiline: true }, | |
| kind: { type: 'string', enum: ['a', 'b'] }, | |
| }, | |
| required: ['company'], | |
| }, | |
| () => 'Company', | |
| ); | |
| expect(result).toEqual({ | |
| type: 'object', | |
| properties: { | |
| company: { type: 'string', description: 'Id of the Company record' }, | |
| people: { | |
| type: 'array', | |
| items: { type: 'string', description: 'Id of the Company record' }, | |
| }, | |
| note: { type: 'string' }, | |
| kind: { type: 'string', enum: ['a', 'b'] }, | |
| }, | |
| required: ['company'], | |
| }); | |
| }); | |
| it('should keep boolean additionalProperties and sanitize object ones', () => { | |
| expect( | |
| buildToolInputJsonSchema({ | |
| type: 'object', | |
| additionalProperties: false, | |
| }), | |
| ).toEqual({ type: 'object', additionalProperties: false }); | |
| expect( | |
| buildToolInputJsonSchema({ | |
| type: 'object', | |
| additionalProperties: { type: 'string', multiline: true }, | |
| }), | |
| ).toEqual({ type: 'object', additionalProperties: { type: 'string' } }); | |
| }); | |
| it('should leave non-record nodes untouched aside from custom keywords', () => { | |
| expect( | |
| buildToolInputJsonSchema({ | |
| type: 'object', | |
| properties: { | |
| plainObject: { type: 'object' }, | |
| count: { type: 'number', minimum: 0, maximum: 10 }, | |
| }, | |
| }), | |
| ).toEqual({ | |
| type: 'object', | |
| properties: { | |
| plainObject: { type: 'object' }, | |
| count: { type: 'number', minimum: 0, maximum: 10 }, | |
| }, | |
| }); | |
| }); | |
| }); | |