Files
bruno/packages/bruno-electron/tests/network/fetch-gql-schema-handler.spec.js
2025-05-27 14:38:48 +05:30

372 lines
8.5 KiB
JavaScript

const prepareGqlIntrospectionRequest = require('../../src/ipc/network/prepare-gql-introspection-request');
const { fetchGqlSchemaHandler } = require('../../src/ipc/network');
// Mock only the prepare-gql-introspection-request to avoid network calls
jest.mock('../../src/ipc/network/prepare-gql-introspection-request', () => {
return jest.fn().mockImplementation((endpoint, vars, request, root) => {
return {
url: endpoint,
method: 'POST',
headers: request?.headers || {},
data: {
query: '{ __schema { types { name } } }'
}
};
});
});
describe('fetchGqlSchemaHandler - variable precedence', () => {
beforeEach(() => {
jest.clearAllMocks();
});
afterEach(() => {
jest.restoreAllMocks();
});
it('should override global environment variables with environment variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: [
{ name: 'SHARED_VAR', value: 'env-value', enabled: true }
]
};
const request = {
uid: 'test-request',
vars: {
req: [] // No request variables
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {},
globalEnvironmentVariables: {
SHARED_VAR: 'global-value'
},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [] // No request variables
}
}
}
],
root: {
request: {
headers: [],
vars: {
req: [] // No collection variables
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'env-value'
}),
request,
collection.root
);
});
it('should override environment variables with folder-level variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: [
{ name: 'SHARED_VAR', value: 'env-value', enabled: true }
]
};
const request = {
uid: 'test-request',
vars: {
req: [] // No request variables
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {},
globalEnvironmentVariables: {},
items: [
{
uid: 'test-folder',
type: 'folder',
root: {
request: {
vars: {
req: [
{ name: 'SHARED_VAR', value: 'folder-value', enabled: true }
]
}
}
},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [] // No request variables
}
}
}
]
}
],
root: {
request: {
headers: [],
vars: {
req: [] // No collection variables
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'folder-value'
}),
request,
collection.root
);
});
it('should override folder-level variables with request variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: []
};
const request = {
uid: 'test-request',
vars: {
req: [
{ name: 'SHARED_VAR', value: 'request-value', enabled: true }
]
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {},
globalEnvironmentVariables: {},
items: [
{
uid: 'test-folder',
type: 'folder',
root: {
request: {
vars: {
req: [
{ name: 'SHARED_VAR', value: 'folder-value', enabled: true }
]
}
}
},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [
{ name: 'SHARED_VAR', value: 'request-value', enabled: true }
]
}
}
}
]
}
],
root: {
request: {
headers: [],
vars: {
req: [] // No collection variables
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'request-value'
}),
request,
collection.root
);
});
it('should override global environment variables with collection variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: []
};
const request = {
uid: 'test-request',
vars: {
req: [] // No request variables
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {},
globalEnvironmentVariables: {
SHARED_VAR: 'global-value'
},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [] // No request variables
}
}
}
],
root: {
request: {
headers: [],
vars: {
req: [
{ name: 'SHARED_VAR', value: 'collection-value', enabled: true }
]
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'collection-value'
}),
request,
collection.root
);
});
it('should override collection variables with environment variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: [
{ name: 'SHARED_VAR', value: 'env-value', enabled: true }
]
};
const request = {
uid: 'test-request',
vars: {
req: [] // No request variables
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {},
globalEnvironmentVariables: {},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [] // No request variables
}
}
}
],
root: {
request: {
headers: [],
vars: {
req: [
{ name: 'SHARED_VAR', value: 'collection-value', enabled: true }
]
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'env-value'
}),
request,
collection.root
);
});
it('should override request variables with runtime variables', async () => {
const endpoint = 'https://example.com/';
const environment = {
variables: []
};
const request = {
uid: 'test-request',
vars: {
req: [
{ name: 'SHARED_VAR', value: 'request-value', enabled: true }
]
}
};
const collection = {
uid: 'test-collection',
pathname: '/test',
runtimeVariables: {
SHARED_VAR: 'runtime-value'
},
items: [
{
uid: 'test-request',
request: {
vars: {
req: [
{ name: 'SHARED_VAR', value: 'request-value', enabled: true }
]
}
}
}
],
root: {
request: {
headers: [],
vars: {
req: [] // No collection variables
}
}
}
};
await fetchGqlSchemaHandler(null, endpoint, environment, request, collection);
expect(prepareGqlIntrospectionRequest).toHaveBeenCalledWith(
endpoint,
expect.objectContaining({
SHARED_VAR: 'runtime-value'
}),
request,
collection.root
);
})
});