Skip to content

Commit 9995f09

Browse files
authored
feat: send set_user_attributes event (#82)
1 parent 99b2f53 commit 9995f09

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed

src/Rokt-Kit.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,12 @@ var constructor = function () {
642642

643643
function setUserAttribute(key, value) {
644644
self.userAttributes[key] = value;
645+
_sendEventStream(
646+
_buildIdentityEvent(
647+
'set_user_attributes',
648+
self.filters.filteredUser || {}
649+
)
650+
);
645651
}
646652

647653
function removeUserAttribute(key) {

test/src/tests.js

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3111,6 +3111,128 @@ describe('Rokt Forwarder', () => {
31113111
'test-attribute': 'test-value',
31123112
});
31133113
});
3114+
3115+
describe('event stream', () => {
3116+
beforeEach(() => {
3117+
window.mParticle.forwarder.eventStreamQueue = [];
3118+
window.mParticle.sessionManager = {
3119+
getSession: function () {
3120+
return 'test-mp-session-id';
3121+
},
3122+
};
3123+
});
3124+
3125+
afterEach(() => {
3126+
delete window.Rokt.__event_stream__;
3127+
window.mParticle.forwarder.eventStreamQueue = [];
3128+
});
3129+
3130+
it('should send a set_user_attributes event to window.Rokt.__event_stream__', () => {
3131+
var receivedEvents = [];
3132+
window.Rokt.__event_stream__ = function (event) {
3133+
receivedEvents.push(event);
3134+
};
3135+
3136+
window.mParticle.forwarder.setUserAttribute(
3137+
'test-attribute',
3138+
'test-value'
3139+
);
3140+
3141+
receivedEvents.length.should.equal(1);
3142+
receivedEvents[0].EventName.should.equal('set_user_attributes');
3143+
receivedEvents[0].EventDataType.should.equal(14);
3144+
});
3145+
3146+
it('should include updated UserAttributes in the event', () => {
3147+
var receivedEvents = [];
3148+
window.Rokt.__event_stream__ = function (event) {
3149+
receivedEvents.push(event);
3150+
};
3151+
3152+
window.mParticle.forwarder.setUserAttribute(
3153+
'new-attr',
3154+
'new-value'
3155+
);
3156+
3157+
receivedEvents[0].UserAttributes.should.deepEqual({
3158+
'new-attr': 'new-value',
3159+
});
3160+
});
3161+
3162+
it('should include MPID from filteredUser and SessionId from sessionManager', () => {
3163+
var receivedEvents = [];
3164+
window.Rokt.__event_stream__ = function (event) {
3165+
receivedEvents.push(event);
3166+
};
3167+
3168+
window.mParticle.forwarder.filters.filteredUser = {
3169+
getMPID: function () {
3170+
return 'attr-mpid-123';
3171+
},
3172+
getUserIdentities: function () {
3173+
return {
3174+
userIdentities: { email: 'user@example.com' },
3175+
};
3176+
},
3177+
};
3178+
3179+
window.mParticle.forwarder.setUserAttribute('k', 'v');
3180+
3181+
receivedEvents[0].MPID.should.equal('attr-mpid-123');
3182+
receivedEvents[0].SessionId.should.equal('test-mp-session-id');
3183+
receivedEvents[0].UserIdentities.should.deepEqual({
3184+
email: 'user@example.com',
3185+
});
3186+
});
3187+
3188+
it('should include null MPID and null UserIdentities when filteredUser is not set', () => {
3189+
var receivedEvents = [];
3190+
window.Rokt.__event_stream__ = function (event) {
3191+
receivedEvents.push(event);
3192+
};
3193+
3194+
window.mParticle.forwarder.filters.filteredUser = null;
3195+
window.mParticle.forwarder.setUserAttribute('k', 'v');
3196+
3197+
(receivedEvents[0].MPID === null).should.be.true();
3198+
(receivedEvents[0].UserIdentities === null).should.be.true();
3199+
});
3200+
3201+
it('should queue event when window.Rokt.__event_stream__ is not available', () => {
3202+
window.mParticle.forwarder.setUserAttribute(
3203+
'queued-attr',
3204+
'queued-value'
3205+
);
3206+
3207+
window.mParticle.forwarder.eventStreamQueue.length.should.equal(
3208+
1
3209+
);
3210+
window.mParticle.forwarder.eventStreamQueue[0].EventName.should.equal(
3211+
'set_user_attributes'
3212+
);
3213+
window.mParticle.forwarder.eventStreamQueue[0].EventDataType.should.equal(
3214+
14
3215+
);
3216+
});
3217+
3218+
it('should not throw when window.Rokt is undefined', () => {
3219+
var savedRokt = window.Rokt;
3220+
window.Rokt = undefined;
3221+
3222+
(function () {
3223+
window.mParticle.forwarder.setUserAttribute('k', 'v');
3224+
}).should.not.throw();
3225+
3226+
window.mParticle.forwarder.eventStreamQueue.length.should.equal(
3227+
1
3228+
);
3229+
window.mParticle.forwarder.eventStreamQueue[0].EventName.should.equal(
3230+
'set_user_attributes'
3231+
);
3232+
3233+
window.Rokt = savedRokt;
3234+
});
3235+
});
31143236
});
31153237

31163238
describe('#removeUserAttribute', () => {

0 commit comments

Comments
 (0)