From 1d9768909b3c4a9177270fa847681f74be88e18c Mon Sep 17 00:00:00 2001 From: KobeNguyenT <7845001+kobenguyent@users.noreply.github.com> Date: Wed, 6 Dec 2023 17:09:46 +0100 Subject: [PATCH] feat(tests): support json schema validation (#6532) * feat(tests): support json schema validation * add json schema to cli test --------- Co-authored-by: gatzjames --- package-lock.json | 29 +++++++++++++++++++ .../fixtures/inso-nedb/insomnia.UnitTest.db | 2 +- packages/insomnia-testing/src/run/run.ts | 3 ++ packages/insomnia/package.json | 1 + 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 69bb4eefcde..ea045de5a3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9724,6 +9724,21 @@ "node": ">=4" } }, + "node_modules/chai-json-schema": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/chai-json-schema/-/chai-json-schema-1.5.1.tgz", + "integrity": "sha512-TR/xPDxRhqwFFCWg1HgL8nNWbpNfUwaib6pBN++QKpnd0t+o3+MBvAn5CM1mpdUMaM76oJAtUjGKdjGad01lIA==", + "dependencies": { + "jsonpointer.js": "0.4.0", + "tv4": "^1.3.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "chai": ">= 1.6.1 < 5" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -17631,6 +17646,11 @@ "node": ">=0.10.0" } }, + "node_modules/jsonpointer.js": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz", + "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg==" + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -23453,6 +23473,14 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -24575,6 +24603,7 @@ "aws4": "^1.12.0", "axios": "^1.4.0", "chai": "^4.3.4", + "chai-json-schema": "1.5.1", "change-case": "^4.1.2", "clone": "^2.1.0", "color": "^3.1.2", diff --git a/packages/insomnia-smoke-test/fixtures/inso-nedb/insomnia.UnitTest.db b/packages/insomnia-smoke-test/fixtures/inso-nedb/insomnia.UnitTest.db index a67468ca8f6..61882cf3bb8 100644 --- a/packages/insomnia-smoke-test/fixtures/inso-nedb/insomnia.UnitTest.db +++ b/packages/insomnia-smoke-test/fixtures/inso-nedb/insomnia.UnitTest.db @@ -1 +1 @@ -{"_id":"ut_babcaf85ec1b481ebed1e1cd1aa61a75","type":"UnitTest","parentId":"uts_b12681ace8eb4e5999b5b51677c4c269","modified":1632964811893,"created":1632962936043,"requestId":"req_f2cd394aad83485c8f7bee1b612165d5","name":"Returns 200","code":"const response1 = await insomnia.send();\nexpect(response1.status).to.equal(200);"} +{"_id":"ut_babcaf85ec1b481ebed1e1cd1aa61a75","type":"UnitTest","parentId":"uts_b12681ace8eb4e5999b5b51677c4c269","modified":1632964811893,"created":1632962936043,"requestId":"req_f2cd394aad83485c8f7bee1b612165d5","name":"Returns 200","code":"const response1 = await insomnia.send();\nexpect(response1.status).to.equal(200);\nconst schema = {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Response Schema\",\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"id\"\n ]\n}\nexpect(JSON.parse(response1.data)).to.be.jsonSchema(schema)"} diff --git a/packages/insomnia-testing/src/run/run.ts b/packages/insomnia-testing/src/run/run.ts index 8c269d8d0c9..19f579eca1b 100644 --- a/packages/insomnia-testing/src/run/run.ts +++ b/packages/insomnia-testing/src/run/run.ts @@ -22,6 +22,9 @@ const runInternal = async ( // This is the only way to add new globals to the Mocha environment as far as I can tell // @ts-expect-error -- global hack global.insomnia = new Insomnia(options); + + // eslint-disable-next-line @typescript-eslint/no-var-requires + chai.use(require('chai-json-schema')); // @ts-expect-error -- global hack global.chai = chai; diff --git a/packages/insomnia/package.json b/packages/insomnia/package.json index 9fbcc1fa940..6f8c5d79cb0 100644 --- a/packages/insomnia/package.json +++ b/packages/insomnia/package.json @@ -50,6 +50,7 @@ "aws4": "^1.12.0", "axios": "^1.4.0", "chai": "^4.3.4", + "chai-json-schema": "1.5.1", "change-case": "^4.1.2", "clone": "^2.1.0", "color": "^3.1.2",