organization.spec.tsx 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {ProjectFixture} from 'sentry-fixture/project';
  3. import {TeamFixture} from 'sentry-fixture/team';
  4. import {fetchOrganizationDetails} from 'sentry/actionCreators/organization';
  5. import * as OrganizationsActionCreator from 'sentry/actionCreators/organizations';
  6. import OrganizationStore from 'sentry/stores/organizationStore';
  7. import ProjectsStore from 'sentry/stores/projectsStore';
  8. import TeamStore from 'sentry/stores/teamStore';
  9. describe('OrganizationActionCreator', function () {
  10. const org = OrganizationFixture();
  11. const teams = [TeamFixture()];
  12. const projects = [ProjectFixture()];
  13. const api = new MockApiClient();
  14. beforeEach(function () {
  15. jest.spyOn(TeamStore, 'loadInitialData');
  16. jest.spyOn(ProjectsStore, 'loadInitialData');
  17. jest.spyOn(OrganizationStore, 'onUpdate');
  18. jest.spyOn(OrganizationStore, 'onFetchOrgError');
  19. jest.spyOn(OrganizationsActionCreator, 'setActiveOrganization');
  20. });
  21. afterEach(function () {
  22. jest.restoreAllMocks();
  23. MockApiClient.clearMockResponses();
  24. });
  25. it('fetches organization details', async function () {
  26. const getOrgMock = MockApiClient.addMockResponse({
  27. url: `/organizations/${org.slug}/`,
  28. body: org,
  29. });
  30. const getProjectsMock = MockApiClient.addMockResponse({
  31. url: `/organizations/${org.slug}/projects/`,
  32. body: projects,
  33. });
  34. const getTeamsMock = MockApiClient.addMockResponse({
  35. url: `/organizations/${org.slug}/teams/`,
  36. body: teams,
  37. });
  38. fetchOrganizationDetails(api, org.slug);
  39. await tick();
  40. expect(getOrgMock).toHaveBeenCalledWith(
  41. `/organizations/${org.slug}/`,
  42. expect.anything()
  43. );
  44. expect(getProjectsMock).toHaveBeenCalledWith(
  45. `/organizations/${org.slug}/projects/`,
  46. expect.anything()
  47. );
  48. expect(getTeamsMock).toHaveBeenCalledWith(
  49. `/organizations/${org.slug}/teams/`,
  50. expect.anything()
  51. );
  52. expect(OrganizationStore.onUpdate).toHaveBeenCalledWith(org, {replace: true});
  53. expect(OrganizationsActionCreator.setActiveOrganization).toHaveBeenCalled();
  54. expect(TeamStore.loadInitialData).toHaveBeenCalledWith(teams);
  55. expect(ProjectsStore.loadInitialData).toHaveBeenCalledWith(projects);
  56. });
  57. it('errors out correctly', async function () {
  58. const getOrgMock = MockApiClient.addMockResponse({
  59. url: `/organizations/${org.slug}/`,
  60. statusCode: 400,
  61. });
  62. MockApiClient.addMockResponse({
  63. url: `/organizations/${org.slug}/projects/`,
  64. body: projects,
  65. });
  66. MockApiClient.addMockResponse({
  67. url: `/organizations/${org.slug}/teams/`,
  68. body: teams,
  69. });
  70. fetchOrganizationDetails(api, org.slug);
  71. await tick();
  72. expect(getOrgMock).toHaveBeenCalledWith(
  73. `/organizations/${org.slug}/`,
  74. expect.anything()
  75. );
  76. expect(OrganizationStore.onFetchOrgError).toHaveBeenCalled();
  77. });
  78. });