diff --git a/spec/src/modules/recommendations.js b/spec/src/modules/recommendations.js index 623db82f..863f68e9 100644 --- a/spec/src/modules/recommendations.js +++ b/spec/src/modules/recommendations.js @@ -232,6 +232,26 @@ describe(`ConstructorIO - Recommendations${bundledDescriptionSuffix}`, () => { }); }); + it('Should return a response with valid itemIds, and fmtOptions', (done) => { + const hiddenFields = ['testField', 'hiddenField2']; + const fmtOptions = { hidden_fields: hiddenFields }; + const { recommendations } = new ConstructorIO({ + apiKey: testApiKey, + fetch: fetchSpy, + }); + + recommendations.getRecommendations(podId, { itemIds, fmtOptions }).then((res) => { + const requestedUrlParams = helpers.extractUrlParamsFromFetch(fetchSpy); + + expect(res).to.have.property('request').to.be.an('object'); + expect(res).to.have.property('response').to.be.an('object'); + expect(res).to.have.property('result_id').to.be.an('string'); + expect(res.request.fmt_options.hidden_fields).to.eql(hiddenFields); + expect(requestedUrlParams.fmt_options).to.have.property('hidden_fields').to.eql(hiddenFields); + done(); + }); + }); + it('Should return a response with valid itemIds, and numResults', (done) => { const numResults = 2; const { recommendations } = new ConstructorIO({ diff --git a/src/modules/recommendations.js b/src/modules/recommendations.js index 8c2dfe0f..1ea7af7f 100644 --- a/src/modules/recommendations.js +++ b/src/modules/recommendations.js @@ -36,6 +36,7 @@ function createRecommendationsUrl(podId, parameters, options) { variationsMap, hiddenFields, preFilterExpression, + fmtOptions, } = parameters; // Pull num results number from parameters @@ -63,6 +64,11 @@ function createRecommendationsUrl(podId, parameters, options) { queryParams.filters = filters; } + // Pull format options from parameters + if (fmtOptions) { + queryParams.fmt_options = fmtOptions; + } + // Pull hidden fields from parameters if (hiddenFields) { if (queryParams.fmt_options) { @@ -117,6 +123,7 @@ class Recommendations { * @param {object} [parameters.filters] - Key / value mapping of filters used to refine results * @param {object} [parameters.variationsMap] - The variations map object to aggregate variations. Please refer to https://docs.constructor.com/reference/shared-variations-mapping for details * @param {object} [parameters.preFilterExpression] - Faceting expression to scope search results. Please refer to https://docs.constructor.com/reference/configuration-collections + * @param {object} [parameters.fmtOptions] - An object containing options to format different aspects of the response. Please refer to https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details * @param {string[]} [parameters.hiddenFields] - Hidden metadata fields to return * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) diff --git a/src/types/recommendations.d.ts b/src/types/recommendations.d.ts index 5c0a997a..9e0cd33c 100644 --- a/src/types/recommendations.d.ts +++ b/src/types/recommendations.d.ts @@ -1,4 +1,4 @@ -import { ConstructorClientOptions, NetworkParameters, VariationsMap, FilterExpression } from '.'; +import { ConstructorClientOptions, NetworkParameters, VariationsMap, FilterExpression, FmtOptions } from '.'; import EventDispatcher from './event-dispatcher'; export default Recommendations; @@ -12,6 +12,7 @@ export interface RecommendationsParameters { variationsMap?: VariationsMap; hiddenFields?: string[]; preFilterExpression?: FilterExpression; + fmtOptions?: FmtOptions; } declare class Recommendations {