Skip to content
Merged
22 changes: 19 additions & 3 deletions src/test/parameters.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ describe('Parameters', () => {
expect(response).toEqual(MOCK_RESPONSE);
});

it('warns user when an invalid parameter is passed', async () => {
it('warns user when an unknown parameter is passed', async () => {
const searchClient = new ShopperSearch({
parameters: {
// shortCode is a base URI parameter, not path/query, so it *must* be in the config
Expand All @@ -191,17 +191,33 @@ describe('Parameters', () => {

const options = {
parameters: {
invalidParameter: 'this should prompt a warning',
unknownParam1: 'param1',
unknownParam2: 'param2',
},
body: {type: 'guest'},
};

nock.cleanAll();
nock(`https://${SHORT_CODE}.api.commercecloud.salesforce.com`)
.get(
`/search/shopper-search/v1/organizations/${ORGANIZATION_ID}/product-search`
)
.query({
siteId: SITE_ID,
unknownParam1: 'param1',
unknownParam2: 'param2',
})
.reply(200, MOCK_RESPONSE);

const warnSpy = jest.spyOn(console, 'warn');
const response = await searchClient.productSearch(options);

expect(response).toEqual(MOCK_RESPONSE);
expect(warnSpy).toHaveBeenCalledWith(
'Invalid Parameter for productSearch: invalidParameter'
'Found unknown parameter for productSearch: unknownParam1, adding as query parameter anyway'
);
expect(warnSpy).toHaveBeenCalledWith(
'Found unknown parameter for productSearch: unknownParam2, adding as query parameter anyway'
);
});
});
21 changes: 12 additions & 9 deletions templatesOas/apis.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { doFetch } from "../../helpers/fetchHelper";
import type {
BaseUriParameters,
CompositeParameters,
RequireParametersUnlessAllAreOptional
QueryParameters,
RequireParametersUnlessAllAreOptional,
} from "../../helpers/types";
import TemplateURL from "../../templateUrl";
import { USER_AGENT_HEADER, USER_AGENT_VALUE } from "../../version";
Expand Down Expand Up @@ -217,7 +218,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/isHeaderParam}}
{{/isBodyParam}}
{{/allParams}}
} & { [key in `c_${string}`]: any }, ConfigParameters>
} & QueryParameters, ConfigParameters>
headers?: { [key: string]: string },
{{#hasBodyParam}}
{{#bodyParam}}
Expand Down Expand Up @@ -282,7 +283,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/isHeaderParam}}
{{/isBodyParam}}
{{/allParams}}
} & { [key in `c_${string}`]: any }, ConfigParameters>
} & QueryParameters, ConfigParameters>
headers?: { [key: string]: string },
{{#hasBodyParam}}
{{#bodyParam}}
Expand Down Expand Up @@ -348,7 +349,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/isHeaderParam}}
{{/isBodyParam}}
{{/allParams}}
} & { [key in `c_${string}`]: any }, ConfigParameters>,
} & QueryParameters, ConfigParameters>,
headers?: { [key: string]: string },
{{#hasBodyParam}}
{{#bodyParam}}
Expand Down Expand Up @@ -390,7 +391,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/required}}
{{/pathParams}}

const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & { [key in `c_${string}`]: any } = {};
const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & QueryParameters = {};

{{#queryParams}}
if (optionParams["{{paramName}}"] !== undefined) {
Expand All @@ -406,10 +407,12 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came
{{/queryParams}}

Object.keys(optionParams).forEach((key) => {
if(key.startsWith('c_') && optionParams[key as keyof typeof optionParams] !== undefined) {
queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams]
} 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;
}
})

Expand Down
Loading