Files
2024-02-15 17:01:50 +00:00

123 lines
4.0 KiB
TypeScript

import type {InjectedRouter} from 'react-router';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {openModal} from 'sentry/actionCreators/modal';
import {navigateTo} from 'sentry/actionCreators/navigation';
import ProjectsStore from 'sentry/stores/projectsStore';
jest.mock('sentry/actionCreators/modal');
describe('navigation ActionCreator', () => {
let router: InjectedRouter;
beforeEach(() => {
ProjectsStore.init();
const initialData = initializeOrg({
router: {
location: {query: {}, search: ''},
push: jest.fn(),
},
});
router = initialData.router;
ProjectsStore.loadInitialData(initialData.organization.projects);
});
afterEach(() => {
ProjectsStore.reset();
jest.resetAllMocks();
});
it('should get project from query parameters', () => {
router.location.query.project = '2';
expect(navigateTo('/settings/:projectId/alert', router)).toBe(undefined);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith('/settings/project-slug/alert');
});
it('should get project id from query parameters', () => {
router.location.query.project = '2';
expect(
navigateTo(
'/organizations/albertos-apples/performance/?project=:project#performance-sidequest',
router
)
).toBe(undefined);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith(
'/organizations/albertos-apples/performance/?project=2#performance-sidequest'
);
});
it('should get project and project id from query parameters', () => {
router.location.query.project = '2';
expect(
navigateTo(
'/settings/:projectId/alert?project=:project#performance-sidequest',
router
)
).toBe(undefined);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith(
'/settings/project-slug/alert?project=2#performance-sidequest'
);
});
it('should open modal if the store is somehow missing selected projectId', () => {
router.location.query.project = '911';
expect(navigateTo('/settings/:projectId/alert', router)).toBe(undefined);
expect(openModal).toHaveBeenCalled();
});
it('should open modal when no project is selected', () => {
expect(navigateTo('/settings/:projectId/alert', router)).toBe(undefined);
expect(openModal).toHaveBeenCalled();
});
it('should open modal when no project id is selected', () => {
expect(
navigateTo(
'/organizations/albertos-apples/performance/?project=:project#performance-sidequest',
router
)
).toBe(undefined);
expect(openModal).toHaveBeenCalled();
});
it('should open modal if more than one project is selected', () => {
router.location.query.project = ['1', '2', '3'];
expect(navigateTo('/settings/:projectId/alert', router)).toBe(undefined);
expect(openModal).toHaveBeenCalled();
});
it('should not open modal if url does not require project id', () => {
expect(navigateTo('/settings/alert', router)).toBe(undefined);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith('/settings/alert');
});
it('should open modal for orgId', () => {
expect(navigateTo('/settings/:orgId', router)).toBe(undefined);
expect(openModal).toHaveBeenCalled();
});
it('normalizes URLs for customer domains', function () {
window.__initialData = {
...window.__initialData,
customerDomain: {
subdomain: 'albertos-apples',
organizationUrl: 'https://albertos-apples.sentry.io',
sentryUrl: 'https://sentry.io',
},
};
navigateTo('/settings/org-slug/projects/', router);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith('/settings/projects/');
router.location.query.project = '2';
navigateTo('/settings/org-slug/projects/:projectId/alerts/', router);
expect(openModal).not.toHaveBeenCalled();
expect(router.push).toHaveBeenCalledWith('/settings/projects/project-slug/alerts/');
});
});