Skip to content

Commit 56e96a2

Browse files
committed
refactor: added getPrivacyFlag, and updated tests for persistence
1 parent 4b3f250 commit 56e96a2

3 files changed

Lines changed: 39 additions & 23 deletions

File tree

src/persistence.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default function _Persistence(mpInstance) {
3939
if (!mpInstance._Store.isLocalStorageAvailable) {
4040
mpInstance._Store.SDKConfig.useCookieStorage = true;
4141
}
42-
if (!mpInstance._Store.getNoFunctional()) {
42+
if (!mpInstance._Store.getPrivacyFlag('SDKState')) {
4343
// https://go.mparticle.com/work/SQDSDKS-6046
4444
if (mpInstance._Store.isLocalStorageAvailable) {
4545
storage = window.localStorage;
@@ -115,7 +115,7 @@ export default function _Persistence(mpInstance) {
115115
'Error loading products in initialization: ' + e
116116
);
117117
}
118-
if (!mpInstance._Store.getNoFunctional()) {
118+
if (!mpInstance._Store.getPrivacyFlag('SDKState')) {
119119
// https://go.mparticle.com/work/SQDSDKS-6046
120120
// Stores all non-current user MPID information into the store
121121
for (var key in allData) {
@@ -145,7 +145,7 @@ export default function _Persistence(mpInstance) {
145145

146146
this.update = function() {
147147
if (!mpInstance._Store.webviewBridgeEnabled) {
148-
if (mpInstance._Store.getNoFunctional()) {
148+
if (mpInstance._Store.getPrivacyFlag('SDKState')) {
149149
self.setProductStorage();
150150
return;
151151
}
@@ -980,7 +980,7 @@ export default function _Persistence(mpInstance) {
980980

981981
// https://go.mparticle.com/work/SQDSDKS-6021
982982
this.savePersistence = function(persistence) {
983-
if (mpInstance._Store.getNoFunctional()) {
983+
if (mpInstance._Store.getPrivacyFlag('SDKState')) {
984984
return;
985985
}
986986
var encodedPersistence = self.encodePersistence(
@@ -1027,7 +1027,7 @@ export default function _Persistence(mpInstance) {
10271027
};
10281028

10291029
this.getPersistence = function() {
1030-
if (mpInstance._Store.getNoFunctional()) {
1030+
if (mpInstance._Store.getPrivacyFlag('SDKState')) {
10311031
return null;
10321032
}
10331033
var persistence = this.useLocalStorage()

test/jest/persistence.spec.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ describe('Persistence store', () => {
99
beforeEach(() => {
1010
mockMPInstance = {
1111
_Helpers: {
12-
createMainStorageName: () => 'mprtcl-v4_ws',
13-
createProductStorageName: () => 'mprtcl-prodv4_ws',
12+
createMainStorageName: () => 'mprtcl-v4',
13+
createProductStorageName: () => 'mprtcl-prodv4',
1414
Validators: { isFunction: () => true },
1515
extend: Object.assign,
1616
},
@@ -19,8 +19,13 @@ describe('Persistence store', () => {
1919
},
2020
_Persistence: {
2121
setCookie: jest.fn(),
22-
setLocalStorage: jest.fn(),
23-
setProductStorage: jest.fn(),
22+
setLocalStorage: jest.fn(() => {
23+
mockMPInstance._Persistence.setProductStorage();
24+
window.localStorage.setItem('mprtcl-v4', 'local-storage');
25+
}),
26+
setProductStorage: jest.fn(() => {
27+
window.localStorage.setItem(encodeURIComponent('mprtcl-prodv4'), 'product-storage');
28+
}),
2429
update: function () {
2530
if (store.webviewBridgeEnabled) {
2631
return;
@@ -47,6 +52,8 @@ describe('Persistence store', () => {
4752

4853
store = {} as IStore;
4954
Store.call(store, {} as SDKInitConfig, mockMPInstance, 'apikey');
55+
window.localStorage.removeItem('mprtcl-v4');
56+
window.localStorage.removeItem(encodeURIComponent('mprtcl-prodv4'));
5057
});
5158

5259
describe('#noFunctional privacy flag', () => {
@@ -56,26 +63,28 @@ describe('Persistence store', () => {
5663
store.webviewBridgeEnabled = false;
5764
});
5865

59-
it('should NOT write to cookie when useCookieStorage is true', () => {
66+
it('should NOT write to cookie and localStorage when useCookieStorage is true', () => {
6067
store.SDKConfig.useCookieStorage = true;
61-
jest.clearAllMocks();
6268

6369
mockMPInstance._Persistence.update();
6470

6571
expect(mockMPInstance._Persistence.setCookie).not.toHaveBeenCalled();
6672
expect(mockMPInstance._Persistence.setLocalStorage).not.toHaveBeenCalled();
6773
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
74+
expect(window.localStorage.getItem('mprtcl-v4')).toBeNull();
75+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
6876
});
6977

7078
it('should NOT write to localStorage when useCookieStorage is false', () => {
7179
store.SDKConfig.useCookieStorage = false;
72-
jest.clearAllMocks();
7380

7481
mockMPInstance._Persistence.update();
7582

7683
expect(mockMPInstance._Persistence.setCookie).not.toHaveBeenCalled();
7784
expect(mockMPInstance._Persistence.setLocalStorage).not.toHaveBeenCalled();
7885
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
86+
expect(window.localStorage.getItem('mprtcl-v4')).toBeNull();
87+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
7988
});
8089
});
8190

@@ -85,26 +94,28 @@ describe('Persistence store', () => {
8594
store.webviewBridgeEnabled = false;
8695
});
8796

88-
it('should write to cookie when useCookieStorage is true', () => {
97+
it('should write to cookie and localStorage when useCookieStorage is true', () => {
8998
store.SDKConfig.useCookieStorage = true;
90-
jest.clearAllMocks();
9199

92100
mockMPInstance._Persistence.update();
93101

94102
expect(mockMPInstance._Persistence.setCookie).toHaveBeenCalled();
95103
expect(mockMPInstance._Persistence.setLocalStorage).toHaveBeenCalled();
96-
expect(mockMPInstance._Persistence.setProductStorage).not.toHaveBeenCalled();
104+
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
105+
expect(window.localStorage.getItem('mprtcl-v4')).not.toBeNull();
106+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
97107
});
98108

99109
it('should write to localStorage when useCookieStorage is false', () => {
100110
store.SDKConfig.useCookieStorage = false;
101-
jest.clearAllMocks();
102111

103112
mockMPInstance._Persistence.update();
104113

105114
expect(mockMPInstance._Persistence.setCookie).not.toHaveBeenCalled();
106115
expect(mockMPInstance._Persistence.setLocalStorage).toHaveBeenCalled();
107-
expect(mockMPInstance._Persistence.setProductStorage).not.toHaveBeenCalled();
116+
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
117+
expect(window.localStorage.getItem('mprtcl-v4')).not.toBeNull();
118+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
108119
});
109120
});
110121

@@ -114,42 +125,45 @@ describe('Persistence store', () => {
114125
store.webviewBridgeEnabled = false;
115126
});
116127

117-
it('should write to cookie by default when useCookieStorage is true', () => {
128+
it('should write to cookie and localStorage by default when useCookieStorage is true', () => {
118129
store.SDKConfig.useCookieStorage = true;
119-
jest.clearAllMocks();
120130

121131
mockMPInstance._Persistence.update();
122132

123133
expect(store.getNoFunctional()).toBe(false);
124134
expect(mockMPInstance._Persistence.setCookie).toHaveBeenCalled();
125135
expect(mockMPInstance._Persistence.setLocalStorage).toHaveBeenCalled();
126-
expect(mockMPInstance._Persistence.setProductStorage).not.toHaveBeenCalled();
136+
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
137+
expect(window.localStorage.getItem('mprtcl-v4')).not.toBeNull();
138+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
127139
});
128140

129141
it('should write to localStorage by default when useCookieStorage is false', () => {
130142
store.SDKConfig.useCookieStorage = false;
131-
jest.clearAllMocks();
132143

133144
mockMPInstance._Persistence.update();
134145

135146
expect(store.getNoFunctional()).toBe(false);
136147
expect(mockMPInstance._Persistence.setCookie).not.toHaveBeenCalled();
137148
expect(mockMPInstance._Persistence.setLocalStorage).toHaveBeenCalled();
138-
expect(mockMPInstance._Persistence.setProductStorage).not.toHaveBeenCalled();
149+
expect(mockMPInstance._Persistence.setProductStorage).toHaveBeenCalled();
150+
expect(window.localStorage.getItem('mprtcl-v4')).not.toBeNull();
151+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).not.toBeNull();
139152
});
140153
});
141154

142155
it('should NOT write to storage when webviewBridgeEnabled is true', () => {
143156
store.setNoFunctional(false);
144157
store.webviewBridgeEnabled = true;
145158
store.SDKConfig.useCookieStorage = true;
146-
jest.clearAllMocks();
147159

148160
mockMPInstance._Persistence.update();
149161

150162
expect(mockMPInstance._Persistence.setCookie).not.toHaveBeenCalled();
151163
expect(mockMPInstance._Persistence.setLocalStorage).not.toHaveBeenCalled();
152164
expect(mockMPInstance._Persistence.setProductStorage).not.toHaveBeenCalled();
165+
expect(window.localStorage.getItem('mprtcl-v4')).toBeNull();
166+
expect(window.localStorage.getItem(encodeURIComponent('mprtcl-prodv4'))).toBeNull();
153167
});
154168
});
155169
});

test/src/tests-persistence.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,6 +1958,7 @@ describe('persistence', () => {
19581958
beforeEach(() => {
19591959
mParticle.config.noFunctional = true;
19601960
});
1961+
19611962
it('should NOT store cookie when useCookieStorage = true', async () => {
19621963
mParticle.config.useCookieStorage = true;
19631964

@@ -1993,6 +1994,7 @@ describe('persistence', () => {
19931994
beforeEach(() => {
19941995
mParticle.config.noFunctional = false;
19951996
});
1997+
19961998
it('should store cookie when useCookieStorage = true', async () => {
19971999
mParticle.config.useCookieStorage = true;
19982000

0 commit comments

Comments
 (0)