import {createMemoryHistory, Route, Router, RouterContext} from 'react-router'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import {useParams} from 'sentry/utils/useParams'; import {useRouteContext} from 'sentry/utils/useRouteContext'; import {RouteContext} from 'sentry/views/routeContext'; const mockUsingCustomerDomain = jest.fn(); const mockCustomerDomain = jest.fn(); jest.mock('sentry/constants', () => { const sentryConstant = jest.requireActual('sentry/constants'); return { ...sentryConstant, get usingCustomerDomain() { return mockUsingCustomerDomain(); }, get customerDomain() { return mockCustomerDomain(); }, }; }); describe('useParams', () => { describe('when the path has no params', () => { it('returns an empty object', () => { let params; function HomePage() { params = useParams(); return null; } const memoryHistory = createMemoryHistory(); memoryHistory.push('/?hello'); render( { return ( ); }} > ); expect(params).toEqual({}); }); }); describe('when the path has some params', () => { it('returns an object of the URL params', () => { let params; function HomePage() { params = useParams(); return null; } const memoryHistory = createMemoryHistory(); memoryHistory.push('/sentry'); render( { return ( ); }} > ); expect(params).toEqual({slug: 'sentry'}); }); }); describe('customer domains', function () { afterEach(function () { jest.resetAllMocks(); }); it('populates orgId when customer domain is being used', function () { mockUsingCustomerDomain.mockReturnValue(true); mockCustomerDomain.mockReturnValue('albertos-apples'); let originalParams; let useParamsValue; function Component() { const {params} = useRouteContext(); originalParams = params; useParamsValue = useParams(); return (
rendered component for org: {useParamsValue.orgId ?? 'no org id'}
); } const memoryHistory = createMemoryHistory(); memoryHistory.push('/issues/?hello'); render( { return ( ); }} > ); expect( screen.getByText('rendered component for org: albertos-apples') ).toBeInTheDocument(); expect(originalParams).toEqual({}); expect(useParamsValue).toEqual({ orgId: 'albertos-apples', }); }); it('does not populate orgId when customer domain is not being used', function () { mockUsingCustomerDomain.mockReturnValue(false); mockCustomerDomain.mockReturnValue(undefined); let originalParams; let useParamsValue; function Component() { const {params} = useRouteContext(); originalParams = params; useParamsValue = useParams(); return (
rendered component for org: {useParamsValue.orgId ?? 'no org id'}
); } const memoryHistory = createMemoryHistory(); memoryHistory.push('/issues/?hello'); render( { return ( ); }} > ); expect( screen.getByText('rendered component for org: no org id') ).toBeInTheDocument(); expect(originalParams).toEqual({}); expect(useParamsValue).toEqual({}); }); }); });