useOnboardingDocs.spec.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {reactHooks} from 'sentry-test/reactTestingLibrary';
  3. import useOnboardingDocs from 'sentry/components/onboardingWizard/useOnboardingDocs';
  4. import {
  5. generateDocKeys,
  6. isPlatformSupported,
  7. } from 'sentry/components/performanceOnboarding/utils';
  8. import {OrganizationContext} from 'sentry/views/organizationContext';
  9. describe('useOnboardingDocs', function () {
  10. it('fetches onboarding documentation steps', async function () {
  11. const {organization} = initializeOrg({
  12. router: {
  13. location: {query: {}, search: ''},
  14. push: jest.fn(),
  15. },
  16. } as any);
  17. const wrapper = ({children}: {children?: React.ReactNode}) => (
  18. <OrganizationContext.Provider value={organization}>
  19. {children}
  20. </OrganizationContext.Provider>
  21. );
  22. const project = TestStubs.Project({
  23. platform: 'javascript-react',
  24. firstTransactionEvent: false,
  25. });
  26. const apiMocks: any = {};
  27. const docKeys = generateDocKeys(project.platform);
  28. docKeys.forEach(docKey => {
  29. apiMocks[docKey] = MockApiClient.addMockResponse({
  30. url: `/projects/${organization.slug}/${project.slug}/docs/${docKey}/`,
  31. method: 'GET',
  32. body: {html: `${docKey} content`},
  33. });
  34. });
  35. const {result, waitForNextUpdate} = reactHooks.renderHook(useOnboardingDocs, {
  36. initialProps: {project, generateDocKeys, isPlatformSupported},
  37. wrapper,
  38. });
  39. await waitForNextUpdate();
  40. const {docContents, isLoading, hasOnboardingContents} = result.current;
  41. expect(isLoading).toEqual(false);
  42. const expectedDocContents = Object.keys(apiMocks).reduce((acc, key) => {
  43. acc[key] = `${key} content`;
  44. return acc;
  45. }, {});
  46. expect(docContents).toEqual(expectedDocContents);
  47. expect(hasOnboardingContents).toEqual(true);
  48. Object.values(apiMocks).forEach(mock => {
  49. expect(mock).toHaveBeenCalled();
  50. });
  51. });
  52. it('project with no onboarding support', function () {
  53. const {organization} = initializeOrg({
  54. router: {
  55. location: {query: {}, search: ''},
  56. push: jest.fn(),
  57. },
  58. } as any);
  59. const wrapper = ({children}: {children?: React.ReactNode}) => (
  60. <OrganizationContext.Provider value={organization}>
  61. {children}
  62. </OrganizationContext.Provider>
  63. );
  64. const project = TestStubs.Project({
  65. platform: 'javascript-angular',
  66. firstTransactionEvent: false,
  67. });
  68. const apiMocks: any = {};
  69. const docKeys = generateDocKeys(project.platform);
  70. docKeys.forEach(docKey => {
  71. apiMocks[docKey] = MockApiClient.addMockResponse({
  72. url: `/projects/${organization.slug}/${project.slug}/docs/${docKey}/`,
  73. method: 'GET',
  74. body: {html: `${docKey} content`},
  75. });
  76. });
  77. const {result} = reactHooks.renderHook(useOnboardingDocs, {
  78. initialProps: {project, generateDocKeys, isPlatformSupported},
  79. wrapper,
  80. });
  81. const {docContents, isLoading, hasOnboardingContents} = result.current;
  82. expect(isLoading).toEqual(false);
  83. expect(docContents).toEqual({});
  84. expect(hasOnboardingContents).toEqual(false);
  85. Object.values(apiMocks).forEach(mock => {
  86. expect(mock).not.toHaveBeenCalled();
  87. });
  88. });
  89. it('project with no support', function () {
  90. const {organization} = initializeOrg({
  91. router: {
  92. location: {query: {}, search: ''},
  93. push: jest.fn(),
  94. },
  95. } as any);
  96. const wrapper = ({children}: {children?: React.ReactNode}) => (
  97. <OrganizationContext.Provider value={organization}>
  98. {children}
  99. </OrganizationContext.Provider>
  100. );
  101. const project = TestStubs.Project({
  102. platform: 'elixir',
  103. firstTransactionEvent: false,
  104. });
  105. const apiMocks: any = {};
  106. const docKeys = generateDocKeys(project.platform);
  107. docKeys.forEach(docKey => {
  108. apiMocks[docKey] = MockApiClient.addMockResponse({
  109. url: `/projects/${organization.slug}/${project.slug}/docs/${docKey}/`,
  110. method: 'GET',
  111. body: {html: `${docKey} content`},
  112. });
  113. });
  114. const {result} = reactHooks.renderHook(useOnboardingDocs, {
  115. initialProps: {project, generateDocKeys, isPlatformSupported},
  116. wrapper,
  117. });
  118. const {docContents, isLoading, hasOnboardingContents} = result.current;
  119. expect(isLoading).toEqual(false);
  120. expect(docContents).toEqual({});
  121. expect(hasOnboardingContents).toEqual(false);
  122. Object.values(apiMocks).forEach(mock => {
  123. expect(mock).not.toHaveBeenCalled();
  124. });
  125. });
  126. });