diff --git a/packages/insomnia-inso/src/__tests__/write-file.test.js b/packages/insomnia-inso/src/__tests__/write-file.test.js index b1b1280d89..9996da3a16 100644 --- a/packages/insomnia-inso/src/__tests__/write-file.test.js +++ b/packages/insomnia-inso/src/__tests__/write-file.test.js @@ -4,6 +4,7 @@ import { writeFileWithCliOptions } from '../write-file'; import mkdirp from 'mkdirp'; import fs from 'fs'; import { InsoError } from '../errors'; +import os from 'os'; jest.mock('mkdirp', () => ({ sync: jest.fn().mockResolvedValue(), @@ -32,6 +33,26 @@ describe('writeFileWithCliOptions', () => { await expect(promise).resolves.toBe('file.yaml'); }); + it('should write to absolute output file', async () => { + const absolutePath = path.join(os.tmpdir(), 'dev', 'file.yaml'); + const output = absolutePath; + const contents = 'contents'; + const workingDir = undefined; + + const promise = writeFileWithCliOptions(output, contents, workingDir); + await expect(promise).resolves.toBe(absolutePath); + }); + + it('should write to absolute output file and ignore working dir', async () => { + const absolutePath = path.join(os.tmpdir(), 'dev', 'file.yaml'); + const output = absolutePath; + const contents = 'contents'; + const workingDir = 'working/dir'; + + const promise = writeFileWithCliOptions(output, contents, workingDir); + await expect(promise).resolves.toBe(absolutePath); + }); + it('should write to output file under working dir', async () => { const output = 'file.yaml'; const contents = 'contents'; diff --git a/packages/insomnia-inso/src/commands/__tests__/generate-config.test.js b/packages/insomnia-inso/src/commands/__tests__/generate-config.test.js index e08e0821c4..1cc48eb4fd 100644 --- a/packages/insomnia-inso/src/commands/__tests__/generate-config.test.js +++ b/packages/insomnia-inso/src/commands/__tests__/generate-config.test.js @@ -6,6 +6,7 @@ import { writeFileWithCliOptions } from '../../write-file'; import { globalBeforeAll, globalBeforeEach } from '../../../__jest__/before'; import logger from '../../logger'; import { InsoError } from '../../errors'; +import os from 'os'; jest.mock('openapi-2-kong'); jest.mock('../../write-file'); @@ -120,6 +121,27 @@ describe('generateConfig()', () => { expect(logger.__getLogs().log).toEqual([`Configuration generated to "${outputPath}".`]); }); + it('should generate documents using absolute path', async () => { + mock(o2k.generate).mockResolvedValue({ documents: ['a', 'b'] }); + const outputPath = 'this-is-the-output-path'; + mock(writeFileWithCliOptions).mockResolvedValue(outputPath); + + const absolutePath = path.join(os.tmpdir(), 'dev', 'file.yaml'); + + const result = await generateConfig(absolutePath, { + type: 'kubernetes', + workingDir: 'test/dir', + output: 'output.yaml', + }); + + expect(result).toBe(true); + + // Read from workingDir + expect(o2k.generate).toHaveBeenCalledWith(absolutePath, ConversionTypeMap.kubernetes); + + expect(logger.__getLogs().log).toEqual([`Configuration generated to "${outputPath}".`]); + }); + it('should throw InsoError if there is an error thrown by openapi-2-kong', async () => { const error = new Error('err'); mock(o2k.generate).mockRejectedValue(error); diff --git a/packages/insomnia-inso/src/commands/generate-config.js b/packages/insomnia-inso/src/commands/generate-config.js index 1319296086..7659399e12 100644 --- a/packages/insomnia-inso/src/commands/generate-config.js +++ b/packages/insomnia-inso/src/commands/generate-config.js @@ -52,7 +52,9 @@ export async function generateConfig( result = await o2k.generateFromString(specFromDb.contents, ConversionTypeMap[type]); } else if (identifier) { // try load as a file - const fileName = path.join(workingDir || '.', identifier); + const fileName = path.isAbsolute(identifier) + ? identifier + : path.join(workingDir || '.', identifier); logger.trace(`Generating config from file \`${fileName}\``); result = await o2k.generate(fileName, ConversionTypeMap[type]); } diff --git a/packages/insomnia-inso/src/write-file.js b/packages/insomnia-inso/src/write-file.js index bcee3294be..65613aa3ae 100644 --- a/packages/insomnia-inso/src/write-file.js +++ b/packages/insomnia-inso/src/write-file.js @@ -9,7 +9,7 @@ export async function writeFileWithCliOptions( contents: string, workingDir?: string, ): Promise { - const outputPath = path.join(workingDir || '.', output); + const outputPath = path.isAbsolute(output) ? output : path.join(workingDir || '.', output); try { await mkdirp.sync(path.dirname(outputPath)); await fs.promises.writeFile(outputPath, contents);