Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{
"info": {
"_postman_id": "448e7b5c-554d-4a45-9bd9-aa89d75d10e5",
"name": "exportedTest",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "37339712"
},
"item": [
{
"name": "defaultRequest",
"request": {
"method": "GET",
"header": [
{
"key": "x-from",
"value": "{{from}}",
"type": "text"
}
],
"url": {
"raw": "https://httpbin.org",
"protocol": "https",
"host": [
"httpbin",
"org"
]
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"packages": {},
"requests": {},
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"packages": {},
"requests": {},
"exec": [
""
]
}
}
],
"variable": [
{
"key": "from",
"value": "variable",
"type": "default"
},
{
"key": "foo",
"value": "bar",
"type": "default"
}
]
}
218 changes: 217 additions & 1 deletion packages/insomnia/src/common/__tests__/import.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import path from 'node:path';

import { describe, expect, it } from 'vitest';

import { project, request, requestGroup, workspace } from '../../models';
import { environment, project, request, requestGroup, workspace } from '../../models';
import { EnvironmentKvPairDataType } from '../../models/environment';
import * as importUtil from '../import';
import { generateId } from '../misc';

/*
@vitest-environment jsdom
Expand Down Expand Up @@ -161,4 +163,218 @@ describe('importRaw()', () => {
expect(scanResult[0].type?.id).toBe('openapi3');
expect(scanResult[0].errors.length).toBe(0);
});

it('should import a postman collection variable to a collection base environment', async () => {
const fixturePath = path.join(
__dirname,
'..',
'__fixtures__',
'postman',
'collection-with-variable-v2_1-input.json',
);
const content = fs.readFileSync(fixturePath, 'utf8').toString();

const projectToImportTo = await project.create();
const projectId = projectToImportTo._id;

const scanResult = await importUtil.scanResources([
{
contentStr: content,
},
]);

expect(scanResult[0].type?.id).toBe('postman');
expect(scanResult[0].errors.length).toBe(0);

await importUtil.importResourcesToProject({
projectId: projectToImportTo._id,
});

const projectWorkspaces = await workspace.findByParentId(projectId);
const importedWorkspaceId = projectWorkspaces[0]._id;
const requestBaseEnvironment = await environment.getByParentId(importedWorkspaceId);

expect(requestBaseEnvironment).toBeDefined();

expect(requestBaseEnvironment!.data).toMatchObject({
from: 'variable',
foo: 'bar',
});
});

it('should merge the json base environment from a postman collection variable when imported inside a workspace', async () => {
const fixturePath = path.join(
__dirname,
'..',
'__fixtures__',
'postman',
'collection-with-variable-v2_1-input.json',
);
const content = fs.readFileSync(fixturePath, 'utf8').toString();

const existingWorkspace = await workspace.create();
const workspaceId = existingWorkspace._id;
const baseEnvironment = await environment.getOrCreateForParentId(workspaceId);
await environment.update(baseEnvironment, {
data: {
existingVar: 'exists',
},
});

const scanResult = await importUtil.scanResources([
{
contentStr: content,
},
]);

expect(scanResult[0].type?.id).toBe('postman');
expect(scanResult[0].errors.length).toBe(0);

await importUtil.importResourcesToWorkspace({
workspaceId: existingWorkspace._id,
});

const updatedBaseEnvironment = await environment.getByParentId(workspaceId);

expect(updatedBaseEnvironment?.data).toMatchObject({
existingVar: 'exists',
from: 'variable',
foo: 'bar',
});
});

it('should override kv base environment from a postman collection variable when imported inside a workspace', async () => {
const fixturePath = path.join(
__dirname,
'..',
'__fixtures__',
'postman',
'collection-with-variable-v2_1-input.json',
);
const content = fs.readFileSync(fixturePath, 'utf8').toString();

const existingWorkspace = await workspace.create();
const workspaceId = existingWorkspace._id;
const baseEnvironmentPair = [
{
id: generateId('envPair'),
name: 'from',
value: 'baseEnv',
type: EnvironmentKvPairDataType.STRING,
enabled: true,
},
{
id: generateId('envPair'),
name: 'disabledItemKey',
value: 'disabledItemValue',
type: EnvironmentKvPairDataType.STRING,
enabled: false,
},
];
const baseEnvironment = await environment.getOrCreateForParentId(workspaceId);
await environment.update(baseEnvironment, {
data: {
from: 'baseEnv',
},
environmentType: environment.EnvironmentType.KVPAIR,
kvPairData: baseEnvironmentPair,
});

const scanResult = await importUtil.scanResources([
{
contentStr: content,
},
]);

expect(scanResult[0].type?.id).toBe('postman');
expect(scanResult[0].errors.length).toBe(0);

await importUtil.importResourcesToWorkspace({
workspaceId: existingWorkspace._id,
});

const updatedBaseEnvironment = await environment.getByParentId(workspaceId);

expect(updatedBaseEnvironment?.data).toMatchObject({
from: 'variable',
foo: 'bar',
});
const newKvPairData = updatedBaseEnvironment?.kvPairData || [];
expect(newKvPairData.length).toBe(3);
expect(newKvPairData.filter(pair => pair.enabled).length).toBe(2);
expect(newKvPairData.find(pair => pair.name === 'from')?.value).toBe('variable');
expect(newKvPairData.find(pair => pair.name === 'foo')?.value).toBe('bar');
});

it('should merge and discard same name variable in kv base environment from a postman collection variable when imported inside a workspace', async () => {
const fixturePath = path.join(
__dirname,
'..',
'__fixtures__',
'postman',
'collection-with-variable-v2_1-input.json',
);
const content = fs.readFileSync(fixturePath, 'utf8').toString();

const existingWorkspace = await workspace.create();
const workspaceId = existingWorkspace._id;
const baseEnvironmentPair = [
{
id: generateId('envPair'),
name: 'from',
value: 'disabledValue',
type: EnvironmentKvPairDataType.STRING,
enabled: false,
},
{
id: generateId('envPair'),
name: 'from',
value: 'baseEnv',
type: EnvironmentKvPairDataType.STRING,
enabled: true,
},
{
id: generateId('envPair'),
name: 'disabledItemKey',
value: 'disabledItemValue',
type: EnvironmentKvPairDataType.STRING,
enabled: false,
},
];
const baseEnvironment = await environment.getOrCreateForParentId(workspaceId);
await environment.update(baseEnvironment, {
data: {
from: 'baseEnv',
},
environmentType: environment.EnvironmentType.KVPAIR,
kvPairData: baseEnvironmentPair,
});

const scanResult = await importUtil.scanResources([
{
contentStr: content,
},
]);

expect(scanResult[0].type?.id).toBe('postman');
expect(scanResult[0].errors.length).toBe(0);

await importUtil.importResourcesToWorkspace({
workspaceId: existingWorkspace._id,
overrideBaseEnvironmentData: false,
});

const updatedBaseEnvironment = await environment.getByParentId(workspaceId);

expect(updatedBaseEnvironment?.data).toMatchObject({
from: 'baseEnv',
foo: 'bar',
});
const newKvPairData = updatedBaseEnvironment?.kvPairData || [];
expect(newKvPairData.length).toBe(4);
expect(newKvPairData.filter(pair => pair.enabled).length).toBe(2);
expect(newKvPairData.filter(pair => !pair.enabled).length).toBe(2);
expect(newKvPairData.find(pair => pair.name === 'from' && pair.enabled)?.value).toBe('baseEnv');
expect(newKvPairData.find(pair => pair.name === 'foo')?.value).toBe('bar');
});
});
Loading
Loading