profilesTable.spec.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import {ReactElement, useEffect, useMemo} from 'react';
  2. import {Organization} from 'fixtures/js-stubs/organization';
  3. import {Project} from 'fixtures/js-stubs/project';
  4. import {initializeOrg} from 'sentry-test/initializeOrg';
  5. import {render, screen} from 'sentry-test/reactTestingLibrary';
  6. import {ProfilesTable} from 'sentry/components/profiling/profilesTable';
  7. import ProjectsStore from 'sentry/stores/projectsStore';
  8. import {OrganizationContext} from 'sentry/views/organizationContext';
  9. import {RouteContext} from 'sentry/views/routeContext';
  10. const organization = Organization();
  11. const project = Project();
  12. function TestContext({children}: {children: ReactElement}) {
  13. const {router} = useMemo(() => initializeOrg({organization, project} as any), []);
  14. useEffect(() => {
  15. ProjectsStore.loadInitialData([project]);
  16. return () => ProjectsStore.reset();
  17. }, []);
  18. return (
  19. <RouteContext.Provider
  20. value={{
  21. router,
  22. location: router.location,
  23. params: {},
  24. routes: [],
  25. }}
  26. >
  27. <OrganizationContext.Provider value={organization}>
  28. {children}
  29. </OrganizationContext.Provider>
  30. </RouteContext.Provider>
  31. );
  32. }
  33. describe('ProfilesTable', function () {
  34. it('renders loading', function () {
  35. render(
  36. <TestContext>
  37. <ProfilesTable isLoading error={null} traces={[]} />
  38. </TestContext>
  39. );
  40. expect(screen.getByTestId('loading-indicator')).toBeInTheDocument();
  41. });
  42. it('renders empty data', function () {
  43. render(
  44. <TestContext>
  45. <ProfilesTable isLoading={false} error={null} traces={[]} />
  46. </TestContext>
  47. );
  48. expect(screen.getByText('No results found for your query')).toBeInTheDocument();
  49. });
  50. it('renders one trace', function () {
  51. const trace = {
  52. android_api_level: 0,
  53. device_classification: 'low',
  54. device_locale: 'en_US',
  55. device_manufacturer: 'Apple',
  56. device_model: 'iPhone7,2',
  57. device_os_build_number: '14F89',
  58. device_os_name: 'iOS',
  59. device_os_version: '10.3.2',
  60. failed: false,
  61. id: '75a32ee2e6ed44458f4647b024b615bb',
  62. project_id: '2',
  63. timestamp: 1653426810,
  64. trace_duration_ms: 931.404667,
  65. transaction_id: '6051e1bfb94349a88ead9ffec6910eb9',
  66. transaction_name: 'iOS_Swift.ViewController',
  67. version_code: '1',
  68. version_name: '7.16.0',
  69. };
  70. render(
  71. <TestContext>
  72. <ProfilesTable isLoading={false} error={null} traces={[trace]} />
  73. </TestContext>
  74. );
  75. expect(screen.getByText('Status')).toBeInTheDocument();
  76. expect(screen.getByText('Profile ID')).toBeInTheDocument();
  77. expect(screen.getByText('75a32ee2')).toBeInTheDocument();
  78. expect(screen.getByText('Project')).toBeInTheDocument();
  79. expect(screen.getByText('project-slug')).toBeInTheDocument();
  80. expect(screen.getByText('Transaction Name')).toBeInTheDocument();
  81. expect(screen.getByText('iOS_Swift.ViewController')).toBeInTheDocument();
  82. expect(screen.getByText('Version')).toBeInTheDocument();
  83. expect(screen.getByText('7.16.0 (build 1)')).toBeInTheDocument();
  84. expect(screen.getByText('Timestamp')).toBeInTheDocument();
  85. expect(screen.getByText('May 24, 2022 9:13:30 PM UTC')).toBeInTheDocument();
  86. expect(screen.getByText('Duration')).toBeInTheDocument();
  87. expect(screen.getByText('931.40ms')).toBeInTheDocument();
  88. expect(screen.getByText('Device Model')).toBeInTheDocument();
  89. expect(screen.getByText('iPhone7,2')).toBeInTheDocument();
  90. expect(screen.getByText('Device Classification')).toBeInTheDocument();
  91. expect(screen.getByText('low')).toBeInTheDocument();
  92. });
  93. });