import { customKeywordValidators } from './customKeywordValidators'; describe('customKeywordValidators', () => { describe('ui:metadata', () => { it('no ui:metadata is valid', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, {}, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('no quickOption without enum is valid', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { 'ui:metadata': {} }, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('quickOption is valid on enum', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { enum: ['north', 'south'], 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('quickOption is valid for boolean types', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { type: 'boolean', 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('quickOption:false is valid without enum', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { 'ui:metadata': { quickOption: false } }, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('quickOption:false is valid with enum', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { enum: ['north', 'south'], 'ui:metadata': { quickOption: false } }, '#/functions/0/input/properties/users-contact', ); expect(result).toBe(undefined); }); it('quickOption:true is not valid without enum', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact', ); const error = Array.isArray(result) ? result[0] : result; expect(result).not.toEqual(undefined); expect(error).toEqual( expect.objectContaining({ name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', }), ); }); it('quickOption:true is valid with empty enum', () => { // Enums being empty is a separate JSON schema rule / validation issue const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { enum: [], 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact', ); expect(result).toEqual(undefined); }); it.each(['radio', 'dropdown'])('enumWidget:%s is valid with enum', (enumWidget) => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { enum: [], 'ui:metadata': { enumWidget } }, '#/functions/0/input/properties/users-contact', ); expect(result).toEqual(undefined); }); it('enumWidget is invalid without enum', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { 'ui:metadata': { enumWidget: 'radio' } }, '#/functions/0/input/properties/users-contact', ); expect(result).toContainEqual( expect.objectContaining({ name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', }), ); }); it('collapsedByDefault is valid with object property', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { type: 'object', 'ui:metadata': { collapsedByDefault: true } }, '#/functions/0/input/properties/users-contact', ); expect(result).toEqual(undefined); }); it('collapsedByDefault is invalid for non-object properties', () => { const result = customKeywordValidators['ui:metadata']( // eslint-disable-next-line // @ts-ignore - the null properties aren't used in this keyword validation null, null, { type: 'string', 'ui:metadata': { collapsedByDefault: true } }, '#/functions/0/input/properties/users-contact', ); expect(result).toContainEqual( expect.objectContaining({ name: 'uiMetadataError', code: 'uiMetadata-error', type: 'error', }), ); }); }); });