organization.spec.jsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import * as OrganizationsActionCreator from 'app/actionCreators/organizations';
  2. import {fetchOrganizationDetails} from 'app/actionCreators/organization';
  3. import TeamStore from 'app/stores/teamStore';
  4. import ProjectsStore from 'app/stores/projectsStore';
  5. import OrganizationActions from 'app/actions/organizationActions';
  6. describe('OrganizationActionCreator', function () {
  7. const detailedOrg = TestStubs.Organization({
  8. teams: [TestStubs.Team()],
  9. projects: [TestStubs.Project()],
  10. });
  11. const lightOrg = TestStubs.Organization();
  12. delete lightOrg.teams;
  13. delete lightOrg.projects;
  14. const api = new MockApiClient();
  15. beforeEach(function () {
  16. MockApiClient.clearMockResponses();
  17. jest.spyOn(TeamStore, 'loadInitialData');
  18. jest.spyOn(ProjectsStore, 'loadInitialData');
  19. jest.spyOn(OrganizationActions, 'fetchOrg');
  20. jest.spyOn(OrganizationActions, 'update');
  21. jest.spyOn(OrganizationActions, 'fetchOrgError');
  22. jest.spyOn(OrganizationsActionCreator, 'setActiveOrganization');
  23. });
  24. afterEach(function () {
  25. jest.restoreAllMocks();
  26. MockApiClient.clearMockResponses();
  27. });
  28. it('fetches heavyweight organization details', async function () {
  29. const getOrgMock = MockApiClient.addMockResponse({
  30. url: `/organizations/${detailedOrg.slug}/`,
  31. body: detailedOrg,
  32. });
  33. fetchOrganizationDetails(api, detailedOrg.slug, true);
  34. await tick();
  35. expect(OrganizationActions.fetchOrg).toHaveBeenCalled();
  36. expect(getOrgMock).toHaveBeenCalledWith(
  37. `/organizations/${detailedOrg.slug}/`,
  38. expect.anything()
  39. );
  40. expect(OrganizationActions.update).toHaveBeenCalledWith(detailedOrg, {replace: true});
  41. expect(OrganizationsActionCreator.setActiveOrganization).toHaveBeenCalled();
  42. expect(TeamStore.loadInitialData).toHaveBeenCalledWith(detailedOrg.teams);
  43. expect(ProjectsStore.loadInitialData).toHaveBeenCalledWith(detailedOrg.projects);
  44. });
  45. it('fetches lightweight organization details', async function () {
  46. const getOrgMock = MockApiClient.addMockResponse({
  47. url: `/organizations/${lightOrg.slug}/`,
  48. body: lightOrg,
  49. });
  50. const getProjectsMock = MockApiClient.addMockResponse({
  51. url: `/organizations/${lightOrg.slug}/projects/`,
  52. body: [],
  53. });
  54. const getTeamsMock = MockApiClient.addMockResponse({
  55. url: `/organizations/${lightOrg.slug}/teams/`,
  56. body: [],
  57. });
  58. fetchOrganizationDetails(api, lightOrg.slug, false);
  59. await tick();
  60. expect(OrganizationActions.fetchOrg).toHaveBeenCalled();
  61. expect(getOrgMock).toHaveBeenCalledWith(
  62. `/organizations/${lightOrg.slug}/`,
  63. expect.anything()
  64. );
  65. expect(getProjectsMock).toHaveBeenCalledWith(
  66. `/organizations/${lightOrg.slug}/projects/`,
  67. expect.anything()
  68. );
  69. expect(getTeamsMock).toHaveBeenCalledWith(
  70. `/organizations/${lightOrg.slug}/teams/`,
  71. expect.anything()
  72. );
  73. expect(OrganizationActions.update).toHaveBeenCalledWith(lightOrg, {replace: true});
  74. expect(OrganizationsActionCreator.setActiveOrganization).toHaveBeenCalled();
  75. expect(TeamStore.loadInitialData).not.toHaveBeenCalled();
  76. expect(ProjectsStore.loadInitialData).not.toHaveBeenCalled();
  77. });
  78. it('silently fetches organization details', async function () {
  79. const getOrgMock = MockApiClient.addMockResponse({
  80. url: `/organizations/${detailedOrg.slug}/`,
  81. body: detailedOrg,
  82. });
  83. fetchOrganizationDetails(api, detailedOrg.slug, true, true);
  84. await tick();
  85. expect(OrganizationActions.fetchOrg).not.toHaveBeenCalled();
  86. expect(getOrgMock).toHaveBeenCalledWith(
  87. `/organizations/${detailedOrg.slug}/`,
  88. expect.anything()
  89. );
  90. expect(OrganizationActions.update).toHaveBeenCalledWith(detailedOrg, {replace: true});
  91. expect(OrganizationsActionCreator.setActiveOrganization).toHaveBeenCalled();
  92. expect(TeamStore.loadInitialData).toHaveBeenCalledWith(detailedOrg.teams);
  93. expect(ProjectsStore.loadInitialData).toHaveBeenCalledWith(detailedOrg.projects);
  94. });
  95. it('errors out correctly', async function () {
  96. const getOrgMock = MockApiClient.addMockResponse({
  97. url: `/organizations/${detailedOrg.slug}/`,
  98. statusCode: 400,
  99. });
  100. fetchOrganizationDetails(api, detailedOrg.slug, true);
  101. await tick();
  102. expect(OrganizationActions.fetchOrg).toHaveBeenCalled();
  103. expect(getOrgMock).toHaveBeenCalledWith(
  104. `/organizations/${detailedOrg.slug}/`,
  105. expect.anything()
  106. );
  107. expect(OrganizationActions.fetchOrgError).toHaveBeenCalled();
  108. });
  109. });