mirror of
https://github.com/usebruno/bruno.git
synced 2024-11-25 01:14:23 +01:00
chore(#197): ran prettier on packages/bruno-schema
This commit is contained in:
parent
f68eacfe0d
commit
88c16fa388
@ -1,5 +1,5 @@
|
|||||||
const Yup = require('yup');
|
const Yup = require('yup');
|
||||||
const { uidSchema } = require("../common");
|
const { uidSchema } = require('../common');
|
||||||
|
|
||||||
const environmentVariablesSchema = Yup.object({
|
const environmentVariablesSchema = Yup.object({
|
||||||
uid: uidSchema,
|
uid: uidSchema,
|
||||||
@ -7,14 +7,17 @@ const environmentVariablesSchema = Yup.object({
|
|||||||
value: Yup.string().nullable(),
|
value: Yup.string().nullable(),
|
||||||
type: Yup.string().oneOf(['text']).required('type is required'),
|
type: Yup.string().oneOf(['text']).required('type is required'),
|
||||||
enabled: Yup.boolean().defined()
|
enabled: Yup.boolean().defined()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const environmentSchema = Yup.object({
|
const environmentSchema = Yup.object({
|
||||||
uid: uidSchema,
|
uid: uidSchema,
|
||||||
name: Yup.string().min(1).required('name is required'),
|
name: Yup.string().min(1).required('name is required'),
|
||||||
variables: Yup.array().of(environmentVariablesSchema).required('variables are required')
|
variables: Yup.array().of(environmentVariablesSchema).required('variables are required')
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const environmentsSchema = Yup.array().of(environmentSchema);
|
const environmentsSchema = Yup.array().of(environmentSchema);
|
||||||
|
|
||||||
@ -24,7 +27,9 @@ const keyValueSchema = Yup.object({
|
|||||||
value: Yup.string().nullable(),
|
value: Yup.string().nullable(),
|
||||||
description: Yup.string().nullable(),
|
description: Yup.string().nullable(),
|
||||||
enabled: Yup.boolean()
|
enabled: Yup.boolean()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const varsSchema = Yup.object({
|
const varsSchema = Yup.object({
|
||||||
uid: uidSchema,
|
uid: uidSchema,
|
||||||
@ -33,25 +38,35 @@ const varsSchema = Yup.object({
|
|||||||
description: Yup.string().nullable(),
|
description: Yup.string().nullable(),
|
||||||
local: Yup.boolean(),
|
local: Yup.boolean(),
|
||||||
enabled: Yup.boolean()
|
enabled: Yup.boolean()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const requestUrlSchema = Yup.string().min(0).defined();
|
const requestUrlSchema = Yup.string().min(0).defined();
|
||||||
const requestMethodSchema = Yup.string().oneOf(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']).required('method is required');
|
const requestMethodSchema = Yup.string()
|
||||||
|
.oneOf(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'])
|
||||||
|
.required('method is required');
|
||||||
|
|
||||||
const graphqlBodySchema = Yup.object({
|
const graphqlBodySchema = Yup.object({
|
||||||
query: Yup.string().nullable(),
|
query: Yup.string().nullable(),
|
||||||
variables: Yup.string().nullable(),
|
variables: Yup.string().nullable()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const requestBodySchema = Yup.object({
|
const requestBodySchema = Yup.object({
|
||||||
mode: Yup.string().oneOf(['none', 'json', 'text', 'xml', 'formUrlEncoded', 'multipartForm', 'graphql']).required('mode is required'),
|
mode: Yup.string()
|
||||||
json: Yup.string().nullable(),
|
.oneOf(['none', 'json', 'text', 'xml', 'formUrlEncoded', 'multipartForm', 'graphql'])
|
||||||
text: Yup.string().nullable(),
|
.required('mode is required'),
|
||||||
xml: Yup.string().nullable(),
|
json: Yup.string().nullable(),
|
||||||
formUrlEncoded: Yup.array().of(keyValueSchema).nullable(),
|
text: Yup.string().nullable(),
|
||||||
multipartForm: Yup.array().of(keyValueSchema).nullable(),
|
xml: Yup.string().nullable(),
|
||||||
|
formUrlEncoded: Yup.array().of(keyValueSchema).nullable(),
|
||||||
|
multipartForm: Yup.array().of(keyValueSchema).nullable(),
|
||||||
graphql: graphqlBodySchema.nullable()
|
graphql: graphqlBodySchema.nullable()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
// Right now, the request schema is very tightly coupled with http request
|
// Right now, the request schema is very tightly coupled with http request
|
||||||
// As we introduce more request types in the future, we will improve the definition to support
|
// As we introduce more request types in the future, we will improve the definition to support
|
||||||
@ -65,38 +80,43 @@ const requestSchema = Yup.object({
|
|||||||
script: Yup.object({
|
script: Yup.object({
|
||||||
req: Yup.string().nullable(),
|
req: Yup.string().nullable(),
|
||||||
res: Yup.string().nullable()
|
res: Yup.string().nullable()
|
||||||
}).noUnknown(true).strict(),
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict(),
|
||||||
vars: Yup.object({
|
vars: Yup.object({
|
||||||
req: Yup.array().of(varsSchema).nullable(),
|
req: Yup.array().of(varsSchema).nullable(),
|
||||||
res: Yup.array().of(varsSchema).nullable()
|
res: Yup.array().of(varsSchema).nullable()
|
||||||
}).noUnknown(true).strict().nullable(),
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict()
|
||||||
|
.nullable(),
|
||||||
assertions: Yup.array().of(keyValueSchema).nullable(),
|
assertions: Yup.array().of(keyValueSchema).nullable(),
|
||||||
tests: Yup.string().nullable()
|
tests: Yup.string().nullable()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const itemSchema = Yup.object({
|
const itemSchema = Yup.object({
|
||||||
uid: uidSchema,
|
uid: uidSchema,
|
||||||
type: Yup.string().oneOf(['http-request', 'graphql-request', 'folder']).required('type is required'),
|
type: Yup.string().oneOf(['http-request', 'graphql-request', 'folder']).required('type is required'),
|
||||||
seq: Yup.number().min(1),
|
seq: Yup.number().min(1),
|
||||||
name: Yup.string()
|
name: Yup.string().min(1, 'name must be atleast 1 characters').required('name is required'),
|
||||||
.min(1, 'name must be atleast 1 characters')
|
|
||||||
.required('name is required'),
|
|
||||||
request: requestSchema.when('type', {
|
request: requestSchema.when('type', {
|
||||||
is: (type) => ['http-request', 'graphql-request'].includes(type),
|
is: (type) => ['http-request', 'graphql-request'].includes(type),
|
||||||
then: (schema) => schema.required('request is required when item-type is request')
|
then: (schema) => schema.required('request is required when item-type is request')
|
||||||
}),
|
}),
|
||||||
items: Yup.lazy(() => Yup.array().of(itemSchema)),
|
items: Yup.lazy(() => Yup.array().of(itemSchema)),
|
||||||
filename: Yup.string().nullable(),
|
filename: Yup.string().nullable(),
|
||||||
pathname: Yup.string().nullable()
|
pathname: Yup.string().nullable()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
const collectionSchema = Yup.object({
|
const collectionSchema = Yup.object({
|
||||||
version: Yup.string().oneOf(['1']).required('version is required'),
|
version: Yup.string().oneOf(['1']).required('version is required'),
|
||||||
uid: uidSchema,
|
uid: uidSchema,
|
||||||
name: Yup.string()
|
name: Yup.string().min(1, 'name must be atleast 1 characters').required('name is required'),
|
||||||
.min(1, 'name must be atleast 1 characters')
|
items: Yup.array().of(itemSchema),
|
||||||
.required('name is required'),
|
|
||||||
items: Yup.array().of(itemSchema),
|
|
||||||
activeEnvironmentUid: Yup.string()
|
activeEnvironmentUid: Yup.string()
|
||||||
.length(21, 'activeEnvironmentUid must be 21 characters in length')
|
.length(21, 'activeEnvironmentUid must be 21 characters in length')
|
||||||
.matches(/^[a-zA-Z0-9]*$/, 'uid must be alphanumeric')
|
.matches(/^[a-zA-Z0-9]*$/, 'uid must be alphanumeric')
|
||||||
@ -108,8 +128,9 @@ const collectionSchema = Yup.object({
|
|||||||
items: Yup.array()
|
items: Yup.array()
|
||||||
}),
|
}),
|
||||||
collectionVariables: Yup.object()
|
collectionVariables: Yup.object()
|
||||||
}).noUnknown(true).strict();
|
})
|
||||||
|
.noUnknown(true)
|
||||||
|
.strict();
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
requestSchema,
|
requestSchema,
|
||||||
@ -117,4 +138,4 @@ module.exports = {
|
|||||||
environmentSchema,
|
environmentSchema,
|
||||||
environmentsSchema,
|
environmentsSchema,
|
||||||
collectionSchema
|
collectionSchema
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
const { expect } = require('@jest/globals');
|
const { expect } = require('@jest/globals');
|
||||||
const { uuid } = require("../utils/testUtils");
|
const { uuid } = require('../utils/testUtils');
|
||||||
const { collectionSchema } = require("./index");
|
const { collectionSchema } = require('./index');
|
||||||
|
|
||||||
describe('Collection Schema Validation', () => {
|
describe('Collection Schema Validation', () => {
|
||||||
it('collection schema must validate successfully - simple collection, no items', async () => {
|
it('collection schema must validate successfully - simple collection, no items', async () => {
|
||||||
@ -31,11 +31,13 @@ describe('Collection Schema Validation', () => {
|
|||||||
version: '1',
|
version: '1',
|
||||||
uid: uuid(),
|
uid: uuid(),
|
||||||
name: 'My Collection',
|
name: 'My Collection',
|
||||||
items: [{
|
items: [
|
||||||
uid: uuid(),
|
{
|
||||||
name: 'A Folder',
|
uid: uuid(),
|
||||||
type: 'folder'
|
name: 'A Folder',
|
||||||
}]
|
type: 'folder'
|
||||||
|
}
|
||||||
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
const isValid = await collectionSchema.validate(collection);
|
const isValid = await collectionSchema.validate(collection);
|
||||||
@ -47,57 +49,8 @@ describe('Collection Schema Validation', () => {
|
|||||||
version: '1',
|
version: '1',
|
||||||
uid: uuid(),
|
uid: uuid(),
|
||||||
name: 'My Collection',
|
name: 'My Collection',
|
||||||
items: [{
|
items: [
|
||||||
uid: uuid(),
|
{
|
||||||
name: 'Get Countries',
|
|
||||||
type: 'http-request',
|
|
||||||
request: {
|
|
||||||
url: 'https://restcountries.com/v2/alpha/in',
|
|
||||||
method: 'GET',
|
|
||||||
headers: [],
|
|
||||||
params: [],
|
|
||||||
body: {
|
|
||||||
mode: 'none'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
|
|
||||||
const isValid = await collectionSchema.validate(collection);
|
|
||||||
expect(isValid).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('collection schema must validate successfully - simple collection, folder inside folder', async () => {
|
|
||||||
const collection = {
|
|
||||||
version: '1',
|
|
||||||
uid: uuid(),
|
|
||||||
name: 'My Collection',
|
|
||||||
items: [{
|
|
||||||
uid: uuid(),
|
|
||||||
name: 'First Level Folder',
|
|
||||||
type: 'folder',
|
|
||||||
items: [{
|
|
||||||
uid: uuid(),
|
|
||||||
name: 'Second Level Folder',
|
|
||||||
type: 'folder'
|
|
||||||
}]
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
|
|
||||||
const isValid = await collectionSchema.validate(collection);
|
|
||||||
expect(isValid).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('collection schema must validate successfully - simple collection, [folder] [request + folder]', async () => {
|
|
||||||
const collection = {
|
|
||||||
version: '1',
|
|
||||||
uid: uuid(),
|
|
||||||
name: 'My Collection',
|
|
||||||
items: [{
|
|
||||||
uid: uuid(),
|
|
||||||
name: 'First Level Folder',
|
|
||||||
type: 'folder',
|
|
||||||
items: [{
|
|
||||||
uid: uuid(),
|
uid: uuid(),
|
||||||
name: 'Get Countries',
|
name: 'Get Countries',
|
||||||
type: 'http-request',
|
type: 'http-request',
|
||||||
@ -110,12 +63,72 @@ describe('Collection Schema Validation', () => {
|
|||||||
mode: 'none'
|
mode: 'none'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const isValid = await collectionSchema.validate(collection);
|
||||||
|
expect(isValid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('collection schema must validate successfully - simple collection, folder inside folder', async () => {
|
||||||
|
const collection = {
|
||||||
|
version: '1',
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'My Collection',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
uid: uuid(),
|
uid: uuid(),
|
||||||
name: 'Second Level Folder',
|
name: 'First Level Folder',
|
||||||
type: 'folder'
|
type: 'folder',
|
||||||
}]
|
items: [
|
||||||
}]
|
{
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'Second Level Folder',
|
||||||
|
type: 'folder'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const isValid = await collectionSchema.validate(collection);
|
||||||
|
expect(isValid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('collection schema must validate successfully - simple collection, [folder] [request + folder]', async () => {
|
||||||
|
const collection = {
|
||||||
|
version: '1',
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'My Collection',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'First Level Folder',
|
||||||
|
type: 'folder',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'Get Countries',
|
||||||
|
type: 'http-request',
|
||||||
|
request: {
|
||||||
|
url: 'https://restcountries.com/v2/alpha/in',
|
||||||
|
method: 'GET',
|
||||||
|
headers: [],
|
||||||
|
params: [],
|
||||||
|
body: {
|
||||||
|
mode: 'none'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
uid: uuid(),
|
||||||
|
name: 'Second Level Folder',
|
||||||
|
type: 'folder'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
const isValid = await collectionSchema.validate(collection);
|
const isValid = await collectionSchema.validate(collection);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
const { expect } = require('@jest/globals');
|
const { expect } = require('@jest/globals');
|
||||||
const { uuid, validationErrorWithMessages } = require("../utils/testUtils");
|
const { uuid, validationErrorWithMessages } = require('../utils/testUtils');
|
||||||
const { itemSchema } = require("./index");
|
const { itemSchema } = require('./index');
|
||||||
|
|
||||||
describe('Item Schema Validation', () => {
|
describe('Item Schema Validation', () => {
|
||||||
it('item schema must validate successfully - simple items', async () => {
|
it('item schema must validate successfully - simple items', async () => {
|
||||||
@ -21,9 +21,7 @@ describe('Item Schema Validation', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
expect(itemSchema.validate(item)).rejects.toEqual(
|
expect(itemSchema.validate(item)).rejects.toEqual(validationErrorWithMessages('name is required'))
|
||||||
validationErrorWithMessages('name is required')
|
|
||||||
)
|
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -68,4 +66,4 @@ describe('Item Schema Validation', () => {
|
|||||||
)
|
)
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
const { expect } = require('@jest/globals');
|
const { expect } = require('@jest/globals');
|
||||||
const { uuid, validationErrorWithMessages } = require("../utils/testUtils");
|
const { uuid, validationErrorWithMessages } = require('../utils/testUtils');
|
||||||
const { requestSchema } = require("./index");
|
const { requestSchema } = require('./index');
|
||||||
|
|
||||||
describe('Request Schema Validation', () => {
|
describe('Request Schema Validation', () => {
|
||||||
it('request schema must validate successfully - simple request', async () => {
|
it('request schema must validate successfully - simple request', async () => {
|
||||||
@ -31,8 +31,10 @@ describe('Request Schema Validation', () => {
|
|||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
expect(requestSchema.validate(request)).rejects.toEqual(
|
expect(requestSchema.validate(request)).rejects.toEqual(
|
||||||
validationErrorWithMessages('method must be one of the following values: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS')
|
validationErrorWithMessages(
|
||||||
|
'method must be one of the following values: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -8,4 +8,4 @@ const uidSchema = Yup.string()
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
uidSchema
|
uidSchema
|
||||||
};
|
};
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
const { collectionSchema, itemSchema, environmentSchema, environmentsSchema } = require("./collections");
|
const { collectionSchema, itemSchema, environmentSchema, environmentsSchema } = require('./collections');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
itemSchema,
|
itemSchema,
|
||||||
environmentSchema,
|
environmentSchema,
|
||||||
environmentsSchema,
|
environmentsSchema,
|
||||||
collectionSchema,
|
collectionSchema
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,7 @@ const { expect } = require('@jest/globals');
|
|||||||
const uuid = () => {
|
const uuid = () => {
|
||||||
// https://github.com/ai/nanoid/blob/main/url-alphabet/index.js
|
// https://github.com/ai/nanoid/blob/main/url-alphabet/index.js
|
||||||
const urlAlphabet = 'useandom26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict';
|
const urlAlphabet = 'useandom26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict';
|
||||||
const customNanoId = customAlphabet (urlAlphabet, 21);
|
const customNanoId = customAlphabet(urlAlphabet, 21);
|
||||||
|
|
||||||
return customNanoId();
|
return customNanoId();
|
||||||
};
|
};
|
||||||
@ -14,7 +14,7 @@ const validationErrorWithMessages = (...errors) => {
|
|||||||
return expect.objectContaining({
|
return expect.objectContaining({
|
||||||
errors
|
errors
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
uuid,
|
uuid,
|
||||||
|
Loading…
Reference in New Issue
Block a user