Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions __test__/support/environment/TestEnvironmentHelpers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import bowser from 'bowser';
import { DOMWindow, JSDOM, ResourceLoader } from 'jsdom';
import CoreModule from 'src/core/CoreModule';
import { SubscriptionModel } from 'src/core/models/SubscriptionModel';
import {
NotificationType,
SubscriptionType,
} from 'src/core/types/subscription';
import { CoreModuleDirector } from '../../../src/core/CoreModuleDirector';
import NotificationsNamespace from '../../../src/onesignal/NotificationsNamespace';
import OneSignal from '../../../src/onesignal/OneSignal';
Expand All @@ -12,6 +17,7 @@ import Emitter from '../../../src/shared/libraries/Emitter';
import Database from '../../../src/shared/services/Database';
import { CUSTOM_LINK_CSS_CLASSES } from '../../../src/shared/slidedown/constants';
import * as bowerCastleHelpers from '../../../src/shared/utils/bowserCastle';
import { DUMMY_SUBSCRIPTION_ID_3 } from '../constants';
import MockNotification from '../mocks/MockNotification';
import BrowserUserAgent from '../models/BrowserUserAgent';
import Random from '../utils/Random';
Expand Down Expand Up @@ -116,3 +122,15 @@ export async function stubDomEnvironment(config: TestEnvironmentConfig) {
global.document = windowDef.document;
return dom;
}

export const createPushSub = () => {
const pushSubscription = new SubscriptionModel();
pushSubscription.initializeFromJson({
id: DUMMY_SUBSCRIPTION_ID_3,
type: SubscriptionType.ChromePush,
token: 'push-token',
enabled: true,
notification_types: NotificationType.Subscribed,
});
return pushSubscription;
};
9 changes: 0 additions & 9 deletions __test__/support/helpers/executors.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { OP_REPO_EXECUTION_INTERVAL } from 'src/core/operationRepo/constants';
import { GroupComparisonType, Operation } from 'src/core/operations/Operation';
import { IRebuildUserService } from 'src/core/types/user';
import { delay } from 'src/shared/utils/utils';

export class SomeOperation extends Operation {
Expand Down Expand Up @@ -29,14 +28,6 @@ export class SomeOperation extends Operation {
}
}

// TODO: Revisit after implementing BuildUserService
export const getRebuildOpsFn = vi.fn();
export class BuildUserService implements IRebuildUserService {
getRebuildOperationsIfCurrentUser(...args: any[]) {
return getRebuildOpsFn(...args);
}
}

export const fakeWaitForOperations = async (amount = 2) => {
await vi.advanceTimersByTimeAsync(OP_REPO_EXECUTION_INTERVAL * amount);
};
Expand Down
10 changes: 8 additions & 2 deletions __test__/unit/pushSubscription/nativePermissionChange.test.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import { DUMMY_PUSH_TOKEN } from '__test__/support/constants';
import {
createPushSub,
mockUserAgent,
} from '__test__/support/environment/TestEnvironmentHelpers';
import EventHelper from '../../../src/shared/helpers/EventHelper';
import MainHelper from '../../../src/shared/helpers/MainHelper';
import { NotificationPermission } from '../../../src/shared/models/NotificationPermission';
import { DUMMY_PUSH_TOKEN } from '../../support/constants';
import { initializeWithPermission } from '../../support/helpers/pushSubscription';
import { PermissionManager } from '../../support/managers/PermissionManager';

mockUserAgent();
const pushModel = createPushSub();

