diff --git a/packages/api/__tests__/index.test.js b/packages/api/__tests__/index.test.js index f1aa1fb3..2f14a756 100644 --- a/packages/api/__tests__/index.test.js +++ b/packages/api/__tests__/index.test.js @@ -270,4 +270,44 @@ describe('#fetch', () => { }); }); }); + + describe('query parameter URL encoding', () => { + it('should encode url parameters if they are not already encoded', () => { + const params = { + tags: 'somethign¬hing=true&20%', + limit: 'hash#data', + }; + + const mock = nock(petstoreServerUrl) + .get('/pets') + .query(true) + .reply(200, function () { + return { path: this.req.path }; + }); + + return petstoreSdk.findPets(params).then(res => { + expect(res.path).toStrictEqual('/api/pets?tags=somethign%26nothing%3Dtrue%2620%25&limit=hash%23data'); + mock.done(); + }); + }); + + it("should not double encode query params if they're supplied as encoded", () => { + const params = { + tags: encodeURIComponent('somethign¬hing=true'), + limit: encodeURIComponent('hash#data'), + }; + + const mock = nock(petstoreServerUrl) + .get('/pets') + .query(true) + .reply(200, function () { + return { path: this.req.path }; + }); + + return petstoreSdk.findPets(params).then(res => { + expect(res.path).toStrictEqual('/api/pets?tags=somethign%26nothing%3Dtrue&limit=hash%23data'); + mock.done(); + }); + }); + }); }); diff --git a/packages/api/package-lock.json b/packages/api/package-lock.json index c053b361..16f8ef51 100644 --- a/packages/api/package-lock.json +++ b/packages/api/package-lock.json @@ -5,12 +5,13 @@ "requires": true, "packages": { "": { - "version": "3.3.1", + "name": "api", + "version": "3.3.2", "license": "MIT", "dependencies": { "@apidevtools/json-schema-ref-parser": "^9.0.1", "@apidevtools/swagger-parser": "^10.0.1", - "@readme/oas-to-har": "^13.6.0", + "@readme/oas-to-har": "^13.7.2", "datauri": "^4.1.0", "fetch-har": "^5.0.0", "find-cache-dir": "^3.3.1", @@ -1933,9 +1934,9 @@ } }, "node_modules/@readme/oas-to-har": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/@readme/oas-to-har/-/oas-to-har-13.6.1.tgz", - "integrity": "sha512-af56xwomcTw//LyXSu67sNcYTMwptjEITrbySDHltFrbhRx6gY/1zvniXJJm4nrQ/yam9vqCoH+dIOwpjbbSuQ==", + "version": "13.7.2", + "resolved": "https://registry.npmjs.org/@readme/oas-to-har/-/oas-to-har-13.7.2.tgz", + "integrity": "sha512-7Ho0+d4WSW9OPeP/fjdtgRPij1v6YCdMbKEAC0qh//J3xuv6VtpzoEluIeM8sQKWZGKMmBkXp+pE/0pXHJnERQ==", "dependencies": { "@readme/oas-extensions": "^13.6.0", "oas": "^14.0.0", @@ -13600,9 +13601,9 @@ "integrity": "sha512-y7fi0F0mx+DvmEBMq0he+CLbctGRKKeSc/AKicL+Sz6PWoos+kyppKpOLE7ahiJ4RgM+Y3snbkCcmKdsVAdKfQ==" }, "@readme/oas-to-har": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/@readme/oas-to-har/-/oas-to-har-13.6.1.tgz", - "integrity": "sha512-af56xwomcTw//LyXSu67sNcYTMwptjEITrbySDHltFrbhRx6gY/1zvniXJJm4nrQ/yam9vqCoH+dIOwpjbbSuQ==", + "version": "13.7.2", + "resolved": "https://registry.npmjs.org/@readme/oas-to-har/-/oas-to-har-13.7.2.tgz", + "integrity": "sha512-7Ho0+d4WSW9OPeP/fjdtgRPij1v6YCdMbKEAC0qh//J3xuv6VtpzoEluIeM8sQKWZGKMmBkXp+pE/0pXHJnERQ==", "requires": { "@readme/oas-extensions": "^13.6.0", "oas": "^14.0.0", diff --git a/packages/api/package.json b/packages/api/package.json index 5c44e3c4..037775a0 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -25,7 +25,7 @@ "dependencies": { "@apidevtools/json-schema-ref-parser": "^9.0.1", "@apidevtools/swagger-parser": "^10.0.1", - "@readme/oas-to-har": "^13.6.0", + "@readme/oas-to-har": "^13.7.2", "datauri": "^4.1.0", "fetch-har": "^5.0.0", "find-cache-dir": "^3.3.1",