mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 01:47:13 +00:00 
			
		
		
		
	Test custom field exists
This commit is contained in:
		
							parent
							
								
									05c8b0f66e
								
							
						
					
					
						commit
						6456a33bf1
					
				| @ -70,10 +70,6 @@ const formatAttribute = (key, attribute) => { | |||||||
|   if (attribute.type === 'customField') { |   if (attribute.type === 'customField') { | ||||||
|     const customField = strapi.container.get('custom-fields').get(attribute.customField); |     const customField = strapi.container.get('custom-fields').get(attribute.customField); | ||||||
| 
 | 
 | ||||||
|     if (!customField) { |  | ||||||
|       throw new Error(`Could not find Custom Field: ${attribute.customField}`); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return { |     return { | ||||||
|       ...attribute, |       ...attribute, | ||||||
|       type: customField.type, |       type: customField.type, | ||||||
|  | |||||||
| @ -8,99 +8,123 @@ const strapi = { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| describe('Custom fields registry', () => { | describe('Custom fields registry', () => { | ||||||
|   it('adds a custom field registered in a plugin', () => { |   describe('add', () => { | ||||||
|     const mockCF = { |     it('adds a custom field registered in a plugin', () => { | ||||||
|       name: 'test', |       const mockCF = { | ||||||
|       plugin: 'plugintest', |         name: 'test', | ||||||
|       type: 'text', |         plugin: 'plugintest', | ||||||
|     }; |         type: 'text', | ||||||
|  |       }; | ||||||
| 
 | 
 | ||||||
|     const customFields = customFieldsRegistry(strapi); |       const customFields = customFieldsRegistry(strapi); | ||||||
|     customFields.add(mockCF); |       customFields.add(mockCF); | ||||||
| 
 | 
 | ||||||
|     const expected = { |       const expected = { | ||||||
|       'plugin::plugintest.test': mockCF, |         'plugin::plugintest.test': mockCF, | ||||||
|     }; |       }; | ||||||
|     expect(customFields.getAll()).toEqual(expected); |       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 customFields = customFieldsRegistry(strapi); | ||||||
|     const mockCF = { |       customFields.add(mockCF); | ||||||
|       name: 'test', |  | ||||||
|       type: 'text', |  | ||||||
|     }; |  | ||||||
| 
 | 
 | ||||||
|     const customFields = customFieldsRegistry(strapi); |       expect(customFields.get('plugin::plugintest.test')).toEqual(mockCF); | ||||||
|     customFields.add(mockCF); |     }); | ||||||
| 
 | 
 | ||||||
|     const expected = { |     it('throws when a custom field is not registered', () => { | ||||||
|       'global::test': mockCF, |       const customFields = customFieldsRegistry(strapi); | ||||||
|     }; |  | ||||||
|     expect(customFields.getAll()).toEqual(expected); |  | ||||||
|   }); |  | ||||||
| 
 | 
 | ||||||
|   it('requires a name key on the custom field', () => { |       expect(() => customFields.get('plugin::plugintest.test')).toThrowError( | ||||||
|     const mockCF = { |         `Could not find Custom Field: plugin::plugintest.test` | ||||||
|       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` |  | ||||||
|     ); |  | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
| @ -11,7 +11,12 @@ const customFieldsRegistry = strapi => { | |||||||
|       return customFields; |       return customFields; | ||||||
|     }, |     }, | ||||||
|     get(customField) { |     get(customField) { | ||||||
|       return customFields[customField]; |       const registeredCustomField = customFields[customField]; | ||||||
|  |       if (!registeredCustomField) { | ||||||
|  |         throw new Error(`Could not find Custom Field: ${customField}`); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       return registeredCustomField; | ||||||
|     }, |     }, | ||||||
|     add(customField) { |     add(customField) { | ||||||
|       const customFieldList = Array.isArray(customField) ? customField : [customField]; |       const customFieldList = Array.isArray(customField) ? customField : [customField]; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mark Kaylor
						Mark Kaylor