diff --git a/src/test/parameters.test.ts b/src/test/parameters.test.ts index 71284c72..054e4391 100644 --- a/src/test/parameters.test.ts +++ b/src/test/parameters.test.ts @@ -52,7 +52,7 @@ describe("Parameters", () => { expect(response).to.be.deep.equal(MOCK_RESPONSE); }); - it("warns user when invalid param is passed", async () => { + it("warns user when an unknown param is passed", async () => { const productClient = new ShopperProducts.ShopperProducts({ parameters: { clientId: CLIENT_ID, @@ -65,10 +65,11 @@ describe("Parameters", () => { const options = { parameters: { ids: ["ids"], - invalidQueryParam: "invalid_param", + unknownParam1: "param1", + unknownParam2: "param2", }, }; - + nock.cleanAll(); nock(`https://${SHORT_CODE}.api.commercecloud.salesforce.com`) .get( `/product/shopper-products/v1/organizations/${ORGANIZATION_ID}/products` @@ -76,6 +77,8 @@ describe("Parameters", () => { .query({ siteId: SITE_ID, ids: "ids", + unknownParam1: "param1", + unknownParam2: "param2", }) .reply(200, MOCK_RESPONSE); @@ -84,7 +87,14 @@ describe("Parameters", () => { expect(response).to.be.deep.equal(MOCK_RESPONSE); expect( - warnSpy.calledWith("Invalid Parameter for getProducts: invalidQueryParam") + warnSpy.calledWith( + "Found unknown parameter for getProducts: unknownParam1, adding as query parameter anyway" + ) + ).to.be.true; + expect( + warnSpy.calledWith( + "Found unknown parameter for getProducts: unknownParam2, adding as query parameter anyway" + ) ).to.be.true; }); }); diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index 82959d10..ebb01766 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -13,6 +13,7 @@ import { defaultBaseUri } from "../runtime"; import { USER_AGENT_HEADER, USER_AGENT_VALUE } from "../../version"; import type { CompositeParameters, + QueryParameters, RequireParametersUnlessAllAreOptional } from "../../types"; @@ -161,7 +162,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, CommonParameters>, + } & QueryParameters, CommonParameters>, retrySettings?: OperationOptions, fetchOptions?: RequestInit, headers?: { [key: string]: string }, @@ -230,7 +231,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, CommonParameters>, + } & QueryParameters, CommonParameters>, retrySettings?: OperationOptions, fetchOptions?: RequestInit, headers?: { [key: string]: string }, @@ -300,7 +301,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, CommonParameters>, + } & QueryParameters, CommonParameters>, retrySettings?: OperationOptions, fetchOptions?: RequestInit, headers?: { [key: string]: string }, @@ -341,7 +342,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/required}} {{/pathParams}} - const queryParams: Partial<{ [key in `c_${string}`]: any }> = {}; + const queryParams: QueryParameters = {}; {{#queryParams}} if (optionParams["{{paramName}}"] !== undefined) { @@ -357,10 +358,12 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/queryParams}} Object.keys(optionParams).forEach((key) => { - if(key.startsWith('c_') && optionParams[key] !== undefined) { - queryParams[key] = optionParams[key] - } else if(!queryParams.hasOwnProperty(key) && !pathParams.hasOwnProperty(key)) { - console.warn(`Invalid Parameter for {{{nickname}}}: ${key}`) + const paramValue = optionParams[key as keyof typeof optionParams]; + if(paramValue !== undefined && (key.startsWith('c_') || !((key in queryParams) || (key in pathParams)))) { + if(!key.startsWith('c_')) { + console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`); + } + queryParams[key as keyof typeof queryParams] = paramValue; } })