Skip to content

Commit c792210

Browse files
authored
feat: Implement trackEvent api (#636)
* Implement decideForKeys * Add trackEvent method * Update unit tests * Rebase
1 parent 28ac953 commit c792210

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

packages/optimizely-sdk/lib/optimizely/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,6 @@ export default class Optimizely {
16031603
* @param {OptimizelyDecideOptions[]} options An array of options for decision-making.
16041604
* @return {[key: string]: OptimizelyDecision} An object of decision results mapped by flag keys.
16051605
*/
1606-
16071606
decideForKeys(
16081607
user: OptimizelyUserContext,
16091608
keys: string[],

packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,5 +262,27 @@ describe('lib/optimizely_user_context', function() {
262262
assert.deepEqual(decisionMap, fakeDecisionMap);
263263
});
264264
});
265+
266+
describe('#trackEvent', function() {
267+
it('should call track from optimizely client', function() {
268+
fakeOptimizely = {
269+
track: sinon.stub()
270+
};
271+
var eventName = 'myEvent';
272+
var eventTags = { 'eventTag1': 1000 }
273+
var user = new OptimizelyUserContext({
274+
optimizely: fakeOptimizely,
275+
userId,
276+
});
277+
user.trackEvent(eventName, eventTags);
278+
sinon.assert.calledWithExactly(
279+
fakeOptimizely.track,
280+
eventName,
281+
user.getUserId(),
282+
user.getAttributes(),
283+
eventTags,
284+
);
285+
});
286+
});
265287
});
266288
});

packages/optimizely-sdk/lib/optimizely_user_context/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License. *
1515
***************************************************************************/
1616
import Optimizely from '../../lib/optimizely';
17-
import { UserAttributes, OptimizelyDecideOptions } from '../../lib/shared_types';
17+
import { UserAttributes, OptimizelyDecideOptions, EventTags } from '../../lib/shared_types';
1818
import { OptimizelyDecision } from '../optimizely_decision';
1919

2020
export default class OptimizelyUserContext {
@@ -99,4 +99,13 @@ export default class OptimizelyUserContext {
9999

100100
return this.optimizely.decideAll(this, options);
101101
}
102+
103+
/**
104+
* Tracks an event.
105+
* @param {string} eventName The event name.
106+
* @param {EventTags} eventTags An optional map of event tag names to event tag values.
107+
*/
108+
trackEvent(eventName: string, eventTags?: EventTags): void {
109+
this.optimizely.track(eventName, this.userId, this.attributes, eventTags);
110+
}
102111
}

0 commit comments

Comments
 (0)