mirror of
https://github.com/usebruno/bruno.git
synced 2024-11-25 09:23:17 +01:00
Merge pull request #1618 from trusta/feat/set-up-ajv-formats-in-scripts
feat(#947): set up ajv-formats in script and test runtimes
This commit is contained in:
commit
09c496e516
1
package-lock.json
generated
1
package-lock.json
generated
@ -20986,6 +20986,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@usebruno/query": "0.1.0",
|
"@usebruno/query": "0.1.0",
|
||||||
"ajv": "^8.12.0",
|
"ajv": "^8.12.0",
|
||||||
|
"ajv-formats": "^2.1.1",
|
||||||
"atob": "^2.1.2",
|
"atob": "^2.1.2",
|
||||||
"axios": "^1.5.1",
|
"axios": "^1.5.1",
|
||||||
"btoa": "^1.2.1",
|
"btoa": "^1.2.1",
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@usebruno/query": "0.1.0",
|
"@usebruno/query": "0.1.0",
|
||||||
"ajv": "^8.12.0",
|
"ajv": "^8.12.0",
|
||||||
|
"ajv-formats": "^2.1.1",
|
||||||
"atob": "^2.1.2",
|
"atob": "^2.1.2",
|
||||||
"axios": "^1.5.1",
|
"axios": "^1.5.1",
|
||||||
"btoa": "^1.2.1",
|
"btoa": "^1.2.1",
|
||||||
@ -28,7 +29,7 @@
|
|||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"nanoid": "3.3.4",
|
"nanoid": "3.3.4",
|
||||||
"node-fetch": "2.*",
|
"node-fetch": "2.*",
|
||||||
"uuid": "^9.0.0",
|
"node-vault": "^0.10.2",
|
||||||
"node-vault": "^0.10.2"
|
"uuid": "^9.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ const { cleanJson } = require('../utils');
|
|||||||
|
|
||||||
// Inbuilt Library Support
|
// Inbuilt Library Support
|
||||||
const ajv = require('ajv');
|
const ajv = require('ajv');
|
||||||
|
const addFormats = require('ajv-formats');
|
||||||
const atob = require('atob');
|
const atob = require('atob');
|
||||||
const btoa = require('btoa');
|
const btoa = require('btoa');
|
||||||
const lodash = require('lodash');
|
const lodash = require('lodash');
|
||||||
@ -102,6 +103,7 @@ class ScriptRuntime {
|
|||||||
zlib,
|
zlib,
|
||||||
// 3rd party libs
|
// 3rd party libs
|
||||||
ajv,
|
ajv,
|
||||||
|
'ajv-formats': addFormats,
|
||||||
atob,
|
atob,
|
||||||
btoa,
|
btoa,
|
||||||
lodash,
|
lodash,
|
||||||
@ -194,6 +196,7 @@ class ScriptRuntime {
|
|||||||
zlib,
|
zlib,
|
||||||
// 3rd party libs
|
// 3rd party libs
|
||||||
ajv,
|
ajv,
|
||||||
|
'ajv-formats': addFormats,
|
||||||
atob,
|
atob,
|
||||||
btoa,
|
btoa,
|
||||||
lodash,
|
lodash,
|
||||||
|
@ -19,6 +19,7 @@ const { cleanJson } = require('../utils');
|
|||||||
|
|
||||||
// Inbuilt Library Support
|
// Inbuilt Library Support
|
||||||
const ajv = require('ajv');
|
const ajv = require('ajv');
|
||||||
|
const addFormats = require('ajv-formats');
|
||||||
const atob = require('atob');
|
const atob = require('atob');
|
||||||
const btoa = require('btoa');
|
const btoa = require('btoa');
|
||||||
const lodash = require('lodash');
|
const lodash = require('lodash');
|
||||||
@ -120,6 +121,7 @@ class TestRuntime {
|
|||||||
zlib,
|
zlib,
|
||||||
// 3rd party libs
|
// 3rd party libs
|
||||||
ajv,
|
ajv,
|
||||||
|
'ajv-formats': addFormats,
|
||||||
btoa,
|
btoa,
|
||||||
atob,
|
atob,
|
||||||
lodash,
|
lodash,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const { describe, it, expect } = require('@jest/globals');
|
const { describe, it, expect } = require('@jest/globals');
|
||||||
const TestRuntime = require('../src/runtime/test-runtime');
|
const TestRuntime = require('../src/runtime/test-runtime');
|
||||||
|
const ScriptRuntime = require('../src/runtime/script-runtime');
|
||||||
|
|
||||||
describe('runtime', () => {
|
describe('runtime', () => {
|
||||||
describe('test-runtime', () => {
|
describe('test-runtime', () => {
|
||||||
@ -49,5 +50,129 @@ describe('runtime', () => {
|
|||||||
{ description: 'async test', status: 'pass' }
|
{ description: 'async test', status: 'pass' }
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should have ajv and ajv-formats dependencies available', async () => {
|
||||||
|
const testFile = `
|
||||||
|
const Ajv = require('ajv');
|
||||||
|
const addFormats = require("ajv-formats");
|
||||||
|
const ajv = new Ajv();
|
||||||
|
addFormats(ajv);
|
||||||
|
|
||||||
|
const schema = {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time'
|
||||||
|
};
|
||||||
|
|
||||||
|
const validate = ajv.compile(schema)
|
||||||
|
|
||||||
|
test('format valid', () => {
|
||||||
|
const valid = validate(new Date().toISOString())
|
||||||
|
expect(valid).to.be.true;
|
||||||
|
})
|
||||||
|
`;
|
||||||
|
|
||||||
|
const runtime = new TestRuntime();
|
||||||
|
const result = await runtime.runTests(
|
||||||
|
testFile,
|
||||||
|
{ ...baseRequest },
|
||||||
|
{ ...baseResponse },
|
||||||
|
{},
|
||||||
|
{},
|
||||||
|
'.',
|
||||||
|
null,
|
||||||
|
process.env
|
||||||
|
);
|
||||||
|
expect(result.results.map((el) => ({ description: el.description, status: el.status }))).toEqual([
|
||||||
|
{ description: 'format valid', status: 'pass' }
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('script-runtime', () => {
|
||||||
|
describe('run-request-script', () => {
|
||||||
|
const baseRequest = {
|
||||||
|
method: 'GET',
|
||||||
|
url: 'http://localhost:3000/',
|
||||||
|
headers: {},
|
||||||
|
data: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
it('should have ajv and ajv-formats dependencies available', async () => {
|
||||||
|
const script = `
|
||||||
|
const Ajv = require('ajv');
|
||||||
|
const addFormats = require("ajv-formats");
|
||||||
|
const ajv = new Ajv();
|
||||||
|
addFormats(ajv);
|
||||||
|
|
||||||
|
const schema = {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time'
|
||||||
|
};
|
||||||
|
|
||||||
|
const validate = ajv.compile(schema)
|
||||||
|
|
||||||
|
bru.setVar('validation', validate(new Date().toISOString()))
|
||||||
|
`;
|
||||||
|
|
||||||
|
const runtime = new ScriptRuntime();
|
||||||
|
const result = await runtime.runRequestScript(script, { ...baseRequest }, {}, {}, '.', null, process.env);
|
||||||
|
expect(result.collectionVariables.validation).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('run-response-script', () => {
|
||||||
|
const baseRequest = {
|
||||||
|
method: 'GET',
|
||||||
|
url: 'http://localhost:3000/',
|
||||||
|
headers: {},
|
||||||
|
data: undefined
|
||||||
|
};
|
||||||
|
const baseResponse = {
|
||||||
|
status: 200,
|
||||||
|
statusText: 'OK',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
id: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
it('should have ajv and ajv-formats dependencies available', async () => {
|
||||||
|
const script = `
|
||||||
|
const Ajv = require('ajv');
|
||||||
|
const addFormats = require("ajv-formats");
|
||||||
|
const ajv = new Ajv();
|
||||||
|
addFormats(ajv);
|
||||||
|
|
||||||
|
const schema = {
|
||||||
|
type: 'string',
|
||||||
|
format: 'date-time'
|
||||||
|
};
|
||||||
|
|
||||||
|
const validate = ajv.compile(schema)
|
||||||
|
|
||||||
|
bru.setVar('validation', validate(new Date().toISOString()))
|
||||||
|
`;
|
||||||
|
|
||||||
|
const runtime = new ScriptRuntime();
|
||||||
|
const result = await runtime.runResponseScript(
|
||||||
|
script,
|
||||||
|
{ ...baseRequest },
|
||||||
|
{ ...baseResponse },
|
||||||
|
{},
|
||||||
|
{},
|
||||||
|
'.',
|
||||||
|
null,
|
||||||
|
process.env
|
||||||
|
);
|
||||||
|
expect(result.collectionVariables.validation).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user