diff --git a/packages/core/content-type-builder/server/utils/attributes.js b/packages/core/content-type-builder/server/utils/attributes.js index 980108bd11..620a537811 100644 --- a/packages/core/content-type-builder/server/utils/attributes.js +++ b/packages/core/content-type-builder/server/utils/attributes.js @@ -70,10 +70,6 @@ const formatAttribute = (key, attribute) => { if (attribute.type === 'customField') { const customField = strapi.container.get('custom-fields').get(attribute.customField); - if (!customField) { - throw new Error(`Could not find Custom Field: ${attribute.customField}`); - } - return { ...attribute, type: customField.type, diff --git a/packages/core/strapi/lib/core/registries/__tests__/custom-fields.test.js b/packages/core/strapi/lib/core/registries/__tests__/custom-fields.test.js index b4330905de..60cab67922 100644 --- a/packages/core/strapi/lib/core/registries/__tests__/custom-fields.test.js +++ b/packages/core/strapi/lib/core/registries/__tests__/custom-fields.test.js @@ -8,99 +8,123 @@ const strapi = { }; describe('Custom fields registry', () => { - it('adds a custom field registered in a plugin', () => { - const mockCF = { - name: 'test', - plugin: 'plugintest', - type: 'text', - }; + describe('add', () => { + it('adds a custom field registered in a plugin', () => { + const mockCF = { + name: 'test', + plugin: 'plugintest', + type: 'text', + }; - const customFields = customFieldsRegistry(strapi); - customFields.add(mockCF); + const customFields = customFieldsRegistry(strapi); + customFields.add(mockCF); - const expected = { - 'plugin::plugintest.test': mockCF, - }; - expect(customFields.getAll()).toEqual(expected); + const expected = { + 'plugin::plugintest.test': mockCF, + }; + expect(customFields.getAll()).toEqual(expected); + }); + + it('adds a custom field not registered in a plugin', () => { + const mockCF = { + name: 'test', + type: 'text', + }; + + const customFields = customFieldsRegistry(strapi); + customFields.add(mockCF); + + const expected = { + 'global::test': mockCF, + }; + expect(customFields.getAll()).toEqual(expected); + }); + + it('requires a name key on the custom field', () => { + const mockCF = { + type: 'test', + }; + + const customFields = customFieldsRegistry(strapi); + + expect(() => customFields.add(mockCF)).toThrowError( + `Custom fields require a 'name' and 'type' key` + ); + }); + + it('requires a type key on the custom field', () => { + const mockCF = { + name: 'test', + }; + + const customFields = customFieldsRegistry(strapi); + + expect(() => customFields.add(mockCF)).toThrowError( + `Custom fields require a 'name' and 'type' key` + ); + }); + + it('validates the name can be used as an object key', () => { + const mockCF = { + name: 'test.boom', + type: 'text', + }; + + const customFields = customFieldsRegistry(strapi); + + expect(() => customFields.add(mockCF)).toThrowError( + `Custom field name: 'test.boom' is not a valid object key` + ); + }); + + it('validates the type is a Strapi type', () => { + const mockCF = { + name: 'test', + type: 'geojson', + }; + + const customFields = customFieldsRegistry(strapi); + + expect(() => customFields.add(mockCF)).toThrowError( + `Custom field type: 'geojson' is not a valid Strapi type` + ); + }); + + it('confirms the custom field does not already exist', () => { + const mockCF = { + name: 'test', + plugin: 'plugintest', + type: 'text', + }; + + const customFields = customFieldsRegistry(strapi); + + customFields.add(mockCF); + expect(() => customFields.add(mockCF)).toThrowError( + `Custom field: 'plugin::plugintest.test' has already been registered` + ); + }); }); + describe('get', () => { + it('gets a registered custom field', () => { + const mockCF = { + name: 'test', + plugin: 'plugintest', + type: 'text', + }; - it('adds a custom field not registered in a plugin', () => { - const mockCF = { - name: 'test', - type: 'text', - }; + const customFields = customFieldsRegistry(strapi); + customFields.add(mockCF); - const customFields = customFieldsRegistry(strapi); - customFields.add(mockCF); + expect(customFields.get('plugin::plugintest.test')).toEqual(mockCF); + }); - const expected = { - 'global::test': mockCF, - }; - expect(customFields.getAll()).toEqual(expected); - }); + it('throws when a custom field is not registered', () => { + const customFields = customFieldsRegistry(strapi); - it('requires a name key on the custom field', () => { - const mockCF = { - type: 'test', - }; - - const customFields = customFieldsRegistry(strapi); - - expect(() => customFields.add(mockCF)).toThrowError( - `Custom fields require a 'name' and 'type' key` - ); - }); - - it('requires a type key on the custom field', () => { - const mockCF = { - name: 'test', - }; - - const customFields = customFieldsRegistry(strapi); - - expect(() => customFields.add(mockCF)).toThrowError( - `Custom fields require a 'name' and 'type' key` - ); - }); - - it('validates the name can be used as an object key', () => { - const mockCF = { - name: 'test.boom', - type: 'text', - }; - - const customFields = customFieldsRegistry(strapi); - - expect(() => customFields.add(mockCF)).toThrowError( - `Custom field name: 'test.boom' is not a valid object key` - ); - }); - - it('validates the type is a Strapi type', () => { - const mockCF = { - name: 'test', - type: 'geojson', - }; - - const customFields = customFieldsRegistry(strapi); - - expect(() => customFields.add(mockCF)).toThrowError( - `Custom field type: 'geojson' is not a valid Strapi type` - ); - }); - - it('confirms the custom field does not already exist', () => { - const mockCF = { - name: 'test', - plugin: 'plugintest', - type: 'text', - }; - - const customFields = customFieldsRegistry(strapi); - - customFields.add(mockCF); - expect(() => customFields.add(mockCF)).toThrowError( - `Custom field: 'plugin::plugintest.test' has already been registered` - ); + expect(() => customFields.get('plugin::plugintest.test')).toThrowError( + `Could not find Custom Field: plugin::plugintest.test` + ); + }); }); }); diff --git a/packages/core/strapi/lib/core/registries/custom-fields.js b/packages/core/strapi/lib/core/registries/custom-fields.js index 2970324556..f254c3f961 100644 --- a/packages/core/strapi/lib/core/registries/custom-fields.js +++ b/packages/core/strapi/lib/core/registries/custom-fields.js @@ -11,7 +11,12 @@ const customFieldsRegistry = strapi => { return customFields; }, get(customField) { - return customFields[customField]; + const registeredCustomField = customFields[customField]; + if (!registeredCustomField) { + throw new Error(`Could not find Custom Field: ${customField}`); + } + + return registeredCustomField; }, add(customField) { const customFieldList = Array.isArray(customField) ? customField : [customField];