Files
bruno/packages/bruno-electron/tests/utils/collection.spec.js
2025-07-24 18:48:25 +05:30

288 lines
5.5 KiB
JavaScript

const { parseBruFileMeta } = require("../../src/utils/collection");
describe('parseBruFileMeta', () => {
test('parses valid meta block correctly', () => {
const data = `meta {
name: 0.2_mb
type: http
seq: 1
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: '0.2_mb',
seq: 1,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('returns null for missing meta block', () => {
const data = `someOtherBlock {
key: value
}`;
const result = parseBruFileMeta(data);
expect(result).toBeNull();
});
test('handles empty meta block gracefully', () => {
const data = `meta {}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: undefined,
seq: 1,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('ignores invalid lines in meta block', () => {
const data = `meta {
name: 0.2_mb
invalidLine
seq: 1
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: '0.2_mb',
seq: 1,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('handles unexpected input gracefully', () => {
const data = null;
const result = parseBruFileMeta(data);
expect(result).toBeNull();
});
test('handles missing colon gracefully', () => {
const data = `meta {
name 0.2_mb
seq: 1
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: undefined,
seq: 1,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('parses numeric values correctly', () => {
const data = `meta {
numValue: 1234
floatValue: 12.34
strValue: some_text
seq: 5
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: undefined,
seq: 5,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('handles syntax error in meta block 1', () => {
const data = `meta
name: 0.2_mb
type: http
seq: 1
}`;
const result = parseBruFileMeta(data);
expect(result).toBeNull();
});
test('handles syntax error in meta block 2', () => {
const data = `meta {
name: 0.2_mb
type: http
seq: 1
`;
const result = parseBruFileMeta(data);
expect(result).toBeNull();
});
test('handles graphql type correctly', () => {
const data = `meta {
name: graphql_query
type: graphql
seq: 2
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'graphql-request',
name: 'graphql_query',
seq: 2,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('handles unknown type correctly', () => {
const data = `meta {
name: unknown_request
type: unknown
seq: 3
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: 'unknown_request',
seq: 3,
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
test('handles missing seq gracefully', () => {
const data = `meta {
name: no_seq_request
type: http
}`;
const result = parseBruFileMeta(data);
expect(result).toEqual({
type: 'http-request',
name: 'no_seq_request',
seq: 1, // Default fallback
settings: {},
tags: [],
request: {
method: '',
url: '',
params: [],
headers: [],
auth: { mode: 'none' },
body: { mode: 'none' },
script: {},
vars: {},
assertions: [],
tests: '',
docs: ''
}
});
});
});