Skip to content

Commit

Permalink
Nuzhy/FEQ-2701/update analytics (#17654)
Browse files Browse the repository at this point in the history
* chore: update utils, analytics packages

* fix: fetch country from utils

* fix: mock analytics in test cases

* fix: update analytics

* fix: update utils, analytics packages

* fix: empty

* fix: updated auth-client package, added stylemock in hooks jest config

* fix: update package-lock

* fix: empty
  • Loading branch information
Nuzhy-Deriv authored Dec 18, 2024
1 parent 9bb5179 commit 169c2ff
Show file tree
Hide file tree
Showing 25 changed files with 2,914 additions and 5,303 deletions.
8,009 changes: 2,824 additions & 5,185 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
},
"dependencies": {
"@babel/preset-typescript": "^7.24.7",
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@sendbird/chat": "^4.9.7",
"@types/react-transition-group": "^4.4.4",
"babel-jest": "^29.7.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/account/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
},
"dependencies": {
"@binary-com/binary-document-uploader": "^2.4.8",
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv-com/translations": "1.3.9",
"@deriv-com/utils": "^0.0.40",
"@deriv-com/utils": "^0.0.42",
"@deriv-com/ui": "1.36.4",
"@deriv/api": "^1.0.0",
"@deriv-com/quill-ui": "1.24.4",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ jest.mock('Helpers/utils', () => ({
isAdditionalDocumentValid: jest.fn(),
}));

jest.mock('@deriv-com/analytics', () => ({
Analytics: {
trackEvent: jest.fn(),
},
}));

type TPersonalDetailsSectionForm = ComponentProps<typeof PersonalDetails>['value'];

const mock_warnings = {};
Expand Down Expand Up @@ -296,9 +302,9 @@ describe('<PersonalDetails/>', () => {
const citizenship = screen.getByTestId('citizenship');
const phone = screen.getByTestId('phone');

userEvent.clear(first_name);
await userEvent.clear(first_name);
fireEvent.blur(date_of_birth);
userEvent.clear(last_name);
await userEvent.clear(last_name);
fireEvent.blur(place_of_birth);
fireEvent.blur(citizenship);
fireEvent.blur(phone);
Expand Down Expand Up @@ -343,8 +349,8 @@ describe('<PersonalDetails/>', () => {
const date_of_birth = screen.getByTestId('date_of_birth');
const phone = screen.getByTestId('phone');

userEvent.type(first_name, 'test firstname');
userEvent.type(last_name, 'test lastname');
await userEvent.type(first_name, 'test firstname');
await userEvent.type(last_name, 'test lastname');
fireEvent.change(date_of_birth, { target: { value: '2000-12-12' } });
fireEvent.change(phone, { target: { value: '+931234567890' } });

Expand All @@ -358,7 +364,7 @@ describe('<PersonalDetails/>', () => {

expect(previous_btn).toBeEnabled();
expect(next_btn).toBeEnabled();
userEvent.click(next_btn);
await userEvent.click(next_btn);

await waitFor(() => {
expect(new_props.onSubmit).toBeCalled();
Expand Down Expand Up @@ -426,12 +432,12 @@ describe('<PersonalDetails/>', () => {
const mrs_radio_btn: HTMLInputElement = screen.getByRole('radio', { name: /ms/i }) as HTMLInputElement;
expect(mr_radio_btn).toBeInTheDocument();
expect(mrs_radio_btn).toBeInTheDocument();
expect(mr_radio_btn.checked).toEqual(false);
expect(mr_radio_btn).not.toBeChecked();

fireEvent.click(mr_radio_btn);

expect(mr_radio_btn.checked).toEqual(true);
expect(mrs_radio_btn.checked).toEqual(false);
expect(mr_radio_btn).toBeChecked();
expect(mrs_radio_btn).not.toBeChecked();
});

it('should display the correct field details ', () => {
Expand Down Expand Up @@ -608,7 +614,7 @@ describe('<PersonalDetails/>', () => {
fireEvent.change(date_of_birth, { target: { value: '2000-12-12' } });
fireEvent.change(phone, { target: { value: '+49123456789012' } });

expect(mr_radio_btn.checked).toEqual(true);
expect(mr_radio_btn).toBeChecked();
const next_btn = screen.getByRole('button', { name: /next/i });

expect(next_btn).toBeEnabled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ jest.mock('@deriv-com/ui', () => ({
useDevice: jest.fn(() => ({ isMobile: true })),
}));

jest.mock('@deriv-com/analytics', () => ({
Analytics: {
trackEvent: jest.fn(),
},
}));

describe('Passkeys', () => {
let mock_store: ReturnType<typeof mockStore>, modal_root_el: HTMLElement;
const create_passkey = 'Create passkey';
Expand Down Expand Up @@ -162,7 +168,7 @@ describe('Passkeys', () => {
expect(Analytics.trackEvent).not.toHaveBeenCalled();
});

it('renders existed passkeys correctly and triggers new passkey creation', () => {
it('renders existed passkeys correctly and triggers new passkey creation', async () => {
(useGetPasskeysList as jest.Mock).mockReturnValue({
passkeys_list: mock_passkeys_list,
});
Expand All @@ -176,15 +182,15 @@ describe('Passkeys', () => {
expect(screen.getByText(passkey_name_2)).toBeInTheDocument();

const create_passkey_button = screen.getByRole('button', { name: create_passkey });
userEvent.click(create_passkey_button);
await userEvent.click(create_passkey_button);
expect(mockStartPasskeyRegistration).toBeCalledTimes(1);
expect(Analytics.trackEvent).toHaveBeenCalledWith(
tracking_event,
getAnalyticsParams('create_passkey_started', { subform_name: 'passkey_main' })
);
});

it("renders 'Experience safer logins' page when no passkey created, trigger 'Learn more' screen, trigger passkey creation", () => {
it("renders 'Experience safer logins' page when no passkey created, trigger 'Learn more' screen, trigger passkey creation", async () => {
(useGetPasskeysList as jest.Mock).mockReturnValue({
passkeys_list: [],
});
Expand All @@ -196,13 +202,13 @@ describe('Passkeys', () => {

expect(screen.getByText('Experience safer logins')).toBeInTheDocument();
const learn_more_button = screen.getByRole('button', { name: 'Learn more' });
userEvent.click(learn_more_button);
await userEvent.click(learn_more_button);
expect(Analytics.trackEvent).toHaveBeenCalledWith(tracking_event, getAnalyticsParams('info_open'));

expect(screen.getByText('Effortless login with passkeys')).toBeInTheDocument();
expect(screen.getByText('Tips:')).toBeInTheDocument();
const create_passkey_button = screen.getByRole('button', { name: create_passkey });
userEvent.click(create_passkey_button);
await userEvent.click(create_passkey_button);
expect(mockStartPasskeyRegistration).toBeCalledTimes(1);
expect(Analytics.trackEvent).toHaveBeenCalledWith(
tracking_event,
Expand All @@ -223,13 +229,13 @@ describe('Passkeys', () => {

renderComponent();

userEvent.click(screen.getByRole('button', { name: create_passkey }));
await userEvent.click(screen.getByRole('button', { name: create_passkey }));
expect(screen.getByText('Just a reminder')).toBeInTheDocument();
expect(screen.getByText('Enable screen lock on your device.')).toBeInTheDocument();
expect(screen.getByText('Enable bluetooth.')).toBeInTheDocument();
expect(screen.getByText('Sign in to your Google or iCloud account.')).toBeInTheDocument();

userEvent.click(screen.getByRole('button', { name: continue_button }));
await userEvent.click(screen.getByRole('button', { name: continue_button }));
expect(mockCreatePasskey).toBeCalledTimes(1);
expect(Analytics.trackEvent).toHaveBeenCalledWith(
tracking_event,
Expand All @@ -252,16 +258,16 @@ describe('Passkeys', () => {

expect(screen.queryByText('Edit passkey')).not.toBeInTheDocument();

userEvent.click(screen.getAllByTestId('dt_dropdown_display')[0]);
userEvent.click(screen.getByText('Rename'));
await userEvent.click(screen.getAllByTestId('dt_dropdown_display')[0]);
await userEvent.click(screen.getByText('Rename'));

expect(Analytics.trackEvent).toHaveBeenCalledWith(tracking_event, getAnalyticsParams('passkey_rename_started'));
expect(screen.getByText('Edit passkey')).toBeInTheDocument();

const input: HTMLInputElement = screen.getByRole('textbox');
userEvent.clear(input);
userEvent.type(input, 'new passkey name');
userEvent.click(screen.getByRole('button', { name: /save changes/i }));
await userEvent.clear(input);
await userEvent.type(input, 'new passkey name');
await userEvent.click(screen.getByRole('button', { name: /save changes/i }));

await waitFor(() => {
expect(mockRenamePasskey).toHaveBeenCalledTimes(1);
Expand All @@ -283,13 +289,13 @@ describe('Passkeys', () => {

expect(screen.queryByText('Edit passkey')).not.toBeInTheDocument();

userEvent.click(screen.getAllByTestId('dt_dropdown_display')[0]);
userEvent.click(screen.getByText('Remove'));
await userEvent.click(screen.getAllByTestId('dt_dropdown_display')[0]);
await userEvent.click(screen.getByText('Remove'));

expect(Analytics.trackEvent).toHaveBeenCalledWith(tracking_event, getAnalyticsParams('passkey_remove_started'));
expect(screen.getByText('Are you sure you want to remove this passkey?')).toBeInTheDocument();

userEvent.click(screen.getByRole('button', { name: /remove/i }));
await userEvent.click(screen.getByRole('button', { name: /remove/i }));
expect(mockRemovePasskey).toHaveBeenCalledTimes(1);
});

Expand All @@ -302,15 +308,15 @@ describe('Passkeys', () => {

renderComponent();

userEvent.click(screen.getByRole('button', { name: create_passkey }));
userEvent.click(screen.getByRole('button', { name: continue_button }));
await userEvent.click(screen.getByRole('button', { name: create_passkey }));
await userEvent.click(screen.getByRole('button', { name: continue_button }));

await waitFor(() => {
expect(screen.getByText(error_message)).toBeInTheDocument();
expect(screen.getByText(error_title)).toBeInTheDocument();
});

userEvent.click(screen.getByRole('button', { name: ok_button }));
await userEvent.click(screen.getByRole('button', { name: ok_button }));

await waitFor(() => {
expect(mockHistoryPush).toHaveBeenCalledWith(routes.traders_hub);
Expand All @@ -331,15 +337,15 @@ describe('Passkeys', () => {

renderComponent();

userEvent.click(screen.getByRole('button', { name: create_passkey }));
userEvent.click(screen.getByRole('button', { name: continue_button }));
await userEvent.click(screen.getByRole('button', { name: create_passkey }));
await userEvent.click(screen.getByRole('button', { name: continue_button }));

await waitFor(() => {
expect(screen.getByText(error_message)).toBeInTheDocument();
expect(screen.getByText(error_title)).toBeInTheDocument();
});

userEvent.click(screen.getByRole('button', { name: ok_button }));
await userEvent.click(screen.getByRole('button', { name: ok_button }));
expect(mockHistoryPush).toHaveBeenCalledWith(routes.traders_hub);
});
});
4 changes: 2 additions & 2 deletions packages/api-v2/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"version": "1.0.0",
"main": "src/index.ts",
"dependencies": {
"@deriv-com/utils": "^0.0.40",
"@deriv-com/utils": "^0.0.42",
"@deriv-com/translations": "1.3.9",
"@deriv/deriv-api": "^1.0.15",
"@deriv/shared": "^1.0.0",
Expand All @@ -16,7 +16,7 @@
"uuid": "^9.0.1"
},
"devDependencies": {
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv/api-types": "1.0.172",
"@testing-library/react": "^12.1.5",
"@testing-library/react-hooks": "^7.0.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"main": "src/index.ts",
"sideEffects": false,
"dependencies": {
"@deriv-com/utils": "^0.0.40",
"@deriv-com/utils": "^0.0.42",
"@deriv/deriv-api": "^1.0.15",
"@deriv/shared": "^1.0.0",
"@deriv/utils": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/appstore/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"author": "Deriv",
"license": "Apache-2.0",
"dependencies": {
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv-com/translations": "1.3.9",
"@deriv-com/ui": "1.36.4",
"@deriv/account": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/cashier/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"url": "https://github.com/deriv-com/deriv-app/issues"
},
"dependencies": {
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv-com/ui": "1.36.4",
"@deriv/api": "^1.0.0",
"@deriv/api-types": "1.0.172",
Expand Down
4 changes: 2 additions & 2 deletions packages/cfd/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,9 @@
},
"dependencies": {
"@deriv-com/ui": "1.36.4",
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv-com/translations": "1.3.9",
"@deriv-com/utils": "^0.0.40",
"@deriv-com/utils": "^0.0.42",
"@deriv/account": "^1.0.0",
"@deriv/api": "^1.0.0",
"@deriv/api-types": "1.0.172",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ jest.mock('@deriv/hooks', () => ({
useMT5SVGEligibleToMigrate: jest.fn(),
}));

jest.mock('@deriv-com/analytics', () => ({
Analytics: {
trackEvent: jest.fn(),
},
}));

const mock_store = mockStore({});

const mockUseMT5SVGEligibleToMigrate = useMT5SVGEligibleToMigrate as jest.MockedFunction<
Expand Down Expand Up @@ -81,11 +87,11 @@ describe('MigrationBanner', () => {
});
});

it('should call upgrade button tracking event on clicking upgrade now button ', () => {
it('should call upgrade button tracking event on clicking upgrade now button ', async () => {
renderComponent();
const upgrade_button = screen.getByRole('button', { name: /upgrade/i });
expect(upgrade_button).toBeInTheDocument();
userEvent.click(upgrade_button);
await userEvent.click(upgrade_button);
expect(Analytics.trackEvent).toHaveBeenCalledWith('ce_upgrade_mt5_banner', {
action: 'push_cta_upgrade',
});
Expand Down
4 changes: 2 additions & 2 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,13 @@
},
"dependencies": {
"@datadog/browser-rum": "^5.11.0",
"@deriv-com/analytics": "1.26.2",
"@deriv-com/analytics": "1.27.1",
"@deriv-com/quill-tokens": "2.0.4",
"@deriv-com/quill-ui": "1.24.4",
"@deriv-com/translations": "1.3.9",
"@deriv-com/auth-client": "1.3.3",
"@deriv-com/ui": "1.36.4",
"@deriv-com/utils": "^0.0.40",
"@deriv-com/utils": "^0.0.42",
"@deriv/account": "^1.0.0",
"@deriv/api": "^1.0.0",
"@deriv/appstore": "^0.0.4",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ jest.mock('../account-wizard.jsx', () => ({
default: () => <div>Account Wizard</div>,
}));

jest.mock('@deriv-com/analytics', () => ({
Analytics: {
trackEvent: jest.fn(),
},
}));

describe('<RealAccountSignup />', () => {
const store = mockStore({
client: {
Expand Down
6 changes: 2 additions & 4 deletions packages/core/src/Stores/client-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,8 @@ import {
urlForLanguage,
} from '@deriv/shared';
import { getLanguage, getRedirectionLanguage, localize } from '@deriv/translations';
import { getCountry } from '@deriv/utils';
import { Analytics } from '@deriv-com/analytics';
import { URLConstants } from '@deriv-com/utils';
import { CountryUtils, URLConstants } from '@deriv-com/utils';

import { requestLogout, WS } from 'Services';
import BinarySocketGeneral from 'Services/socket-general';
Expand Down Expand Up @@ -177,7 +176,6 @@ export default class ClientStore extends BaseStore {
constructor(root_store) {
const local_storage_properties = ['device_data'];
super({ root_store, local_storage_properties, store_name });

makeObservable(this, {
exchange_rates: observable,
loginid: observable,
Expand Down Expand Up @@ -1825,7 +1823,7 @@ export default class ClientStore extends BaseStore {
language: getLanguage(),
device_language: navigator?.language || 'en-EN',
user_language: getLanguage().toLowerCase(),
country: await getCountry(),
country: await CountryUtils.getCountry(),
utm_source: ppc_campaign_cookies?.utm_source,
utm_medium: ppc_campaign_cookies?.utm_medium,
utm_campaign: ppc_campaign_cookies?.utm_campaign,
Expand Down
Loading

0 comments on commit 169c2ff

Please sign in to comment.