// TODO: Revisit with later Web SDK Prs
describe.skip('Notification Types are set correctly on subscription change', () => {
beforeEach(async () => {
vi.useFakeTimers();
vi.spyOn(MainHelper, 'getCurrentPushToken').mockResolvedValue(
DUMMY_PUSH_TOKEN,
);
Expand Down
42 changes: 21 additions & 21 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions src/core/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ export const OPERATION_NAME = {
// Property Operations
SET_PROPERTY: 'set-property',

// Session Operations
TRACK_SESSION_START: 'track-session-start',
TRACK_SESSION_END: 'track-session-end',

// User Operations
REFRESH_USER: 'refresh-user',
LOGIN_USER: 'login-user',
Expand Down
50 changes: 41 additions & 9 deletions src/core/executors/IdentityOperationExecutor.test.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { APP_ID, DUMMY_ONESIGNAL_ID } from '__test__/support/constants';
import {
BuildUserService,
getRebuildOpsFn,
SomeOperation,
} from '__test__/support/helpers/executors';
import { SomeOperation } from '__test__/support/helpers/executors';
import {
setAddAliasError,
setAddAliasResponse,
setDeleteAliasError,
setDeleteAliasResponse,
} from '__test__/support/helpers/requests';
import { ExecutionResult } from 'src/core/types/operation';
import { MockInstance } from 'vitest';
import { IdentityConstants, OPERATION_NAME } from '../constants';
import { RebuildUserService } from '../modelRepo/RebuildUserService';
import { IdentityModelStore } from '../modelStores/IdentityModelStore';
import { PropertiesModelStore } from '../modelStores/PropertiesModelStore';
import { SubscriptionModelStore } from '../modelStores/SubscriptionModelStore';
import { NewRecordsState } from '../operationRepo/NewRecordsState';
import { DeleteAliasOperation } from '../operations/DeleteAliasOperation';
import { SetAliasOperation } from '../operations/SetAliasOperation';
Expand All @@ -34,21 +34,40 @@ const deleteAliasOp = new DeleteAliasOperation(

let identityModelStore: IdentityModelStore;
let newRecordsState: NewRecordsState;
let propertiesModelStore: PropertiesModelStore;
let subscriptionModelStore: SubscriptionModelStore;
let rebuildUserService: RebuildUserService;
let getRebuildOpsSpy: MockInstance;

describe('IdentityOperationExecutor', () => {
const getExecutor = () => {
return new IdentityOperationExecutor(
identityModelStore,
new BuildUserService(),
rebuildUserService,
newRecordsState,
);
};

beforeEach(() => {
setAddAliasResponse();
setDeleteAliasResponse();

identityModelStore = new IdentityModelStore();
identityModelStore.model.onesignalId = DUMMY_ONESIGNAL_ID;

newRecordsState = new NewRecordsState();
propertiesModelStore = new PropertiesModelStore();
subscriptionModelStore = new SubscriptionModelStore();

rebuildUserService = new RebuildUserService(
identityModelStore,
propertiesModelStore,
subscriptionModelStore,
);
getRebuildOpsSpy = vi.spyOn(
rebuildUserService,
'getRebuildOperationsIfCurrentUser',
);
});

test('should return correct operations (names)', async () => {
Expand Down Expand Up @@ -141,19 +160,32 @@ describe('IdentityOperationExecutor', () => {

// Missing
setAddAliasError({ status: 410 });
getRebuildOpsSpy.mockReturnValueOnce(null);
const res5 = await executor.execute(ops);

// no rebuild ops
// @ts-expect-error - for testing purposes
identityModelStore.model.onesignalId = undefined;
expect(res5.result).toBe(ExecutionResult.FAIL_NORETRY);
expect(res5.retryAfterSeconds).toBeUndefined();

// with rebuild ops
const op = new SomeOperation();
getRebuildOpsFn.mockReturnValue([op]);
identityModelStore.model.onesignalId = DUMMY_ONESIGNAL_ID;
const res7 = await executor.execute(ops);
expect(res7.result).toBe(ExecutionResult.FAIL_RETRY);
expect(res7.retryAfterSeconds).toBeUndefined();
expect(res7.operations).toEqual([op]);
expect(res7.operations).toMatchObject([
{
name: 'login-user',
appId: APP_ID,
onesignalId: DUMMY_ONESIGNAL_ID,
},
{
name: 'refresh-user',
appId: APP_ID,
onesignalId: DUMMY_ONESIGNAL_ID,
},
]);

// in missing retry window
newRecordsState.add(DUMMY_ONESIGNAL_ID);
Expand Down
14 changes: 9 additions & 5 deletions src/core/executors/LoginUserOperationExecutor.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ import {
} from '__test__/support/constants';
import { TestEnvironment } from '__test__/support/environment/TestEnvironment';
import { mockUserAgent } from '__test__/support/environment/TestEnvironmentHelpers';
import {
BuildUserService,
SomeOperation,
} from '__test__/support/helpers/executors';
import { SomeOperation } from '__test__/support/helpers/executors';
import {
createUserFn,
setAddAliasError,
Expand All @@ -23,6 +20,7 @@ import {
} from '__test__/support/helpers/requests';
import Database from 'src/shared/services/Database';
import { IdentityConstants, OPERATION_NAME } from '../constants';
import { RebuildUserService } from '../modelRepo/RebuildUserService';
import { SubscriptionModel } from '../models/SubscriptionModel';
import { IdentityModelStore } from '../modelStores/IdentityModelStore';
import { PropertiesModelStore } from '../modelStores/PropertiesModelStore';
Expand All @@ -44,6 +42,7 @@ import { LoginUserOperationExecutor } from './LoginUserOperationExecutor';
let identityModelStore: IdentityModelStore;
let propertiesModelStore: PropertiesModelStore;
let subscriptionModelStore: SubscriptionModelStore;
let rebuildUserService: RebuildUserService;

vi.mock('src/shared/libraries/Log');

Expand All @@ -57,13 +56,18 @@ describe('LoginUserOperationExecutor', () => {
identityModelStore = new IdentityModelStore();
propertiesModelStore = new PropertiesModelStore();
subscriptionModelStore = new SubscriptionModelStore();
rebuildUserService = new RebuildUserService(
identityModelStore,
propertiesModelStore,
subscriptionModelStore,
);
});

const getExecutor = () => {
return new LoginUserOperationExecutor(
new IdentityOperationExecutor(
identityModelStore,
new BuildUserService(),
rebuildUserService,
new NewRecordsState(),
),
identityModelStore,
Expand Down
2 changes: 1 addition & 1 deletion src/core/executors/LoginUserOperationExecutor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,6 @@ export class LoginUserOperationExecutor implements IOperationExecutor {

const user = User.createOrGetInstance();
user.isCreatingUser = false;
user.hasOneSignalId = true;

const idTranslations: Record<string, string> = {
[createUserOperation.onesignalId]: backendOneSignalId,
Expand Down Expand Up @@ -218,6 +217,7 @@ export class LoginUserOperationExecutor implements IOperationExecutor {
const pushSubscriptionId = await Database.getPushId();
if (pushSubscriptionId === localId) {
await Database.setPushId(backendSub.id);
await Database.setPushToken(backendSub.token);
}

const model =
Expand Down
Loading
Loading