You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					73 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					73 lines
				
				2.5 KiB
			| 
											3 years ago
										 | import sinon from 'sinon' | ||
|  | 
 | ||
|  | import BaseProperty from '../../../src/backend/adapters/property/base-property' | ||
|  | import BaseResource from '../../../src/backend/adapters/resource/base-resource' | ||
|  | import ResourceDecorator from '../../../src/backend/decorators/resource/resource-decorator' | ||
|  | 
 | ||
|  | /** | ||
|  |  * returns properties with following absolute paths: | ||
|  |  * - normal: number | ||
|  |  * - nested: mixed | ||
|  |  * - nested.normal: string | ||
|  |  * - nested.nested: mixed | ||
|  |  * - nested.nested.normalInner: string | ||
|  |  * - arrayed: string (array) | ||
|  |  * - arrayedMixed: mixed (array) | ||
|  |  * - arrayedMixed.arrayParam: string | ||
|  |  * | ||
|  |  * @private | ||
|  |  */ | ||
|  | const buildProperties = (): Array<BaseProperty> => { | ||
|  |   const normalProperty = new BaseProperty({ path: 'normal', type: 'number' }) as any | ||
|  |   const nestedProperty = new BaseProperty({ path: 'nested', type: 'mixed' }) as any | ||
|  |   const nested2Property = new BaseProperty({ path: 'nested', type: 'mixed' }) as any | ||
|  |   const arrayProperty = new BaseProperty({ path: 'arrayed', type: 'string' }) as any | ||
|  |   const arrayMixedProperty = new BaseProperty({ path: 'arrayedMixed', type: 'mixed' }) as any | ||
|  |   arrayProperty.isArray = (): boolean => true | ||
|  |   arrayMixedProperty.isArray = (): boolean => true | ||
|  | 
 | ||
|  |   nestedProperty.subProperties = (): Array<BaseProperty> => [ | ||
|  |     new BaseProperty({ path: 'normal', type: 'string' }), | ||
|  |     nested2Property, | ||
|  |   ] | ||
|  |   nested2Property.subProperties = (): Array<BaseProperty> => [ | ||
|  |     new BaseProperty({ path: 'normalInner', type: 'string' }), | ||
|  |   ] | ||
|  |   arrayMixedProperty.subProperties = (): Array<BaseProperty> => [ | ||
|  |     new BaseProperty({ path: 'arrayParam', type: 'string' }), | ||
|  |   ] | ||
|  | 
 | ||
|  |   return [normalProperty, nestedProperty, arrayProperty, arrayMixedProperty] | ||
|  | } | ||
|  | 
 | ||
|  | export const expectedResult = { | ||
|  |   id: 'someID', | ||
|  |   properties: buildProperties(), | ||
|  |   resourceName: 'resourceName', | ||
|  |   databaseName: 'databaseName', | ||
|  |   databaseType: 'mongodb', | ||
|  |   parent: { | ||
|  |     name: 'databaseName', | ||
|  |     icon: 'icon-mongodb', | ||
|  |   }, | ||
|  | } | ||
|  | 
 | ||
|  | export default (): BaseResource => ({ | ||
|  |   _decorated: {} as ResourceDecorator, | ||
|  |   id: sinon.stub().returns(expectedResult.id), | ||
|  |   properties: sinon.stub().returns(expectedResult.properties), | ||
|  |   property: sinon.stub().returns(new BaseProperty({ path: 'prop', type: 'string' })), | ||
|  |   databaseName: sinon.stub().returns(expectedResult.databaseName), | ||
|  |   databaseType: sinon.stub().returns(expectedResult.databaseType), | ||
|  |   count: sinon.stub(), | ||
|  |   find: sinon.stub(), | ||
|  |   findOne: sinon.stub(), | ||
|  |   findMany: sinon.stub(), | ||
|  |   build: sinon.stub(), | ||
|  |   create: sinon.stub(), | ||
|  |   update: sinon.stub(), | ||
|  |   delete: sinon.stub(), | ||
|  |   assignDecorator: sinon.stub(), | ||
|  |   decorate: sinon.stub(), | ||
|  | }) |