Skip to content

Commit abd548f

Browse files
authored
feat: log custom event logging for selectPlacement (#52)
1 parent f485b50 commit abd548f

2 files changed

Lines changed: 131 additions & 0 deletions

File tree

src/Rokt-Kit.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
var name = 'Rokt';
1717
var moduleId = 181;
18+
var EVENT_NAME_SELECT_PLACEMENTS = 'selectPlacements';
1819

1920
var constructor = function () {
2021
var self = this;
@@ -258,9 +259,38 @@ var constructor = function () {
258259
attributes: selectPlacementsAttributes,
259260
});
260261

262+
// Log custom event for selectPlacements call
263+
logSelectPlacementsEvent(selectPlacementsAttributes);
264+
261265
return self.launcher.selectPlacements(selectPlacementsOptions);
262266
}
263267

268+
/**
269+
* Logs a custom event when selectPlacements is called
270+
* This enables visibility and troubleshooting
271+
* @param {Object} attributes - The attributes sent to Rokt
272+
*/
273+
function logSelectPlacementsEvent(attributes) {
274+
if (
275+
!window.mParticle ||
276+
typeof window.mParticle.logEvent !== 'function'
277+
) {
278+
return;
279+
}
280+
281+
if (!isObject(attributes)) {
282+
return;
283+
}
284+
285+
var EVENT_TYPE_OTHER = window.mParticle.EventType.Other;
286+
287+
window.mParticle.logEvent(
288+
EVENT_NAME_SELECT_PLACEMENTS,
289+
EVENT_TYPE_OTHER,
290+
attributes
291+
);
292+
}
293+
264294
/**
265295
* Enables optional Integration Launcher extensions before selecting placements
266296
* @param {string} extensionName - Name of the extension to enable

test/src/tests.js

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ describe('Rokt Forwarder', () => {
8888
mParticle.generateHash = function (input) {
8989
return 'hashed-<' + input + '>-value';
9090
};
91+
// Mock for logEvent to capture custom event logging
92+
mParticle.loggedEvents = [];
93+
mParticle.logEvent = function (eventName, eventType, eventAttributes) {
94+
mParticle.loggedEvents.push({
95+
eventName: eventName,
96+
eventType: eventType,
97+
eventAttributes: eventAttributes,
98+
});
99+
};
91100
// -------------------START EDITING BELOW:-----------------------
92101
var MockRoktForwarder = function () {
93102
var self = this;
@@ -756,6 +765,7 @@ describe('Rokt Forwarder', () => {
756765
window.mParticle.Rokt.attachKitCalled = true;
757766
return Promise.resolve();
758767
};
768+
mParticle.loggedEvents = [];
759769
window.mParticle.Rokt.setLocalSessionAttribute = function (
760770
key,
761771
value
@@ -2517,6 +2527,97 @@ describe('Rokt Forwarder', () => {
25172527
);
25182528
});
25192529
});
2530+
2531+
describe('#logSelectPlacementsEvent', () => {
2532+
it('should log a custom event', async () => {
2533+
await window.mParticle.forwarder.init(
2534+
{
2535+
accountId: '123456',
2536+
},
2537+
reportService.cb,
2538+
true,
2539+
null,
2540+
{
2541+
'cached-user-attr': 'cached-value',
2542+
}
2543+
);
2544+
2545+
await window.mParticle.forwarder.selectPlacements({
2546+
identifier: 'test-placement',
2547+
attributes: {
2548+
'new-attr': 'new-value',
2549+
},
2550+
});
2551+
2552+
mParticle.loggedEvents.length.should.equal(1);
2553+
mParticle.loggedEvents[0].eventName.should.equal(
2554+
'selectPlacements'
2555+
);
2556+
mParticle.loggedEvents[0].eventType.should.equal(8); // EventType.Other
2557+
2558+
const eventAttributes =
2559+
mParticle.loggedEvents[0].eventAttributes;
2560+
eventAttributes.should.have.property('mpid');
2561+
});
2562+
2563+
it('should include merged user attributes, identities, and mpid', async () => {
2564+
await window.mParticle.forwarder.init(
2565+
{
2566+
accountId: '123456',
2567+
},
2568+
reportService.cb,
2569+
true,
2570+
null,
2571+
{
2572+
'cached-user-attr': 'cached-value',
2573+
}
2574+
);
2575+
2576+
await window.mParticle.forwarder.selectPlacements({
2577+
identifier: 'test-placement',
2578+
attributes: {
2579+
'new-attr': 'new-value',
2580+
},
2581+
});
2582+
2583+
const eventAttributes =
2584+
mParticle.loggedEvents[0].eventAttributes;
2585+
2586+
// eventAttributes should include merged attributes and mpid directly
2587+
eventAttributes.should.have.property('mpid', '123');
2588+
eventAttributes.should.have.property('new-attr', 'new-value');
2589+
eventAttributes.should.have.property(
2590+
'cached-user-attr',
2591+
'cached-value'
2592+
);
2593+
});
2594+
2595+
it('should skip logging when mParticle.logEvent is not available', async () => {
2596+
var originalLogEvent = window.mParticle.logEvent;
2597+
window.mParticle.logEvent = undefined;
2598+
2599+
await window.mParticle.forwarder.init(
2600+
{
2601+
accountId: '123456',
2602+
},
2603+
reportService.cb,
2604+
true,
2605+
null,
2606+
{}
2607+
);
2608+
2609+
await window.mParticle.forwarder.selectPlacements({
2610+
identifier: 'test-placement',
2611+
attributes: {
2612+
attr: 'value',
2613+
},
2614+
});
2615+
2616+
window.Rokt.selectPlacementsCalled.should.equal(true);
2617+
mParticle.loggedEvents.length.should.equal(0);
2618+
window.mParticle.logEvent = originalLogEvent;
2619+
});
2620+
});
25202621
});
25212622

25222623
describe('#use', () => {

0 commit comments

Comments
 (0)