diff --git a/packages/insomnia-app/app/common/send-request.ts b/packages/insomnia-app/app/common/send-request.ts index cd4434863e..c1c5d38b65 100644 --- a/packages/insomnia-app/app/common/send-request.ts +++ b/packages/insomnia-app/app/common/send-request.ts @@ -1,12 +1,18 @@ import { BaseModel, stats, types as modelTypes } from '../models'; +import * as models from '../models'; import { getBodyBuffer } from '../models/response'; +import { Settings } from '../models/settings'; import { send } from '../network/network'; import * as plugins from '../plugins'; -import { database as db } from './database'; +import { database } from './database'; -export async function getSendRequestCallbackMemDb(environmentId, memDB) { +// The network layer uses settings from the settings model +// We want to give consumers the ability to override certain settings +type SettingsOverride = Pick; + +export async function getSendRequestCallbackMemDb(environmentId: string, memDB: any, settingsOverrides?: SettingsOverride) { // Initialize the DB in-memory and fill it with data if we're given one - await db.init( + await database.init( modelTypes(), { inMemoryOnly: true, @@ -16,29 +22,34 @@ export async function getSendRequestCallbackMemDb(environmentId, memDB) { ); const docs: BaseModel[] = []; + const settings = await models.settings.getOrCreate(); + docs.push({ ...settings, ...settingsOverrides }); + for (const type of Object.keys(memDB)) { for (const doc of memDB[type]) { docs.push(doc); } } - await db.batchModifyDocs({ + await database.batchModifyDocs({ upsert: docs, remove: [], }); + // Return callback helper to send requests - return async function sendRequest(requestId) { + return async function sendRequest(requestId: string) { return sendAndTransform(requestId, environmentId); }; } -export function getSendRequestCallback(environmentId) { - return async function sendRequest(requestId) { + +export function getSendRequestCallback(environmentId?: string) { + return async function sendRequest(requestId: string) { stats.incrementExecutedRequests(); return sendAndTransform(requestId, environmentId); }; } -async function sendAndTransform(requestId, environmentId) { +async function sendAndTransform(requestId: string, environmentId?: string) { try { plugins.ignorePlugin('insomnia-plugin-kong-bundle'); const res = await send(requestId, environmentId); diff --git a/packages/insomnia-app/app/ui/components/wrapper-unit-test.tsx b/packages/insomnia-app/app/ui/components/wrapper-unit-test.tsx index b49d83a4d7..07dc2feedd 100644 --- a/packages/insomnia-app/app/ui/components/wrapper-unit-test.tsx +++ b/packages/insomnia-app/app/ui/components/wrapper-unit-test.tsx @@ -282,7 +282,7 @@ class WrapperUnitTest extends PureComponent { tests, }, ]); - const sendRequest = getSendRequestCallback(activeEnvironment ? activeEnvironment._id : null); + const sendRequest = getSendRequestCallback(activeEnvironment?._id); let results; try { diff --git a/packages/insomnia-inso/README.md b/packages/insomnia-inso/README.md index a2ecedcb29..2f11351618 100644 --- a/packages/insomnia-inso/README.md +++ b/packages/insomnia-inso/README.md @@ -151,6 +151,7 @@ The test runner is built on top of Mocha, thus many of the options behave as the | `--testNamePattern ` | `-t` | run tests that match the regex| | `--bail` | `-b` | abort ("bail") after the first test failure| | `--keepFile` | | do not delete the generated test file (useful for debugging)| +| `--disableCertValidation` | | disable certificate validation| ### Examples @@ -169,6 +170,13 @@ inso run test "Sample Specification" --env "OpenAPI env" inso run test spc_46c5a4 --env env_env_ca046a ``` +Don't validate SSL certificates + +``` sh +inso run test "Sample Specification" --env "OpenAPI env" --disableSSL +inso run test spc_46c5a4 --env env_env_ca046a --disableSSL +``` + Scope by the a test suite name or id ``` sh diff --git a/packages/insomnia-inso/src/__snapshots__/inso-snapshot.test.ts.snap b/packages/insomnia-inso/src/__snapshots__/inso-snapshot.test.ts.snap index e8c7c29528..92b288387c 100644 --- a/packages/insomnia-inso/src/__snapshots__/inso-snapshot.test.ts.snap +++ b/packages/insomnia-inso/src/__snapshots__/inso-snapshot.test.ts.snap @@ -168,5 +168,6 @@ Options: progress, spec] (default: spec) -b, --bail abort (\\"bail\\") after first test failure --keepFile do not delete the generated test file + --disableCertValidation disable certificate validation -h, --help display help for command" `; diff --git a/packages/insomnia-inso/src/cli.ts b/packages/insomnia-inso/src/cli.ts index 697c7ca420..8e488f98a5 100644 --- a/packages/insomnia-inso/src/cli.ts +++ b/packages/insomnia-inso/src/cli.ts @@ -64,6 +64,7 @@ const makeTestCommand = (commandCreator: CreateCommand) => { ) .option('-b, --bail', 'abort ("bail") after first test failure') .option('--keepFile', 'do not delete the generated test file') + .option('--disableCertValidation', 'disable certificate validation') .action((identifier, cmd) => { let options = getOptions(cmd, { reporter: defaultReporter, diff --git a/packages/insomnia-inso/src/commands/run-tests.ts b/packages/insomnia-inso/src/commands/run-tests.ts index fd20ff96ec..c89983dd18 100644 --- a/packages/insomnia-inso/src/commands/run-tests.ts +++ b/packages/insomnia-inso/src/commands/run-tests.ts @@ -25,6 +25,7 @@ export type RunTestsOptions = GlobalOptions & { bail?: boolean; keepFile?: boolean; testNamePattern?: string; + disableCertValidation?: boolean; }; function validateOptions({ reporter }: Partial): boolean { @@ -55,7 +56,7 @@ export async function runInsomniaTests( return false; } - const { reporter, bail, keepFile, appDataDir, workingDir, env, ci, testNamePattern } = options; + const { reporter, bail, keepFile, appDataDir, workingDir, env, ci, testNamePattern, disableCertValidation } = options; const db = await loadDb({ workingDir, appDataDir, @@ -93,7 +94,7 @@ export async function runInsomniaTests( // eslint-disable-next-line @typescript-eslint/no-var-requires -- Load lazily when needed, otherwise this require slows down the entire CLI. const { getSendRequestCallbackMemDb } = require('insomnia-send-request'); - const sendRequest = await getSendRequestCallbackMemDb(environment._id, db); + const sendRequest = await getSendRequestCallbackMemDb(environment._id, db, { validateSSL: !disableCertValidation }); return await noConsoleLog(() => runTestsCli(testFileContents, { reporter,