Skip to content

Commit

Permalink
feat: remove consent from db-config and add store sales to integratio…
Browse files Browse the repository at this point in the history
…ns object
  • Loading branch information
ItsSudip committed Feb 18, 2025
1 parent c272267 commit 7ef4b50
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 197 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,16 @@ const getConversions = (message, metadata, { Config }, event, conversionType) =>
payload = convertedPayload.payload;
endpoint = convertedPayload.endpoint;
} else if (conversionType === 'store') {
payload = getStoreConversionPayload(message, Config, filteredCustomerId);
payload = getStoreConversionPayload(
message,
Config,
filteredCustomerId,
eventLevelConsentsData,
);
endpoint = STORE_CONVERSION_CONFIG.replace(':customerId', filteredCustomerId);
} else {
// call conversions
payload = getCallConversionPayload(message, Config, eventLevelConsentsData);
payload = getCallConversionPayload(message, eventLevelConsentsData);
endpoint = CALL_CONVERSION.replace(':customerId', filteredCustomerId);
}

Expand Down
18 changes: 7 additions & 11 deletions src/v0/destinations/google_adwords_offline_conversions/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -227,22 +227,18 @@ function getExisitingUserIdentifier(userIdentifierInfo, defaultUserIdentifier) {
return result;
}

const getCallConversionPayload = (message, Config, eventLevelConsentsData) => {
const getCallConversionPayload = (message, eventLevelConsentsData) => {
const payload = constructPayload(message, trackCallConversionsMapping);
// here conversions[0] should be present because there are some mandatory properties mapped in the mapping json.
payload.conversions[0].consent = finaliseConsent(
consentConfigMap,
eventLevelConsentsData,
Config,
);
payload.conversions[0].consent = finaliseConsent(consentConfigMap, eventLevelConsentsData);
return payload;
};

/**
* This Function create the add conversion payload
* and returns the payload
*/
const getAddConversionPayload = (message, Config) => {
const getAddConversionPayload = (message, Config, eventLevelConsentsData) => {
const { properties } = message;
const { validateOnly, hashUserIdentifier, defaultUserIdentifier } = Config;
const payload = constructPayload(message, trackAddStoreConversionsMapping);
Expand Down Expand Up @@ -299,19 +295,19 @@ const getAddConversionPayload = (message, Config) => {
}
}
// add consent support for store conversions. Note: No event level consent supported.
const consentObject = finaliseConsent(consentConfigMap, {}, Config);
const consentObject = finaliseConsent(consentConfigMap, eventLevelConsentsData);
// create property should be present because there are some mandatory properties mapped in the mapping json.
set(payload, 'operations.create.consent', consentObject);
return payload;
};

const getStoreConversionPayload = (message, Config, event) => {
const getStoreConversionPayload = (message, Config, event, eventLevelConsentsData) => {
const { validateOnly } = Config;
const payload = {
event,
isStoreConversion: true,
createJobPayload: getCreateJobPayload(message),
addConversionPayload: getAddConversionPayload(message, Config),
addConversionPayload: getAddConversionPayload(message, Config, eventLevelConsentsData),
executeJobPayload: { validate_only: validateOnly },
};
return payload;
Expand Down Expand Up @@ -438,7 +434,7 @@ const getClickConversionPayloadAndEndpoint = (
}

// add consent support for click conversions
const consentObject = finaliseConsent(consentConfigMap, eventLevelConsent, Config);
const consentObject = finaliseConsent(consentConfigMap, eventLevelConsent);
// here conversions[0] is expected to be present there are some mandatory properties mapped in the mapping json.
set(payload, 'conversions[0].consent', consentObject);
payload.conversions[0] = updateConversion(payload.conversions[0]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,33 +317,25 @@ describe('getConsentsDataFromIntegrationObj', () => {
});

describe('getCallConversionPayload', () => {
it('should call conversion payload with consent object', () => {
it('should call conversion payload with consent object and set default consent for adUserData', () => {
const message = {
properties: {
callerId: '1234',
callStartDateTime: '2022-01-01 12:32:45-08:00',
conversionDateTime: '2022-01-01 12:32:45-08:00',
},
};
const result = getCallConversionPayload(
message,
{
userDataConsent: 'GRANTED',
personalizationConsent: 'DENIED',
},
{
adUserData: 'GRANTED',
adPersonalization: 'GRANTED',
},
);
const result = getCallConversionPayload(message, {
adPersonalization: 'GRANTED',
});
expect(result).toEqual({
conversions: [
{
callStartDateTime: '2022-01-01 12:32:45-08:00',
callerId: '1234',
consent: {
adPersonalization: 'GRANTED',
adUserData: 'GRANTED',
adUserData: 'UNSPECIFIED',
},
conversionDateTime: '2022-01-01 12:32:45-08:00',
},
Expand All @@ -358,14 +350,10 @@ describe('getCallConversionPayload', () => {
conversionDateTime: '2022-01-01 12:32:45-08:00',
},
};
const result = getCallConversionPayload(
message,
{
userDataConsent: 'GRANTED',
personalizationConsent: 'DENIED',
},
{},
);
const result = getCallConversionPayload(message, {
adUserData: 'GRANTED',
adPersonalization: 'DENIED',
});
expect(result).toEqual({
conversions: [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5422,7 +5422,7 @@ export const data = [
},
{
name: 'google_adwords_offline_conversions',
description: 'Test 26 : store conversion consent mapped from UI config',
description: 'Test 27 : store conversion consent mapped through integrations object',
feature: 'processor',
module: 'destination',
version: 'v0',
Expand Down Expand Up @@ -5452,166 +5452,10 @@ export const data = [
quantity: 123,
},
integrations: {
All: true,
},
name: 'ApplicationLoaded',
sentAt: '2019-10-14T11:15:53.296Z',
},
metadata: {
secret: {
access_token: 'abcd1234',
refresh_token: 'efgh5678',
developer_token: 'ijkl91011',
},
},
destination: {
Config: {
isCustomerAllowed: false,
customerId: '111-222-3333',
subAccount: true,
loginCustomerId: 'login-customer-id',
userDataConsent: 'GRANTED',
personalizationConsent: 'DENIED',
eventsToOfflineConversionsTypeMapping: [
{
from: 'Product Clicked',
to: 'store',
},
],
eventsToConversionsNamesMapping: [
{
from: 'Product Clicked',
to: 'Sign-up - click',
},
],
hashUserIdentifier: true,
defaultUserIdentifier: 'phone',
validateOnly: false,
rudderAccountId: '2EOknn1JNH7WK1MfNkgr4t3u4fGYKkRK',
},
},
},
],
},
},
output: {
response: {
status: 200,
body: [
{
output: {
version: '1',
type: 'REST',
method: 'POST',
endpoint:
'https://googleads.googleapis.com/v17/customers/1112223333/offlineUserDataJobs',
headers: {
Authorization: 'Bearer abcd1234',
'Content-Type': 'application/json',
'developer-token': 'ijkl91011',
'login-customer-id': 'logincustomerid',
},
params: {
event: 'Sign-up - click',
customerId: '1112223333',
},
body: {
JSON: {
event: '1112223333',
isStoreConversion: true,
createJobPayload: {
job: {
type: 'STORE_SALES_UPLOAD_FIRST_PARTY',
storeSalesMetadata: {
loyaltyFraction: '1',
transaction_upload_fraction: '1',
},
},
},
addConversionPayload: {
operations: {
create: {
consent: {
adPersonalization: 'DENIED',
adUserData: 'GRANTED',
},
transaction_attribute: {
store_attribute: {
store_code: 'store code',
},
transaction_amount_micros: '100000000',
currency_code: 'INR',
transaction_date_time: '2019-10-14 16:45:18+05:30',
},
userIdentifiers: [{}],
},
},
enable_partial_failure: false,
enable_warnings: false,
validate_only: false,
},
executeJobPayload: {
validate_only: false,
},
},
JSON_ARRAY: {},
XML: {},
FORM: {},
},
files: {},
userId: '',
},
metadata: {
secret: {
access_token: 'abcd1234',
refresh_token: 'efgh5678',
developer_token: 'ijkl91011',
},
},
statusCode: 200,
},
],
},
},
mockFns: timestampMock,
},
{
name: 'google_adwords_offline_conversions',
description:
'Test 27 : store conversion consent mapped from UI config even though integration object is present',
feature: 'processor',
module: 'destination',
version: 'v0',
input: {
request: {
body: [
{
message: {
channel: 'web',
context: {
traits: {},
},
event: 'Product Clicked',
type: 'track',
messageId: '5e10d13a-bf9a-44bf-b884-43a9e591ea71',
anonymousId: '00000000000000000000000000',
userId: '12345',
properties: {
item_id: 'item id',
merchant_id: 'merchant id',
currency: 'INR',
revenue: '100',
store_code: 'store code',
gclid: 'gclid',
conversionDateTime: '2019-10-14T11:15:18.299Z',
product_id: '123445',
quantity: 123,
},
integrations: {
google_adwords_offline_conversion: {
consent: {
adUserdata: 'UNSPECIFIED',
adPersonalization: 'GRANTED',
GOOGLE_ADWORDS_OFFLINE_CONVERSIONS: {
consents: {
adUserData: 'GRANTED',
adPersonalization: 'DENIED',
},
},
},
Expand All @@ -5631,8 +5475,6 @@ export const data = [
customerId: '111-222-3333',
subAccount: true,
loginCustomerId: 'login-customer-id',
userDataConsent: 'GRANTED',
personalizationConsent: 'DENIED',
eventsToOfflineConversionsTypeMapping: [
{
from: 'Product Clicked',
Expand Down

0 comments on commit 7ef4b50

Please sign in to comment.