diff --git a/__tests__/main.test.js b/__tests__/main.test.js index 9a6910db..9ec8d811 100644 --- a/__tests__/main.test.js +++ b/__tests__/main.test.js @@ -153,6 +153,54 @@ describe("MixpanelMain", () => { ).toHaveBeenCalledWith(token); }); + it("should not track if initialize with optOutTrackingDefault being true", async () => { + const trackAutomaticEvents = false; + const optOutTrackingDefault = true; + const superProperties = {superProp1: "value1", superProp2: "value2"}; + const serverURL = "https://api.mixpanel.com"; + + + await mixpanelMain.initialize( + token, + trackAutomaticEvents, + optOutTrackingDefault, + superProperties, + serverURL + ); + + const eventName = "Test Event"; + const eventProperties = {prop1: "value1", prop2: "value2"}; + + expect( + mixpanelMain.mixpanelPersistent.updateOptedOut + ).toHaveBeenCalledWith(token, true); + + mixpanelMain.mixpanelPersistent.getOptedOut.mockReturnValue(true); + await mixpanelMain.track(token, eventName, eventProperties); + expect(mixpanelMain.core.addToMixpanelQueue).not.toHaveBeenCalled(); + }); + + it("should track if initialize with optOutTrackingDefault being false", async () => { + const trackAutomaticEvents = false; + const optOutTrackingDefault = false; + const superProperties = {superProp1: "value1", superProp2: "value2"}; + const serverURL = "https://api.mixpanel.com"; + console.info("here111"); + await mixpanelMain.initialize( + token, + trackAutomaticEvents, + optOutTrackingDefault, + superProperties, + serverURL + ); + mixpanelMain.setLoggingEnabled(token, true); + const eventName = "Test Event"; + const eventProperties = {prop1: "value1", prop2: "value2"}; + + await mixpanelMain.track(token, eventName, eventProperties); + expect(mixpanelMain.core.addToMixpanelQueue).toHaveBeenCalled(); + }); + it("register super properties should update properties", async () => { mixpanelMain.registerSuperProperties(token, {superProp3: "value3"}); expect( diff --git a/javascript/mixpanel-main.js b/javascript/mixpanel-main.js index a2217c1c..701c5ab0 100644 --- a/javascript/mixpanel-main.js +++ b/javascript/mixpanel-main.js @@ -30,7 +30,7 @@ export default class MixpanelMain { await this.optOutTracking(token); return; } else { - await this.optInTracking(token); + await this._setOptedOutTrackingFlag(token, false); } this.setServerURL(token, serverURL); @@ -71,6 +71,14 @@ export default class MixpanelMain { } async track(token, eventName, properties) { + if (this.mixpanelPersistent.getOptedOut(token)) { + MixpanelLogger.log( + token, + `User has opted out of tracking, skipping tracking.` + ); + return; + } + MixpanelLogger.log( token, `Track '${eventName}' with properties`, @@ -133,19 +141,22 @@ export default class MixpanelMain { } async optOutTracking(token) { - this.mixpanelPersistent.updateOptedOut(token, true); - await this.mixpanelPersistent.persistOptedOut(token); + await this._setOptedOutTrackingFlag(token, true); MixpanelLogger.log(token, "User has opted out of tracking"); await this.mixpanelPersistent.reset(token); } async optInTracking(token) { - this.mixpanelPersistent.updateOptedOut(token, false); - await this.mixpanelPersistent.persistOptedOut(token); + await this._setOptedOutTrackingFlag(token, false); MixpanelLogger.log(token, "User has opted in to tracking"); await this.track(token, "$opt_in"); } + async _setOptedOutTrackingFlag(token, optedOut) { + this.mixpanelPersistent.updateOptedOut(token, optedOut); + await this.mixpanelPersistent.persistOptedOut(token); + } + hasOptedOutTracking(token) { return this.mixpanelPersistent.getOptOut(token); } diff --git a/package-lock.json b/package-lock.json index 944f6465..74c789cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mixpanel-react-native", - "version": "3.0.3", + "version": "3.0.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mixpanel-react-native", - "version": "3.0.3", + "version": "3.0.5", "license": "Apache-2.0", "dependencies": { "@react-native-async-storage/async-storage": "^1.21.0",