Skip to content

Commit

Permalink
Merge pull request #38387 from callstack-internal/Reassure-add-test-f…
Browse files Browse the repository at this point in the history
…or-getOptions-method

[Reassure] Add measureFunction test for getOptions
  • Loading branch information
mountiny authored Mar 18, 2024
2 parents 37cde71 + 5b88a13 commit cda1b10
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions tests/perf-test/OptionsListUtils.perf-test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import {rand} from '@ngneat/falso';
import type * as NativeNavigation from '@react-navigation/native';
import {measureFunction} from 'reassure';
import * as OptionsListUtils from '@libs/OptionsListUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {PersonalDetails} from '@src/types/onyx';
import type Report from '@src/types/onyx/Report';
import createCollection from '../utils/collections/createCollection';
import createPersonalDetails from '../utils/collections/personalDetails';
import {getRandomDate} from '../utils/collections/reportActions';
import createRandomReport from '../utils/collections/reports';
import waitForBatchedUpdates from '../utils/waitForBatchedUpdates';

const REPORTS_COUNT = 5000;
const PERSONAL_DETAILS_LIST_COUNT = 1000;
const SEARCH_VALUE = 'TestingValue';

const reports = createCollection<Report>(
(item) => `${ONYXKEYS.COLLECTION.REPORT}${item.reportID}`,
(index) => ({
...createRandomReport(index),
type: rand(Object.values(CONST.REPORT.TYPE)),
lastVisibleActionCreated: getRandomDate(),
}),
REPORTS_COUNT,
);

const personalDetails = createCollection<PersonalDetails>(
(item) => item.accountID,
(index) => createPersonalDetails(index),
PERSONAL_DETAILS_LIST_COUNT,
);

const mockedBetas = Object.values(CONST.BETAS);

jest.mock('@react-navigation/native', () => {
const actualNav = jest.requireActual('@react-navigation/native');
return {
...actualNav,
createNavigationContainerRef: () => ({
getState: () => jest.fn(),
}),
} as typeof NativeNavigation;
});

/* GetOption is the private function and is never called directly, we are testing the functions which call getOption with different params */
describe('OptionsListUtils', () => {
/* Testing getSearchOptions */
test('[OptionsListUtils] getSearchOptions with search value', async () => {
await waitForBatchedUpdates();
await measureFunction(() => OptionsListUtils.getSearchOptions(reports, personalDetails, SEARCH_VALUE, mockedBetas));
});

/* Testing getShareLogOptions */
test('[OptionsListUtils] getShareLogOptions with search value', async () => {
await waitForBatchedUpdates();
await measureFunction(() => OptionsListUtils.getShareLogOptions(reports, personalDetails, SEARCH_VALUE, mockedBetas));
});

/* Testing getFilteredOptions */
test('[OptionsListUtils] getFilteredOptions with search value', async () => {
await waitForBatchedUpdates();
await measureFunction(() => OptionsListUtils.getFilteredOptions(reports, personalDetails, mockedBetas, SEARCH_VALUE));
});

/* Testing getShareDestinationOptions */
test('[OptionsListUtils] getShareDestinationOptions with search value', async () => {
await waitForBatchedUpdates();
await measureFunction(() => OptionsListUtils.getShareDestinationOptions(reports, personalDetails, mockedBetas, SEARCH_VALUE));
});

/* Testing getMemberInviteOptions */
test('[OptionsListUtils] getMemberInviteOptions with search value', async () => {
await waitForBatchedUpdates();
await measureFunction(() => OptionsListUtils.getMemberInviteOptions(personalDetails, mockedBetas, SEARCH_VALUE));
});
});

0 comments on commit cda1b10

Please sign in to comment.