index.spec.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import {ApiApplicationFixture} from 'sentry-fixture/apiApplication';
  2. import {initializeOrg} from 'sentry-test/initializeOrg';
  3. import {
  4. render,
  5. screen,
  6. userEvent,
  7. waitFor,
  8. waitForElementToBeRemoved,
  9. } from 'sentry-test/reactTestingLibrary';
  10. import {isDemoModeEnabled} from 'sentry/utils/demoMode';
  11. import ApiApplications from 'sentry/views/settings/account/apiApplications';
  12. jest.mock('sentry/utils/demoMode');
  13. describe('ApiApplications', function () {
  14. const {routerProps, router} = initializeOrg({router: {params: {}}});
  15. beforeEach(function () {
  16. MockApiClient.clearMockResponses();
  17. });
  18. it('renders empty', async function () {
  19. MockApiClient.addMockResponse({
  20. url: '/api-applications/',
  21. body: [],
  22. });
  23. render(<ApiApplications {...routerProps} />);
  24. await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator'));
  25. expect(
  26. screen.getByText("You haven't created any applications yet.")
  27. ).toBeInTheDocument();
  28. });
  29. it('renders', async function () {
  30. const requestMock = MockApiClient.addMockResponse({
  31. url: '/api-applications/',
  32. body: [ApiApplicationFixture()],
  33. });
  34. render(<ApiApplications {...routerProps} />);
  35. await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator'));
  36. expect(requestMock).toHaveBeenCalled();
  37. expect(screen.getByText('Adjusted Shrimp')).toBeInTheDocument();
  38. });
  39. it('renders empty in demo mode even if there are applications', async function () {
  40. (isDemoModeEnabled as jest.Mock).mockReturnValue(true);
  41. MockApiClient.addMockResponse({
  42. url: '/api-applications/',
  43. body: [ApiApplicationFixture()],
  44. });
  45. render(<ApiApplications {...routerProps} />);
  46. expect(
  47. await screen.findByText("You haven't created any applications yet.")
  48. ).toBeInTheDocument();
  49. (isDemoModeEnabled as jest.Mock).mockReset();
  50. });
  51. it('creates application', async function () {
  52. MockApiClient.addMockResponse({
  53. url: '/api-applications/',
  54. body: [],
  55. });
  56. const createApplicationRequest = MockApiClient.addMockResponse({
  57. url: '/api-applications/',
  58. body: ApiApplicationFixture({
  59. id: '234',
  60. }),
  61. method: 'POST',
  62. });
  63. render(<ApiApplications {...routerProps} />);
  64. await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator'));
  65. await userEvent.click(screen.getByLabelText('Create New Application'));
  66. expect(createApplicationRequest).toHaveBeenCalledWith(
  67. '/api-applications/',
  68. expect.objectContaining({method: 'POST'})
  69. );
  70. await waitFor(() => {
  71. expect(router.push).toHaveBeenLastCalledWith(
  72. '/settings/account/api/applications/234/'
  73. );
  74. });
  75. });
  76. it('deletes application', async function () {
  77. MockApiClient.addMockResponse({
  78. url: '/api-applications/',
  79. body: [ApiApplicationFixture({id: '123'})],
  80. });
  81. const deleteApplicationRequest = MockApiClient.addMockResponse({
  82. url: '/api-applications/123/',
  83. method: 'DELETE',
  84. });
  85. render(<ApiApplications {...routerProps} />);
  86. await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator'));
  87. await userEvent.click(screen.getByLabelText('Remove'));
  88. expect(deleteApplicationRequest).toHaveBeenCalledWith(
  89. '/api-applications/123/',
  90. expect.objectContaining({method: 'DELETE'})
  91. );
  92. await waitFor(() => {
  93. expect(
  94. screen.getByText("You haven't created any applications yet.")
  95. ).toBeInTheDocument();
  96. });
  97. });
  98. });