From a078ef139812413a40876ed2428f8345998fbb5a Mon Sep 17 00:00:00 2001 From: Enes Kutay SEZEN Date: Mon, 24 Mar 2025 23:39:41 +0300 Subject: [PATCH 1/2] Update tests --- spec/src/modules/tracker.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/src/modules/tracker.js b/spec/src/modules/tracker.js index fb07f20b..c58bb31d 100644 --- a/spec/src/modules/tracker.js +++ b/spec/src/modules/tracker.js @@ -693,7 +693,7 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { }; const optionalParameters = { tr: 'click', - groupId: 'All', + groupId: 'all', displayName: 'display-name', itemId: '12345', }; @@ -756,7 +756,7 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { original_query: 'original-query', section: 'Search Suggestions', tr: 'click', - group_id: 'All', + group_id: 'all', display_name: 'display-name', variation_id: '12345-A', item_id: '12345', @@ -3550,7 +3550,7 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { // Response expect(responseParams).to.have.property('method').to.equal('POST'); - expect(responseParams).to.have.property('message').to.equal('conversion type must be one of add_to_wishlist, add_to_cart, like, message, make_offer, read. If you wish to use custom types, please set is_custom_type to true and specify a display_name.'); + expect(responseParams).to.have.property('message').to.equal('Invalid parameters'); done(); }); From 8357dd272bf0b1e2b11f7838eff3b6bd4656af96 Mon Sep 17 00:00:00 2001 From: Enes Kutay SEZEN Date: Mon, 24 Mar 2025 23:47:31 +0300 Subject: [PATCH 2/2] Add slCampaign* to trackAutocompleteSelect --- spec/src/modules/tracker.js | 6 ++++++ src/modules/tracker.js | 40 +++++++++++++++++++++++++++++++------ src/types/tracker.d.ts | 2 ++ 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/spec/src/modules/tracker.js b/spec/src/modules/tracker.js index c58bb31d..4e7f2c06 100644 --- a/spec/src/modules/tracker.js +++ b/spec/src/modules/tracker.js @@ -696,6 +696,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { groupId: 'all', displayName: 'display-name', itemId: '12345', + slCampaignOwner: 'Campaign Man', + slCampaignId: 'Campaign 123', }; const v2Parameters = { variationId: '12345-A', @@ -730,6 +732,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { expect(bodyParams).to.have.property('section').to.deep.equal(requiredParameters.section); expect(bodyParams).to.have.property('item_name').to.equal(term); expect(bodyParams).to.have.property('group_id').to.equal(optionalParameters.groupId); + expect(bodyParams).to.have.property('sl_campaign_id').to.equal(optionalParameters.slCampaignId); + expect(bodyParams).to.have.property('sl_campaign_owner').to.deep.equal(optionalParameters.slCampaignOwner); // Response expect(responseParams).to.have.property('method').to.equal('POST'); @@ -971,6 +975,8 @@ describe(`ConstructorIO - Tracker${bundledDescriptionSuffix}`, () => { group_id: optionalParameters.groupId, display_name: optionalParameters.displayName, }); + expect(requestParams).to.have.property('sl_campaign_owner').to.deep.equal(optionalParameters.slCampaignOwner); + expect(requestParams).to.have.property('sl_campaign_id').to.deep.equal(optionalParameters.slCampaignId); // Response expect(responseParams).to.have.property('method').to.equal('GET'); diff --git a/src/modules/tracker.js b/src/modules/tracker.js index de000a3f..4bd25d63 100644 --- a/src/modules/tracker.js +++ b/src/modules/tracker.js @@ -280,6 +280,8 @@ class Tracker { * @param {string} [parameters.itemId] - Item id of the selected item * @param {string} [parameters.variationId] - Variation id of the selected item * @param {string} [parameters.groupId] - Group identifier of the group to search within. Only required if searching within a group, i.e. "Pumpkin in Canned Goods" + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -294,6 +296,8 @@ class Tracker { * groupId: '88JU230', * itemId: '12345', * variationId: '12345-A', + * slCampaignId: 'Campaign 123', + * slCampaignOwner: 'Store 123', * }, * ); */ @@ -317,6 +321,8 @@ class Tracker { itemId = item_id, variation_id, variationId = variation_id, + slCampaignId, + slCampaignOwner, } = parameters; const queryParams = {}; const bodyParams = { @@ -333,6 +339,14 @@ class Tracker { queryParams.section = section; } + if (slCampaignId) { + bodyParams.sl_campaign_id = slCampaignId; + } + + if (slCampaignOwner) { + bodyParams.sl_campaign_owner = slCampaignOwner; + } + const requestURL = `${baseUrl}${applyParamsAsString(queryParams, this.options)}`; const requestMethod = 'POST'; const requestBody = applyParams(bodyParams, { @@ -372,6 +386,8 @@ class Tracker { * @param {string} [parameters.groupId] - Group identifier of the group to search within. Only required if searching within a group, i.e. "Pumpkin in Canned Goods" * @param {string} [parameters.displayName] - Display name of group of selected item * @param {string} [parameters.itemId] - Item id of the selected item + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -386,6 +402,8 @@ class Tracker { * groupId: '88JU230', * displayName: 'apparel', * itemId: '12345', + * slCampaignId: 'Campaign 123', + * slCampaignOwner: 'Store 123', * }, * ); */ @@ -409,6 +427,8 @@ class Tracker { displayName = display_name, item_id, itemId = item_id, + slCampaignOwner, + slCampaignId, } = parameters; if (originalQuery) { @@ -434,6 +454,14 @@ class Tracker { queryParams.item_id = itemId; } + if (slCampaignId) { + queryParams.sl_campaign_id = slCampaignId; + } + + if (slCampaignOwner) { + queryParams.sl_campaign_owner = slCampaignOwner; + } + this.requests.queue(`${url}${applyParamsAsString(queryParams, this.options)}`, undefined, undefined, networkParameters); this.requests.send(); @@ -737,8 +765,8 @@ class Tracker { * @param {object} [parameters.selectedFilters] - Key - Value map of selected filters * @param {string} [parameters.section] - The section name for the item Ex. "Products" * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -849,8 +877,8 @@ class Tracker { * @param {string} [parameters.itemIsConvertible] - Whether or not an item is available for a conversion * @param {string} [parameters.section] - The section name for the item Ex. "Products" * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} @@ -1557,8 +1585,8 @@ class Tracker { * @param {number} [parameters.numResultsPerPage] - Number of results shown * @param {object} [parameters.selectedFilters] - Selected filters * @param {object} [parameters.analyticsTags] - Pass additional analytics data - * @param {object} [parameters.slCampaignId] - Pass campaign id of sponsored listing - * @param {object} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing + * @param {string} [parameters.slCampaignId] - Pass campaign id of sponsored listing + * @param {string} [parameters.slCampaignOwner] - Pass campaign owner of sponsored listing * @param {object} [networkParameters] - Parameters relevant to the network request * @param {number} [networkParameters.timeout] - Request timeout (in milliseconds) * @returns {(true|Error)} diff --git a/src/types/tracker.d.ts b/src/types/tracker.d.ts index 81ce9d32..d8846715 100644 --- a/src/types/tracker.d.ts +++ b/src/types/tracker.d.ts @@ -45,6 +45,8 @@ declare class Tracker { groupId?: string; displayName?: string; itemId?: string; + slCampaignId?: string; + slCampaignOwner?: string; }, networkParameters?: NetworkParameters ): true | Error;