useNavigate.spec.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import {useEffect} from 'react';
  2. import {createMemoryHistory, Route, Router, RouterContext} from 'react-router';
  3. import {render} from 'sentry-test/reactTestingLibrary';
  4. import {useNavigate} from 'sentry/utils/useNavigate';
  5. import {RouteContext} from 'sentry/views/routeContext';
  6. describe('useNavigate', () => {
  7. const initialData = window.__initialData;
  8. afterEach(() => {
  9. window.__initialData = initialData;
  10. });
  11. it('returns the navigate function', function () {
  12. let navigate: ReturnType<typeof useNavigate> | undefined = undefined;
  13. function HomePage() {
  14. navigate = useNavigate();
  15. return null;
  16. }
  17. const memoryHistory = createMemoryHistory();
  18. memoryHistory.push('/');
  19. render(
  20. <Router
  21. history={memoryHistory}
  22. render={props => {
  23. return (
  24. <RouteContext.Provider value={props}>
  25. <RouterContext {...props} />
  26. </RouteContext.Provider>
  27. );
  28. }}
  29. >
  30. <Route path="/" component={HomePage} />
  31. </Router>
  32. );
  33. expect(typeof navigate).toBe('function');
  34. });
  35. it('applies url normalization for customer-domains', function () {
  36. window.__initialData = {
  37. customerDomain: {
  38. subdomain: 'albertos-apples',
  39. organizationUrl: 'https://albertos-apples.sentry.io',
  40. sentryUrl: 'https://sentry.io',
  41. },
  42. } as any;
  43. function HomePage() {
  44. const navigate = useNavigate();
  45. useEffect(() => {
  46. navigate('/organizations/acme/issues/');
  47. }, [navigate]);
  48. return null;
  49. }
  50. const memoryHistory = createMemoryHistory();
  51. memoryHistory.push('/');
  52. render(
  53. <Router
  54. history={memoryHistory}
  55. render={props => {
  56. return (
  57. <RouteContext.Provider value={props}>
  58. <RouterContext {...props} />
  59. </RouteContext.Provider>
  60. );
  61. }}
  62. >
  63. <Route path="/" component={HomePage} />
  64. <Route
  65. path="/issues"
  66. component={() => {
  67. return null;
  68. }}
  69. />
  70. </Router>
  71. );
  72. expect(memoryHistory.getCurrentLocation().pathname).toBe('/issues/');
  73. });
  74. });