Test custom field exists

This commit is contained in:
Mark Kaylor 2022-07-18 10:55:16 +02:00 committed by Rémi de Juvigny
parent 05c8b0f66e
commit 6456a33bf1
3 changed files with 117 additions and 92 deletions

View File

@ -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,

View File

@ -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`
);
});
});
});

View File

@ -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];