mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-16 04:11:29 +00:00
Co-authored-by: William Quintal <william95quintalwilliam@outlook.com> Feat: Enhance run command to accept multiple inputs for requests and folders in Bruno CLI (Improves: #2956) (Fixes: #2955)
461 lines
13 KiB
JavaScript
461 lines
13 KiB
JavaScript
const { describe, it, expect, beforeEach } = require('@jest/globals');
|
|
const { getCallStack } = require('../../../src/utils/collection');
|
|
|
|
const collection = {
|
|
brunoConfig: {
|
|
version: '1',
|
|
name: 'multirun-cli',
|
|
type: 'collection',
|
|
ignore: ['node_modules', '.git']
|
|
},
|
|
root: {
|
|
request: {
|
|
headers: [],
|
|
auth: {},
|
|
script: {},
|
|
vars: {},
|
|
tests: ''
|
|
}
|
|
},
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20',
|
|
items: [
|
|
{
|
|
name: 'root-folder',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder',
|
|
type: 'folder',
|
|
items: [
|
|
{
|
|
name: 'root-child-folder',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder',
|
|
type: 'folder',
|
|
items: [
|
|
{
|
|
name: 'root-child-child-folder',
|
|
pathname:
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-folder',
|
|
type: 'folder',
|
|
items: [
|
|
{
|
|
name: 'root-child-child-child-req-0',
|
|
pathname:
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-folder/root-child-child-child-req-0.bru',
|
|
type: 'http-request',
|
|
seq: 1,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-child-child-file-0")'
|
|
},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'root-child-child-child-req-1',
|
|
pathname:
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-folder/root-child-child-child-req-1.bru',
|
|
type: 'http-request',
|
|
seq: 2,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-child-child-file-1")'
|
|
},
|
|
tests: ''
|
|
}
|
|
}
|
|
],
|
|
root: {
|
|
request: {
|
|
headers: [],
|
|
auth: {},
|
|
script: {},
|
|
vars: {},
|
|
tests: ''
|
|
},
|
|
meta: {
|
|
name: 'root-child-child-folder',
|
|
seq: 3
|
|
}
|
|
},
|
|
seq: 3
|
|
},
|
|
{
|
|
name: 'root-child-child-req-0',
|
|
pathname:
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-0.bru',
|
|
type: 'http-request',
|
|
seq: 4,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-child-file-0")'
|
|
},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'root-child-child-req-1',
|
|
pathname:
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-1.bru',
|
|
type: 'http-request',
|
|
seq: 5,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-child-file-1")'
|
|
},
|
|
tests: ''
|
|
}
|
|
}
|
|
],
|
|
root: {
|
|
request: {
|
|
headers: [],
|
|
auth: {},
|
|
script: {},
|
|
vars: {},
|
|
tests: ''
|
|
},
|
|
meta: {
|
|
name: 'root-child-folder',
|
|
seq: 6
|
|
}
|
|
},
|
|
seq: 6
|
|
},
|
|
{
|
|
name: 'root-child-req-0',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-req-0.bru',
|
|
type: 'http-request',
|
|
seq: 7,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-file-0")'
|
|
},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'root-child-req-1',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-req-1.bru',
|
|
type: 'http-request',
|
|
seq: 8,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-child-file-1")'
|
|
},
|
|
tests: ''
|
|
}
|
|
}
|
|
],
|
|
root: {
|
|
request: {
|
|
headers: [],
|
|
auth: {},
|
|
script: {},
|
|
vars: {},
|
|
tests: ''
|
|
},
|
|
meta: {
|
|
name: 'root-folder',
|
|
seq: 9
|
|
}
|
|
},
|
|
seq: 9
|
|
},
|
|
{
|
|
name: 'root-req-0',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-0.bru',
|
|
type: 'http-request',
|
|
seq: 10,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-file-0")'
|
|
},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'root-req-1',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-1.bru',
|
|
type: 'http-request',
|
|
seq: 11,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-file-1")'
|
|
},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'root-req-2',
|
|
pathname: '/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-2.bru',
|
|
type: 'http-request',
|
|
seq: 12,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://g.cn',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {
|
|
req: 'console.log("root-file-2")'
|
|
},
|
|
tests: ''
|
|
}
|
|
}
|
|
]
|
|
};
|
|
|
|
const sequenceChangedCollection = {
|
|
brunoConfig: {
|
|
version: '1',
|
|
name: 'sequenceChangedCollection',
|
|
type: 'collection',
|
|
ignore: ['node_modules', '.git']
|
|
},
|
|
root: {},
|
|
pathname: '/Users/tempo/Downloads/t-temp/sequenceChangedCollection',
|
|
items: [
|
|
{
|
|
name: 'three',
|
|
pathname: '/Users/tempo/Downloads/t-temp/sequenceChangedCollection/three.bru',
|
|
type: 'http-request',
|
|
seq: 1,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://usebruno.com',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'one',
|
|
pathname: '/Users/tempo/Downloads/t-temp/sequenceChangedCollection/one.bru',
|
|
type: 'http-request',
|
|
seq: 2,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://usebruno.com',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {},
|
|
tests: ''
|
|
}
|
|
},
|
|
{
|
|
name: 'two',
|
|
pathname: '/Users/tempo/Downloads/t-temp/sequenceChangedCollection/two.bru',
|
|
type: 'http-request',
|
|
seq: 2,
|
|
request: {
|
|
method: 'GET',
|
|
url: 'https://usebruno.com',
|
|
auth: {
|
|
mode: 'inherit'
|
|
},
|
|
params: [],
|
|
headers: [],
|
|
body: {
|
|
mode: 'none'
|
|
},
|
|
vars: [],
|
|
assertions: [],
|
|
script: {},
|
|
tests: ''
|
|
}
|
|
}
|
|
]
|
|
};
|
|
|
|
describe('getCallStack', () => {
|
|
it('should return all requests in the collection', () => {
|
|
const callStack = getCallStack(['/Users/tempo/Downloads/t-temp/multirun-cli-20'], collection, { recursive: true });
|
|
const expectedCallStack = [
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-folder/root-child-child-child-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-folder/root-child-child-child-req-1.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-1.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-req-1.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-1.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-2.bru'
|
|
];
|
|
expect(callStack.map((item) => item.pathname)).toEqual(expectedCallStack);
|
|
});
|
|
|
|
it('should return all requests in the collection when sequence is changed', () => {
|
|
const callStack = getCallStack(
|
|
['/Users/tempo/Downloads/t-temp/sequenceChangedCollection'],
|
|
sequenceChangedCollection,
|
|
{
|
|
recursive: true
|
|
}
|
|
);
|
|
const expectedCallStack = [
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/three.bru',
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/one.bru',
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/two.bru'
|
|
];
|
|
expect(callStack.map((item) => item.pathname)).toEqual(expectedCallStack);
|
|
});
|
|
});
|
|
|
|
describe('getCallStack with collection sequence changed', () => {
|
|
it('should return an empty array', () => {
|
|
const callStack = getCallStack(
|
|
['/Users/tempo/Downloads/t-temp/sequenceChangedCollection'],
|
|
sequenceChangedCollection,
|
|
{
|
|
recursive: true
|
|
}
|
|
);
|
|
const expectedCallStack = [
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/three.bru',
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/one.bru',
|
|
'/Users/tempo/Downloads/t-temp/sequenceChangedCollection/two.bru'
|
|
];
|
|
expect(callStack.map((item) => item.pathname)).toEqual(expectedCallStack);
|
|
});
|
|
});
|
|
|
|
describe('getCallStack with muliple folders and requests run', () => {
|
|
it('should return an empty array', () => {
|
|
const callStack = getCallStack(
|
|
[
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-2.bru'
|
|
],
|
|
collection,
|
|
{
|
|
recursive: true
|
|
}
|
|
);
|
|
const expectedCallStack = [
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-folder/root-child-folder/root-child-child-req-0.bru',
|
|
'/Users/tempo/Downloads/t-temp/multirun-cli-20/root-req-2.bru'
|
|
];
|
|
expect(callStack.map((item) => item.pathname)).toEqual(expectedCallStack);
|
|
});
|
|
});
|