Skip to content

Commit a7a1434

Browse files
authored
Merge pull request #257 from mixpanel/zihe-fix-opt-in-track
fix: opt in tracking issue during initialize
2 parents 6d8da0b + 9688d02 commit a7a1434

File tree

3 files changed

+66
-7
lines changed

3 files changed

+66
-7
lines changed

__tests__/main.test.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,54 @@ describe("MixpanelMain", () => {
153153
).toHaveBeenCalledWith(token);
154154
});
155155

156+
it("should not track if initialize with optOutTrackingDefault being true", async () => {
157+
const trackAutomaticEvents = false;
158+
const optOutTrackingDefault = true;
159+
const superProperties = {superProp1: "value1", superProp2: "value2"};
160+
const serverURL = "https://api.mixpanel.com";
161+
162+
163+
await mixpanelMain.initialize(
164+
token,
165+
trackAutomaticEvents,
166+
optOutTrackingDefault,
167+
superProperties,
168+
serverURL
169+
);
170+
171+
const eventName = "Test Event";
172+
const eventProperties = {prop1: "value1", prop2: "value2"};
173+
174+
expect(
175+
mixpanelMain.mixpanelPersistent.updateOptedOut
176+
).toHaveBeenCalledWith(token, true);
177+
178+
mixpanelMain.mixpanelPersistent.getOptedOut.mockReturnValue(true);
179+
await mixpanelMain.track(token, eventName, eventProperties);
180+
expect(mixpanelMain.core.addToMixpanelQueue).not.toHaveBeenCalled();
181+
});
182+
183+
it("should track if initialize with optOutTrackingDefault being false", async () => {
184+
const trackAutomaticEvents = false;
185+
const optOutTrackingDefault = false;
186+
const superProperties = {superProp1: "value1", superProp2: "value2"};
187+
const serverURL = "https://api.mixpanel.com";
188+
console.info("here111");
189+
await mixpanelMain.initialize(
190+
token,
191+
trackAutomaticEvents,
192+
optOutTrackingDefault,
193+
superProperties,
194+
serverURL
195+
);
196+
mixpanelMain.setLoggingEnabled(token, true);
197+
const eventName = "Test Event";
198+
const eventProperties = {prop1: "value1", prop2: "value2"};
199+
200+
await mixpanelMain.track(token, eventName, eventProperties);
201+
expect(mixpanelMain.core.addToMixpanelQueue).toHaveBeenCalled();
202+
});
203+
156204
it("register super properties should update properties", async () => {
157205
mixpanelMain.registerSuperProperties(token, {superProp3: "value3"});
158206
expect(

javascript/mixpanel-main.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default class MixpanelMain {
3030
await this.optOutTracking(token);
3131
return;
3232
} else {
33-
await this.optInTracking(token);
33+
await this._setOptedOutTrackingFlag(token, false);
3434
}
3535

3636
this.setServerURL(token, serverURL);
@@ -71,6 +71,14 @@ export default class MixpanelMain {
7171
}
7272

7373
async track(token, eventName, properties) {
74+
if (this.mixpanelPersistent.getOptedOut(token)) {
75+
MixpanelLogger.log(
76+
token,
77+
`User has opted out of tracking, skipping tracking.`
78+
);
79+
return;
80+
}
81+
7482
MixpanelLogger.log(
7583
token,
7684
`Track '${eventName}' with properties`,
@@ -133,19 +141,22 @@ export default class MixpanelMain {
133141
}
134142

135143
async optOutTracking(token) {
136-
this.mixpanelPersistent.updateOptedOut(token, true);
137-
await this.mixpanelPersistent.persistOptedOut(token);
144+
await this._setOptedOutTrackingFlag(token, true);
138145
MixpanelLogger.log(token, "User has opted out of tracking");
139146
await this.mixpanelPersistent.reset(token);
140147
}
141148

142149
async optInTracking(token) {
143-
this.mixpanelPersistent.updateOptedOut(token, false);
144-
await this.mixpanelPersistent.persistOptedOut(token);
150+
await this._setOptedOutTrackingFlag(token, false);
145151
MixpanelLogger.log(token, "User has opted in to tracking");
146152
await this.track(token, "$opt_in");
147153
}
148154

155+
async _setOptedOutTrackingFlag(token, optedOut) {
156+
this.mixpanelPersistent.updateOptedOut(token, optedOut);
157+
await this.mixpanelPersistent.persistOptedOut(token);
158+
}
159+
149160
hasOptedOutTracking(token) {
150161
return this.mixpanelPersistent.getOptOut(token);
151162
}

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)