Skip to content

Commit 8e0a6d0

Browse files
committed
add tests for multiple addSms and addEmail calls
1 parent 4f23a2b commit 8e0a6d0

4 files changed

Lines changed: 99 additions & 64 deletions

File tree

package-lock.json

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

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"@types/node": "^18.18.0",
4343
"@typescript-eslint/eslint-plugin": "^5.36.1",
4444
"@typescript-eslint/parser": "^5.36.1",
45-
"@vitest/coverage-v8": "3.0.9",
45+
"@vitest/coverage-v8": "3.1.1",
4646
"deepmerge": "^4.2.2",
4747
"eslint": "^8.23.0",
4848
"eslint-config-prettier": "9.0.0",
@@ -57,7 +57,7 @@
5757
"vite-bundle-analyzer": "^0.17.1",
5858
"vite-plugin-mkcert": "^1.17.6",
5959
"vite-tsconfig-paths": "^5.1.4",
60-
"vitest": "3.0.9"
60+
"vitest": "3.1.1"
6161
},
6262
"size-limit": [
6363
{

src/core/CoreModuleDirector.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ export class CoreModuleDirector {
171171
modelStores[modelName].add(model, propagate);
172172
}
173173

174-
175174
public remove(modelName: ModelName, modelId: string): void {
176175
logMethodCall('CoreModuleDirector.remove', { modelName, modelId });
177176
const modelStores = this.getModelStores();

src/entries/pageSdkInit.test.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { APP_ID } from '__test__/support/constants';
1+
import { APP_ID, DUMMY_ONESIGNAL_ID } from '__test__/support/constants';
22
import { TestEnvironment } from '__test__/support/environment/TestEnvironment';
33
import { mockServerConfig } from '__test__/support/helpers/configHelper';
44
import { server } from '__test__/support/mocks/server';
@@ -31,7 +31,6 @@ describe('pageSdkInit', () => {
3131
afterEach(async () => {
3232
vi.resetModules();
3333
localStorage.clear();
34-
sessionStorage.clear();
3534
OneSignal._initCalled = false;
3635
});
3736

@@ -70,4 +69,41 @@ describe('pageSdkInit', () => {
7069
await vi.runOnlyPendingTimersAsync();
7170
expect(initSpy).toHaveBeenCalled();
7271
});
72+
73+
test('multiple addEmail/addSms calls should not create duplicate subscriptions', async () => {
74+
server.use(
75+
http.post('**/apps/*/users', () =>
76+
HttpResponse.json({
77+
identity: {
78+
onesignal_id: DUMMY_ONESIGNAL_ID,
79+
},
80+
}),
81+
),
82+
http.post('**/apps/*/users/by/onesignal_id/*/subscriptions', () =>
83+
HttpResponse.json({
84+
identity: {
85+
onesignal_id: DUMMY_ONESIGNAL_ID,
86+
},
87+
}),
88+
),
89+
);
90+
91+
window.OneSignalDeferred = window.OneSignalDeferred || [];
92+
window.OneSignalDeferred.push(async function (OneSignal) {
93+
await OneSignal.init({ appId: APP_ID });
94+
await OneSignal.User.addEmail('jd@mail.com');
95+
await OneSignal.User.addEmail('jd@mail.com');
96+
await OneSignal.User.addSms('1234567890');
97+
await OneSignal.User.addSms('1234567890');
98+
});
99+
await import('./pageSdkInit');
100+
101+
await vi.advanceTimersByTimeAsync(30000);
102+
const emailSubscriptions =
103+
OneSignal.coreDirector.getEmailSubscriptionModels();
104+
expect(Object.keys(emailSubscriptions).length).toBe(1);
105+
106+
const smsSubscriptions = OneSignal.coreDirector.getSmsSubscriptionModels();
107+
expect(Object.keys(smsSubscriptions).length).toBe(1);
108+
});
73109
});

0 commit comments

Comments
 (0)