diff --git a/plugins/importer-postman/tests/fixtures/nested.json b/plugins/importer-postman/tests/fixtures/nested.json index aeddf6ab..0061656e 100644 --- a/plugins/importer-postman/tests/fixtures/nested.json +++ b/plugins/importer-postman/tests/fixtures/nested.json @@ -7,158 +7,32 @@ }, "item": [ { - "name": "New Folder", + "name": "Top Folder", "item": [ { - "name": "FOlder 2", + "name": "Nested Folder", "item": [ { - "name": "Basic Auth", + "name": "Request 1", "request": { - "auth": { - "type": "basic", - "basic": { - "password": "pass", - "username": "user" - } - }, - "method": "GET", - "header": [], - "url": "https://schier.co" - }, - "response": [] + "method": "GET" + } } ] }, { - "name": "Form Data", + "name": "Request 2", "request": { - "method": "POST", - "header": [ - { - "key": "X-foo", - "value": "bar", - "description": "description", - "type": "text" - }, - { - "key": "Disabled", - "value": "tnroant", - "description": "ntisorantosra", - "type": "text", - "disabled": true - } - ], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "Form", - "value": "Value", - "description": "descirption", - "type": "text" - }, - { - "key": "Disabled", - "value": "foo", - "description": "bar", - "type": "text", - "disabled": true - }, - { - "key": "file", - "type": "file", - "src": "/Users/gschier/Desktop/foo.json" - }, - { - "key": "Rendered", - "value": "{{Foo}}", - "type": "text" - } - ] - }, - "url": { - "raw": "schier.co?firstkey=firstvalue&hi=there", - "host": [ - "schier", - "co" - ], - "query": [ - { - "key": "disabled", - "value": "secondvalue", - "description": "this is disabled", - "disabled": true - }, - { - "key": "firstkey", - "value": "firstvalue" - }, - { - "key": "hi", - "value": "there" - } - ] - } - }, - "response": [] + "method": "GET" + } } ] }, { - "name": "Form URL", + "name": "Request 3", "request": { - "method": "POST", - "header": [ - { - "key": "X-foo", - "value": "bar", - "description": "description", - "type": "text" - }, - { - "key": "Disabled", - "value": "tnroant", - "description": "ntisorantosra", - "type": "text", - "disabled": true - } - ], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "foo", - "value": "bar", - "type": "text" - } - ] - }, - "url": { - "raw": "schier.co?firstkey=firstvalue&hi=there", - "host": [ - "schier", - "co" - ], - "query": [ - { - "key": "disabled", - "value": "secondvalue", - "description": "this is disabled", - "disabled": true - }, - { - "key": "firstkey", - "value": "firstvalue" - }, - { - "key": "hi", - "value": "there" - } - ] - } - }, - "response": [] + "method": "GET" + } } ] -} \ No newline at end of file +} diff --git a/plugins/importer-postman/tests/index.test.ts b/plugins/importer-postman/tests/index.test.ts index 6b4ec133..e85ecf88 100644 --- a/plugins/importer-postman/tests/index.test.ts +++ b/plugins/importer-postman/tests/index.test.ts @@ -1,6 +1,6 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; -import { expect, test, describe, beforeEach, afterEach, vi } from 'vitest'; +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; import { pluginHookImport } from '../src'; let originalRandom = Math.random; @@ -8,8 +8,8 @@ let originalRandom = Math.random; describe('importer-postman', () => { beforeEach(() => { let i = 0; - const mocked = vi.fn(() => ((i++ * 1000) % 133) / 100); - Math.random = mocked; + // Psuedo-random number generator to ensure consistent ID generation + Math.random = vi.fn(() => ((i++ * 1000) % 133) / 100); }); afterEach(() => { @@ -19,16 +19,45 @@ describe('importer-postman', () => { const p = path.join(__dirname, 'fixtures'); const fixtures = fs.readdirSync(p); - console.log('FIXTURES', fixtures); for (const fixture of fixtures) { test('Imports ' + fixture, () => { const contents = fs.readFileSync(path.join(p, fixture), 'utf-8'); const imported = pluginHookImport(contents); expect(imported).toEqual({ - resources: { - environments: [], - requests: [], - }, + resources: expect.objectContaining({ + folders: expect.arrayContaining([ + expect.objectContaining({ + name: 'Top Folder', + workspaceId: 'wk_0G3J6M9QcT', + }), + expect.objectContaining({ + name: 'Nested Folder', + workspaceId: 'wk_0G3J6M9QcT', + }), + ]), + httpRequests: expect.arrayContaining([ + expect.objectContaining({ + name: 'Request 1', + workspaceId: 'wk_0G3J6M9QcT', + folderId: 'fl_vundefinedyundefinedBundefinedE0H3', + }), + expect.objectContaining({ + name: 'Request 2', + workspaceId: 'wk_0G3J6M9QcT', + folderId: 'fl_fWiZlundefinedoundefinedrundefined', + }), + expect.objectContaining({ + name: 'Request 3', + workspaceId: 'wk_0G3J6M9QcT', + folderId: null, + }), + ]), + workspaces: [ + expect.objectContaining({ + name: 'New Collection', + }), + ], + }), }); }); } diff --git a/plugins/importer-yaak/src/index.js b/plugins/importer-yaak/src/index.ts similarity index 53% rename from plugins/importer-yaak/src/index.js rename to plugins/importer-yaak/src/index.ts index 2fe39739..7b349ef0 100644 --- a/plugins/importer-yaak/src/index.js +++ b/plugins/importer-yaak/src/index.ts @@ -1,4 +1,4 @@ -export function pluginHookImport(contents) { +export function pluginHookImport(contents: string) { let parsed; try { parsed = JSON.parse(contents); @@ -10,23 +10,20 @@ export function pluginHookImport(contents) { return undefined; } - if (!('yaakSchema' in parsed)) { + const isYaakExport = 'yaakSchema' in parsed; + if (!isYaakExport) { return; } // Migrate v1 to v2 -- changes requests to httpRequests - if (parsed.yaakSchema === 1) { + if ('requests' in parsed.resources) { parsed.resources.httpRequests = parsed.resources.requests; - parsed.yaakSchema = 2; + delete parsed.resources.requests; } - if (parsed.yaakSchema === 2) { - return { resources: parsed.resources }; // Should already be in the correct format - } - - return undefined; + return { resources: parsed.resources }; // Should already be in the correct format } -export function isJSObject(obj) { +export function isJSObject(obj: any) { return Object.prototype.toString.call(obj) === '[object Object]'; } diff --git a/plugins/importer-yaak/tests/index.test.ts b/plugins/importer-yaak/tests/index.test.ts new file mode 100644 index 00000000..b225dc64 --- /dev/null +++ b/plugins/importer-yaak/tests/index.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, test } from 'vitest'; +import { pluginHookImport } from '../src'; + +describe('importer-yaak', () => { + test('Skips invalid imports', () => { + expect(pluginHookImport('not JSON')).toBeUndefined(); + expect(pluginHookImport('[]')).toBeUndefined(); + expect(pluginHookImport(JSON.stringify({ resources: {} }))).toBeUndefined(); + }); + + test('converts schema 1 to 2', () => { + const imported = pluginHookImport( + JSON.stringify({ + yaakSchema: 1, + resources: { + requests: [], + }, + }), + ); + + expect(imported).toEqual( + expect.objectContaining({ + resources: { + httpRequests: [], + }, + }), + ); + }); +}); diff --git a/plugins/importer-yaak/vite.config.js b/plugins/importer-yaak/vite.config.js index 33824ded..b4fd6920 100644 --- a/plugins/importer-yaak/vite.config.js +++ b/plugins/importer-yaak/vite.config.js @@ -4,7 +4,7 @@ import { defineConfig } from 'vite'; export default defineConfig({ build: { lib: { - entry: resolve(__dirname, 'src/index.js'), + entry: resolve(__dirname, 'src/index.ts'), fileName: 'index', formats: ['es'], },