organizationMembersWrapper.spec.jsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import {openInviteMembersModal} from 'sentry/actionCreators/modal';
  3. import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
  4. import OrganizationMembersList from 'sentry/views/settings/organizationMembers/organizationMembersList';
  5. import OrganizationMembersWrapper from 'sentry/views/settings/organizationMembers/organizationMembersWrapper';
  6. jest.mock('sentry/utils/analytics/trackAdvancedAnalyticsEvent', () => jest.fn());
  7. jest.mock('sentry/actionCreators/modal', () => ({
  8. openInviteMembersModal: jest.fn(),
  9. }));
  10. describe('OrganizationMembersWrapper', function () {
  11. const member = TestStubs.Member();
  12. const organization = TestStubs.Organization({
  13. features: ['invite-members'],
  14. access: ['member:admin', 'org:admin', 'member:write'],
  15. status: {
  16. id: 'active',
  17. },
  18. });
  19. const defaultProps = {
  20. location: {query: {}},
  21. params: {orgId: organization.slug},
  22. };
  23. beforeEach(function () {
  24. trackAdvancedAnalyticsEvent.mockClear();
  25. MockApiClient.clearMockResponses();
  26. MockApiClient.addMockResponse({
  27. url: '/organizations/org-slug/members/me/',
  28. method: 'GET',
  29. body: {roles: []},
  30. });
  31. MockApiClient.addMockResponse({
  32. url: '/organizations/org-slug/invite-requests/',
  33. method: 'GET',
  34. body: [],
  35. });
  36. MockApiClient.addMockResponse({
  37. url: '/organizations/org-slug/access-requests/',
  38. method: 'GET',
  39. body: [],
  40. });
  41. MockApiClient.addMockResponse({
  42. url: '/organizations/org-slug/members/',
  43. method: 'GET',
  44. body: [],
  45. });
  46. MockApiClient.addMockResponse({
  47. url: '/organizations/org-slug/auth-provider/',
  48. method: 'GET',
  49. body: {},
  50. });
  51. });
  52. it('can invite member', function () {
  53. const wrapper = mountWithTheme(
  54. <OrganizationMembersWrapper organization={organization} {...defaultProps} />
  55. );
  56. const inviteButton = wrapper.find('StyledButton');
  57. inviteButton.simulate('click');
  58. expect(openInviteMembersModal).toHaveBeenCalled();
  59. });
  60. it('can not invite members without the invite-members feature', function () {
  61. const org = TestStubs.Organization({
  62. features: [],
  63. access: ['member:admin', 'org:admin', 'member:write'],
  64. status: {
  65. id: 'active',
  66. },
  67. });
  68. const wrapper = mountWithTheme(
  69. <OrganizationMembersWrapper organization={org} {...defaultProps} />
  70. );
  71. const inviteButton = wrapper.find('StyledButton');
  72. expect(inviteButton.props().disabled).toBeTruthy();
  73. });
  74. it('can invite without permissions', function () {
  75. const org = TestStubs.Organization({
  76. features: ['invite-members'],
  77. access: [],
  78. status: {
  79. id: 'active',
  80. },
  81. });
  82. const wrapper = mountWithTheme(
  83. <OrganizationMembersWrapper organization={org} {...defaultProps} />
  84. );
  85. const inviteButton = wrapper.find('StyledButton');
  86. inviteButton.simulate('click');
  87. expect(openInviteMembersModal).toHaveBeenCalled();
  88. });
  89. it('renders member list', function () {
  90. MockApiClient.addMockResponse({
  91. url: '/organizations/org-slug/members/',
  92. method: 'GET',
  93. body: [member],
  94. });
  95. const wrapper = mountWithTheme(
  96. <OrganizationMembersWrapper organization={organization} {...defaultProps}>
  97. <OrganizationMembersList {...defaultProps} router={{routes: []}} />
  98. </OrganizationMembersWrapper>
  99. );
  100. expect(wrapper.find('OrganizationMembersList').exists()).toBe(true);
  101. expect(wrapper.find('PanelHeader').text().includes('Members')).toBe(true);
  102. expect(wrapper.find('StyledPanelItem').text().includes(member.name)).toBe(true);
  103. });
  104. });