Skip to content
Merged
File renamed without changes.
2 changes: 2 additions & 0 deletions __test__/constants/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './constants';
export * from './useragent';
66 changes: 66 additions & 0 deletions __test__/constants/useragent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
export const DEFAULT_USER_AGENT =
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.0.0 Safari/537.36';

// reference: https://explore.whatismybrowser.com/useragents/explore/
export const USER_AGENTS = {
CHROME_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36',
CHROME_MAC:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.1.0.0 Safari/537.36',
CHROME_LINUX:
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.2.0.0 Safari/537.36',
CHROME_IOS_IPHONE:
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/139.0.7258.60 Mobile/15E148 Safari/604.1',
CHROME_IOS_IPAD:
'Mozilla/5.0 (iPad; CPU OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/139.0.7258.60 Mobile/15E148 Safari/604.1',
CHROME_IOS_IPOD:
'Mozilla/5.0 (iPod; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/139.0.7258.60 Mobile/15E148 Safari/604.1',
CHROME_ANDROID:
'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.7204.180 Mobile Safari/537.36',
FIREFOX_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.1',
FIREFOX_MAC:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 15.6; rv:141.0) Gecko/20100101 Firefox/141.0',
FIREFOX_LINUX:
'Mozilla/5.0 (X11; Linux i686; rv:141.0) Gecko/20100101 Firefox/141.0',
FIREFOX_IOS:
'Mozilla/5.0 (iPhone; CPU iPhone OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/141.0 Mobile/15E148 Safari/605.1.15',
FIREFOX_ANDROID:
'Mozilla/5.0 (Android 16; Mobile; rv:141.0) Gecko/141.0 Firefox/141.0',
SAFARI_MAC:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15',
SAFARI_IPHONE:
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Mobile/15E148 Safari/604.1',
SAFARI_IPAD:
'Mozilla/5.0 (iPad; CPU OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Mobile/15E148 Safari/604.1',
SAFARI_IPOD:
'Mozilla/5.0 (iPod touch; CPU iPhone 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Mobile/15E148 Safari/604.1',
EDGE_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/137.0.3351.109',
EDGE_MAC:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/136.3351.109',
EDGE_ANDROID:
'Mozilla/5.0 (Linux; Android 10; HD1913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.180 Mobile Safari/537.36 EdgA/138.0.3351.98',
EDGE_IOS:
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 EdgiOS/138.3351.109 Mobile/15E148 Safari/605.1.15',
OPERA_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 OPR/120.0.0.0',
VIVALDI_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Vivaldi/7.5.3735.47',
YANDEX_WINDOWS:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 YaBrowser/25.6.3.357 Yowser/2.5 Safari/537.36',
FACEBOOK_APP_IOS:
'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBAV/238.0.0.50.115;FBBV/171859800;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/12.4.1;FBSS/2;FBID/phone;FBLC/en_US;FBOP/5;FBRV/172564136;FBCR/AT&T]',
FACEBOOK_APP_ANDROID:
'Mozilla/5.0 (Linux; Android 8.1.0; SM-J410G Build/M1AJB; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.81 Mobile Safari/537.36[FBAN/EMA;FBLC/es_LA;FBAV/457.0.0.12.82;FBCX/modulariab;]',
SAMSUNG_TABLET:
'Dalvik/2.1.0 (Linux; U; Android 14; SM-X306B Build/UP1A.231005.007)',
GOOGLE_TABLET:
'Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36',
// AMAZON_FIRE_TV:
// 'Mozilla/5.0 (Linux; Android 11; AFTKRT Build/RS8101.1849N; wv)PlexTV/10.0.0.4149',
// APPLE_TV: 'AppleTV14,1/16.1',
// PS5: 'Mozilla/5.0 (PlayStation; PlayStation 5/2.26) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15',
// FACEBOOK_BOT:
// 'Mozilla/5.0 (compatible; FacebookBot/1.0; +https://developers.facebook.com/docs/sharing/webmasters/facebookbot/)',
};
6 changes: 6 additions & 0 deletions __test__/setupTests.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { DEFAULT_USER_AGENT } from './constants';
import { server } from './support/mocks/server';
beforeAll(() =>
server.listen({
Expand All @@ -24,3 +25,8 @@ vi.mock('src/core/operationRepo/constants', () => ({
OP_REPO_EXECUTION_INTERVAL: 5,
OP_REPO_POST_CREATE_RETRY_UP_TO: 10,
}));

Object.defineProperty(navigator, 'userAgent', {
value: DEFAULT_USER_AGENT,
writable: true,
});
2 changes: 1 addition & 1 deletion __test__/support/environment/TestContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
NotificationClickMatchBehavior,
} from '../../../src/shared/config/constants';
import type { RecursivePartial } from '../../../src/shared/context/Utils';
import { APP_ID } from '../constants';
import { APP_ID } from '../../constants';
import type { TestEnvironmentConfig } from './TestEnvironment';

export default class TestContext {
Expand Down
13 changes: 5 additions & 8 deletions __test__/support/environment/TestEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@ import type {
AppUserConfig,
ConfigIntegrationKindValue,
ServerAppConfig,
} from '../../../src/shared/config';
import type { RecursivePartial } from '../../../src/shared/context/Utils';
import MainHelper from '../../../src/shared/helpers/MainHelper';
import { DUMMY_ONESIGNAL_ID, DUMMY_PUSH_TOKEN } from '../constants';
} from 'src/shared/config';
import type { RecursivePartial } from 'src/shared/context/Utils';
import MainHelper from 'src/shared/helpers/MainHelper';
import { DUMMY_ONESIGNAL_ID, DUMMY_PUSH_TOKEN } from '../../constants';
import { generateNewSubscription } from '../helpers/core';
import BrowserUserAgent from '../models/BrowserUserAgent';
import {
initOSGlobals,
mockUserAgent,
resetDatabase,
stubDomEnvironment,
stubNotification,
Expand All @@ -24,7 +22,7 @@ export interface TestEnvironmentConfig {
permission?: NotificationPermission;
addPrompts?: boolean;
url?: string;
userAgent?: typeof BrowserUserAgent;
userAgent?: string;
overrideServerConfig?: RecursivePartial<ServerAppConfig>;
integration?: ConfigIntegrationKindValue;
useMockIdentityModel?: boolean;
Expand All @@ -33,7 +31,6 @@ export interface TestEnvironmentConfig {

export class TestEnvironment {
static async initialize(config: TestEnvironmentConfig = {}) {
mockUserAgent(config);
// reset db & localStorage
resetDatabase();

Expand Down
22 changes: 3 additions & 19 deletions __test__/support/environment/TestEnvironmentHelpers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import bowser from 'bowser';
import { type DOMWindow, JSDOM, ResourceLoader } from 'jsdom';
import CoreModule from 'src/core/CoreModule';
import { SubscriptionModel } from 'src/core/models/SubscriptionModel';
Expand All @@ -17,40 +16,25 @@ import { getSlidedownElement } from '../../../src/page/slidedown/SlidedownElemen
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 {
DEFAULT_USER_AGENT,
DEVICE_OS,
DUMMY_ONESIGNAL_ID,
DUMMY_SUBSCRIPTION_ID_3,
} from '../constants';
} from '../../constants';
import MockNotification from '../mocks/MockNotification';
import BrowserUserAgent from '../models/BrowserUserAgent';
import Random from '../utils/Random';
import TestContext from './TestContext';
import { type TestEnvironmentConfig } from './TestEnvironment';

declare const global: any;

const bowserCastleSpy = vi.spyOn(bowerCastleHelpers, 'bowserCastle');

export function resetDatabase() {
// Erase and reset IndexedDb database name to something random
Database.resetInstance();
Database.databaseInstanceName = Random.getRandomString(10);
}

export function mockUserAgent(config: TestEnvironmentConfig = {}): void {
// @ts-expect-error - bowser is not typed correctly
const info = bowser._detect(config.userAgent ?? BrowserUserAgent.Default);
// Modify the mock implementation
bowserCastleSpy.mockReturnValue({
mobile: info.mobile,
tablet: info.tablet,
name: info.name.toLowerCase(),
version: info.version,
});
}

export async function initOSGlobals(config: TestEnvironmentConfig = {}) {
global.OneSignal = OneSignal;
global.OneSignal.EVENTS = ONESIGNAL_EVENTS;
Expand Down Expand Up @@ -107,7 +91,7 @@ export async function stubDomEnvironment(config: TestEnvironmentConfig) {
const resourceLoader = new ResourceLoader({
userAgent: config.userAgent
? config.userAgent.toString()
: BrowserUserAgent.Default.toString(),
: DEFAULT_USER_AGENT.toString(),
});

// global document object must be defined for `getSlidedownElement` to work correctly.
Expand Down
2 changes: 1 addition & 1 deletion __test__/support/helpers/executors.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { OP_REPO_EXECUTION_INTERVAL } from 'src/core/operationRepo/constants';
import { GroupComparisonType, Operation } from 'src/core/operations/Operation';
import { delay } from 'src/shared/utils/utils';
import { delay } from 'src/shared/helpers/general';

export class SomeOperation extends Operation {
constructor() {
Expand Down
2 changes: 1 addition & 1 deletion __test__/support/helpers/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
APP_ID,
DUMMY_ONESIGNAL_ID,
DUMMY_SUBSCRIPTION_ID,
} from '../constants';
} from '../../constants';
import TestContext from '../environment/TestContext';
import { server } from '../mocks/server';

Expand Down
2 changes: 1 addition & 1 deletion __test__/support/mocks/MockServiceWorker.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DUMMY_PUSH_TOKEN } from '../constants';
import { DUMMY_PUSH_TOKEN } from '../../constants';

export const getSubscriptionFn = vi
.fn<() => Promise<Partial<PushSubscription>>>()
Expand Down
97 changes: 0 additions & 97 deletions __test__/support/models/BrowserUserAgent.ts

This file was deleted.

8 changes: 1 addition & 7 deletions __test__/unit/core/coreModuleDirector.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { mockUserAgent } from '__test__/support/environment/TestEnvironmentHelpers';
import { CoreModuleDirector } from '../../../src/core/CoreModuleDirector';
import { TestEnvironment } from '../../support/environment/TestEnvironment';
import {
Expand All @@ -12,11 +11,6 @@ describe('CoreModuleDirector tests', () => {
});

describe('getPushSubscriptionModel', () => {
beforeEach(() => {
vi.resetAllMocks();
mockUserAgent();
});

async function getPushSubscriptionModel() {
return (await getCoreModuleDirector()).getPushSubscriptionModel();
}
Expand Down Expand Up @@ -44,7 +38,7 @@ describe('CoreModuleDirector tests', () => {
'getPushSubscriptionModelByLastKnownToken',
// @ts-expect-error - private method
).mockResolvedValue(pushModelLastKnown);
expect(await getPushSubscriptionModel()).toBe(pushModelLastKnown);
expect(await getPushSubscriptionModel()).toEqual(pushModelLastKnown);
});

test('returns current subscription over last known', async () => {
Expand Down
7 changes: 1 addition & 6 deletions __test__/unit/core/osModel.test.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
import { DEVICE_OS } from '__test__/support/constants';
import { mockUserAgent } from '__test__/support/environment/TestEnvironmentHelpers';
import { DEVICE_OS } from '__test__/constants';
import { SubscriptionModel } from 'src/core/models/SubscriptionModel';
import { SubscriptionType } from 'src/core/types/subscription';
import { generateNewSubscription } from '../../support/helpers/core';

describe('Model tests', () => {
beforeAll(() => {
mockUserAgent();
});

test('Set function updates data', async () => {
const newSub = generateNewSubscription();
expect(newSub.enabled).toBe(undefined);
Expand Down
Loading
Loading