twoFactorRequired.spec.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import Cookies from 'js-cookie';
  2. import * as qs from 'query-string';
  3. import {AccountEmails} from 'sentry-fixture/accountEmails';
  4. import {Authenticators} from 'sentry-fixture/authenticators';
  5. import {initializeOrg} from 'sentry-test/initializeOrg';
  6. import {render, screen} from 'sentry-test/reactTestingLibrary';
  7. import TwoFactorRequired from 'sentry/views/settings/account/accountSecurity/';
  8. import AccountSecurityWrapper from 'sentry/views/settings/account/accountSecurity/accountSecurityWrapper';
  9. const ENDPOINT = '/users/me/authenticators/';
  10. const ORG_ENDPOINT = '/organizations/';
  11. const INVITE_COOKIE = 'pending-invite';
  12. const ACCOUNT_EMAILS_ENDPOINT = '/users/me/emails/';
  13. describe('TwoFactorRequired', function () {
  14. beforeEach(function () {
  15. MockApiClient.clearMockResponses();
  16. MockApiClient.addMockResponse({
  17. url: ENDPOINT,
  18. body: [Authenticators().Totp({isEnrolled: false})],
  19. });
  20. MockApiClient.addMockResponse({
  21. url: ORG_ENDPOINT,
  22. body: TestStubs.Organizations(),
  23. });
  24. MockApiClient.addMockResponse({
  25. url: ACCOUNT_EMAILS_ENDPOINT,
  26. body: AccountEmails(),
  27. });
  28. });
  29. const {routerContext, routerProps} = initializeOrg();
  30. const baseProps = {
  31. authenticators: null,
  32. countEnrolled: 0,
  33. deleteDisabled: false,
  34. handleRefresh: () => {},
  35. hasVerifiedEmail: false,
  36. onDisable: () => {},
  37. orgsRequire2fa: [],
  38. ...routerProps,
  39. };
  40. it('renders empty', function () {
  41. MockApiClient.addMockResponse({
  42. url: ORG_ENDPOINT,
  43. body: [],
  44. });
  45. render(
  46. <AccountSecurityWrapper {...routerProps} params={{authId: ''}}>
  47. <TwoFactorRequired {...baseProps} />
  48. </AccountSecurityWrapper>,
  49. {context: routerContext}
  50. );
  51. expect(screen.queryByTestId('require-2fa')).not.toBeInTheDocument();
  52. });
  53. it('does not render when 2FA is disabled and no pendingInvite cookie', function () {
  54. render(
  55. <AccountSecurityWrapper {...routerProps} params={{authId: ''}}>
  56. <TwoFactorRequired {...baseProps} />
  57. </AccountSecurityWrapper>,
  58. {context: routerContext}
  59. );
  60. expect(screen.queryByTestId('require-2fa')).not.toBeInTheDocument();
  61. });
  62. it('does not render when 2FA is enrolled and no pendingInvite cookie', function () {
  63. MockApiClient.addMockResponse({
  64. url: ENDPOINT,
  65. body: [Authenticators().Totp({isEnrolled: true})],
  66. });
  67. render(
  68. <AccountSecurityWrapper {...routerProps} params={{authId: ''}}>
  69. <TwoFactorRequired {...baseProps} />
  70. </AccountSecurityWrapper>,
  71. {context: routerContext}
  72. );
  73. expect(screen.queryByTestId('require-2fa')).not.toBeInTheDocument();
  74. });
  75. it('does not render when 2FA is enrolled and has pendingInvite cookie', function () {
  76. const cookieData = {
  77. memberId: 5,
  78. token: 'abcde',
  79. url: '/accept/5/abcde/',
  80. };
  81. Cookies.set(INVITE_COOKIE, qs.stringify(cookieData));
  82. MockApiClient.addMockResponse({
  83. url: ENDPOINT,
  84. body: [Authenticators().Totp({isEnrolled: true})],
  85. });
  86. MockApiClient.addMockResponse({
  87. url: ORG_ENDPOINT,
  88. body: TestStubs.Organizations({require2FA: true}),
  89. });
  90. render(
  91. <AccountSecurityWrapper {...routerProps} params={{authId: ''}}>
  92. <TwoFactorRequired {...baseProps} />
  93. </AccountSecurityWrapper>,
  94. {context: routerContext}
  95. );
  96. expect(screen.queryByTestId('require-2fa')).not.toBeInTheDocument();
  97. Cookies.remove(INVITE_COOKIE);
  98. });
  99. it('renders when 2FA is disabled and has pendingInvite cookie', async function () {
  100. Cookies.set(INVITE_COOKIE, '/accept/5/abcde/');
  101. MockApiClient.addMockResponse({
  102. url: ORG_ENDPOINT,
  103. body: TestStubs.Organizations({require2FA: true}),
  104. });
  105. render(
  106. <AccountSecurityWrapper {...routerProps} params={{authId: ''}}>
  107. <TwoFactorRequired {...baseProps} />
  108. </AccountSecurityWrapper>,
  109. {context: routerContext}
  110. );
  111. expect(await screen.findByTestId('require-2fa')).toBeInTheDocument();
  112. Cookies.remove(INVITE_COOKIE);
  113. });
  114. });