mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	refactor: add tests for the schemas list (#1705)
* refactor: move schemas list to the top * refactor: add tests for the schemas list
This commit is contained in:
		
							parent
							
								
									2c5f70d420
								
							
						
					
					
						commit
						0a53d67859
					
				| @ -3,7 +3,34 @@ import { | ||||
|     createRequestSchema, | ||||
|     createResponseSchema, | ||||
|     removeJsonSchemaProps, | ||||
|     schemas, | ||||
| } from './index'; | ||||
| import fs from 'fs'; | ||||
| import path from 'path'; | ||||
| 
 | ||||
| test('all schema files should be added to the schemas object', () => { | ||||
|     const schemaFileNames = fs | ||||
|         .readdirSync(path.join(__dirname, 'spec')) | ||||
|         .filter((fileName) => fileName.endsWith('-schema.ts')); | ||||
| 
 | ||||
|     const expectedSchemaNames = schemaFileNames.map((fileName) => { | ||||
|         return fileName | ||||
|             .replace(/\.ts$/, '') | ||||
|             .replace(/-./g, (x) => x[1].toUpperCase()); | ||||
|     }); | ||||
| 
 | ||||
|     const addedSchemaNames = Object.keys(schemas); | ||||
|     expect(expectedSchemaNames.sort()).toEqual(addedSchemaNames.sort()); | ||||
| }); | ||||
| 
 | ||||
| test('all schema $id attributes should have the expected format', () => { | ||||
|     const schemaIds = Object.values(schemas).map((schema) => schema.$id); | ||||
|     const schemaIdRegExp = new RegExp(`^#/components/schemas/[a-z][a-zA-Z]+$`); | ||||
| 
 | ||||
|     schemaIds.forEach((schemaId) => { | ||||
|         expect(schemaId).toMatch(schemaIdRegExp); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| test('createRequestSchema', () => { | ||||
|     expect(createRequestSchema('schemaName')).toMatchInlineSnapshot(` | ||||
|  | ||||
| @ -4,6 +4,7 @@ import { constraintSchema } from './spec/constraint-schema'; | ||||
| import { createFeatureSchema } from './spec/create-feature-schema'; | ||||
| import { createStrategySchema } from './spec/create-strategy-schema'; | ||||
| import { environmentSchema } from './spec/environment-schema'; | ||||
| import { environmentsSchema } from './spec/environments-schema'; | ||||
| import { featureEnvironmentSchema } from './spec/feature-environment-schema'; | ||||
| import { featureSchema } from './spec/feature-schema'; | ||||
| import { featureStrategySchema } from './spec/feature-strategy-schema'; | ||||
| @ -22,6 +23,8 @@ import { patchesSchema } from './spec/patches-schema'; | ||||
| import { projectEnvironmentSchema } from './spec/project-environment-schema'; | ||||
| import { projectSchema } from './spec/project-schema'; | ||||
| import { projectsSchema } from './spec/projects-schema'; | ||||
| import { sortOrderSchema } from './spec/sort-order-schema'; | ||||
| import { splashSchema } from './spec/splash-schema'; | ||||
| import { strategySchema } from './spec/strategy-schema'; | ||||
| import { tagSchema } from './spec/tag-schema'; | ||||
| import { tagsSchema } from './spec/tags-schema'; | ||||
| @ -31,34 +34,8 @@ import { updateStrategySchema } from './spec/update-strategy-schema'; | ||||
| import { variantSchema } from './spec/variant-schema'; | ||||
| import { variantsSchema } from './spec/variants-schema'; | ||||
| import { versionSchema } from './spec/version-schema'; | ||||
| import { environmentsSchema } from './spec/environments-schema'; | ||||
| import { sortOrderSchema } from './spec/sort-order-schema'; | ||||
| import { splashSchema } from './spec/splash-schema'; | ||||
| 
 | ||||
| // Schemas must have $id property on the form "#/components/schemas/mySchema".
 | ||||
| export type SchemaId = typeof schemas[keyof typeof schemas]['$id']; | ||||
| 
 | ||||
| // Schemas must list all $ref schemas in "components", including nested schemas.
 | ||||
| export type SchemaRef = typeof schemas[keyof typeof schemas]['components']; | ||||
| 
 | ||||
| // JSON schema properties that should not be included in the OpenAPI spec.
 | ||||
| export interface JsonSchemaProps { | ||||
|     $id: string; | ||||
|     components: object; | ||||
| } | ||||
| 
 | ||||
| export interface AdminApiOperation | ||||
|     extends Omit<OpenAPIV3.OperationObject, 'tags'> { | ||||
|     operationId: string; | ||||
|     tags: ['admin']; | ||||
| } | ||||
| 
 | ||||
| export interface ClientApiOperation | ||||
|     extends Omit<OpenAPIV3.OperationObject, 'tags'> { | ||||
|     operationId: string; | ||||
|     tags: ['client']; | ||||
| } | ||||
| 
 | ||||
| // All schemas in `openapi/spec` should be listed here.
 | ||||
| export const schemas = { | ||||
|     cloneFeatureSchema, | ||||
|     constraintSchema, | ||||
| @ -95,6 +72,30 @@ export const schemas = { | ||||
|     versionSchema, | ||||
| }; | ||||
| 
 | ||||
| // Schemas must have an $id property on the form "#/components/schemas/mySchema".
 | ||||
| export type SchemaId = typeof schemas[keyof typeof schemas]['$id']; | ||||
| 
 | ||||
| // Schemas must list all their $refs in `components`, including nested schemas.
 | ||||
| export type SchemaRef = typeof schemas[keyof typeof schemas]['components']; | ||||
| 
 | ||||
| // JSON schema properties that should not be included in the OpenAPI spec.
 | ||||
| export interface JsonSchemaProps { | ||||
|     $id: string; | ||||
|     components: object; | ||||
| } | ||||
| 
 | ||||
| export interface AdminApiOperation | ||||
|     extends Omit<OpenAPIV3.OperationObject, 'tags'> { | ||||
|     operationId: string; | ||||
|     tags: ['admin']; | ||||
| } | ||||
| 
 | ||||
| export interface ClientApiOperation | ||||
|     extends Omit<OpenAPIV3.OperationObject, 'tags'> { | ||||
|     operationId: string; | ||||
|     tags: ['client']; | ||||
| } | ||||
| 
 | ||||
| export const createRequestSchema = ( | ||||
|     schemaName: string, | ||||
| ): OpenAPIV3.RequestBodyObject => { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user