1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import {LocationFixture} from 'sentry-fixture/locationFixture';
- import {ProjectFixture} from 'sentry-fixture/project';
- import {renderHook} from 'sentry-test/reactTestingLibrary';
- import type {Project} from 'sentry/types/project';
- import {useLocation} from 'sentry/utils/useLocation';
- import usePageFilters from 'sentry/utils/usePageFilters';
- import useProjects from 'sentry/utils/useProjects';
- import useCrossPlatformProject from 'sentry/views/performance/mobile/useCrossPlatformProject';
- jest.mock('sentry/utils/usePageFilters');
- jest.mock('sentry/utils/useLocation');
- jest.mock('sentry/utils/useProjects');
- function mockPageFilters(projects: number[]) {
- jest.mocked(usePageFilters).mockReturnValue({
- isReady: true,
- desyncedFilters: new Set(),
- pinnedFilters: new Set(),
- shouldPersist: true,
- selection: {
- datetime: {
- period: '10d',
- start: null,
- end: null,
- utc: false,
- },
- environments: [],
- projects,
- },
- });
- }
- function mockProjects(projects: Project[]) {
- jest.mocked(useProjects).mockReturnValue({
- fetchError: null,
- fetching: false,
- hasMore: false,
- initiallyLoaded: false,
- onSearch: jest.fn(),
- placeholders: [],
- projects,
- });
- }
- describe('useCrossPlatformProject', () => {
- let mockProject: Project;
- beforeEach(() => {
- jest.clearAllMocks();
- mockProject = ProjectFixture({platform: 'flutter'});
- jest.mocked(useLocation).mockReturnValue(LocationFixture());
- mockProjects([mockProject]);
- });
- it('returns null for project if >1 project is selected', () => {
- mockPageFilters([1, 2, 3]);
- const {result} = renderHook(useCrossPlatformProject);
- const {project, isProjectCrossPlatform} = result.current;
- expect(project).toBeNull();
- expect(isProjectCrossPlatform).toBe(false);
- });
- it('returns the corresponding project data if a single project is selected', () => {
- mockPageFilters([parseInt(mockProject.id, 10)]);
- const {result} = renderHook(useCrossPlatformProject);
- const {project, isProjectCrossPlatform, selectedPlatform} = result.current;
- expect(project).toBe(mockProject);
- expect(isProjectCrossPlatform).toBe(true);
- // The default selection result is "Android"
- expect(selectedPlatform).toBe('Android');
- });
- it('returns false for isProjectCrossPlatform if project is not cross platform', () => {
- const testProject = ProjectFixture({platform: 'python'});
- mockProjects([testProject]);
- mockPageFilters([parseInt(testProject.id, 10)]);
- const {result} = renderHook(useCrossPlatformProject);
- const {project, isProjectCrossPlatform} = result.current;
- expect(project).toBe(testProject);
- expect(isProjectCrossPlatform).toBe(false);
- });
- });
|