user-activate-register.test.jsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { expect } from 'chai'
  2. import { render, screen, fireEvent } from '@testing-library/react'
  3. import fetchMock from 'fetch-mock'
  4. import UserActivateRegister from '../../../../frontend/js/components/user-activate-register'
  5. import { TPDS_SYNCED } from '../../../../../dropbox/test/frontend/components/dropbox-sync-status.test'
  6. describe('UserActivateRegister', function () {
  7. beforeEach(function () {
  8. fetchMock.removeRoutes().clearHistory()
  9. })
  10. afterEach(function () {
  11. fetchMock.removeRoutes().clearHistory()
  12. })
  13. it('should display the error message', async function () {
  14. const email = 'abc@gmail.com'
  15. render(<UserActivateRegister />)
  16. const endPointResponse = {
  17. status: 500,
  18. }
  19. fetchMock.get('/user/tpds/queues', TPDS_SYNCED)
  20. const registerMock = fetchMock.post('/admin/register', endPointResponse)
  21. const registerInput = screen.getByLabelText('Emails to register new users')
  22. const registerButton = screen.getByRole('button', { name: /register/i })
  23. fireEvent.change(registerInput, { target: { value: email } })
  24. fireEvent.click(registerButton)
  25. expect(registerMock.callHistory.called()).to.be.true
  26. await screen.findByText('Sorry, an error occured', { exact: false })
  27. })
  28. it('should display the success message', async function () {
  29. const email = 'abc@gmail.com'
  30. render(<UserActivateRegister />)
  31. const endPointResponse = {
  32. status: 200,
  33. body: {
  34. email,
  35. setNewPasswordUrl: 'SetNewPasswordURL',
  36. },
  37. }
  38. fetchMock.get('/user/tpds/queues', TPDS_SYNCED)
  39. const registerMock = fetchMock.post('/admin/register', endPointResponse)
  40. const registerInput = screen.getByLabelText('Emails to register new users')
  41. const registerButton = screen.getByRole('button', { name: /register/i })
  42. fireEvent.change(registerInput, { target: { value: email } })
  43. fireEvent.click(registerButton)
  44. expect(registerMock.callHistory.called()).to.be.true
  45. await screen.findByText(
  46. "We've sent out welcome emails to the registered users."
  47. )
  48. })
  49. it('should display the registered emails', async function () {
  50. const email = 'abc@gmail.com, def@gmail.com'
  51. render(<UserActivateRegister />)
  52. const endPointResponse1 = {
  53. status: 200,
  54. body: {
  55. email: 'abc@gmail.com',
  56. setNewPasswordUrl: 'SetNewPasswordURL',
  57. },
  58. }
  59. const endPointResponse2 = {
  60. status: 200,
  61. body: {
  62. email: 'def@gmail.com',
  63. setNewPasswordUrl: 'SetNewPasswordURL',
  64. },
  65. }
  66. fetchMock.get('/user/tpds/queues', TPDS_SYNCED)
  67. const registerMock = fetchMock.post('/admin/register', (path, req) => {
  68. const body = JSON.parse(req.body)
  69. if (body.email === 'abc@gmail.com') return endPointResponse1
  70. else if (body.email === 'def@gmail.com') return endPointResponse2
  71. })
  72. const registerInput = screen.getByLabelText('Emails to register new users')
  73. const registerButton = screen.getByRole('button', { name: /register/i })
  74. fireEvent.change(registerInput, { target: { value: email } })
  75. fireEvent.click(registerButton)
  76. expect(registerMock.callHistory.called()).to.be.true
  77. await screen.findByText('abc@gmail.com')
  78. await screen.findByText('def@gmail.com')
  79. })
  80. it('should display the failed emails', async function () {
  81. const email = 'abc@, def@'
  82. render(<UserActivateRegister />)
  83. const endPointResponse1 = {
  84. status: 500,
  85. }
  86. const endPointResponse2 = {
  87. status: 500,
  88. }
  89. fetchMock.get('/user/tpds/queues', TPDS_SYNCED)
  90. const registerMock = fetchMock.post('/admin/register', (path, req) => {
  91. const body = JSON.parse(req.body)
  92. if (body.email === 'abc@') return endPointResponse1
  93. else if (body.email === 'def@') return endPointResponse2
  94. })
  95. const registerInput = screen.getByLabelText('Emails to register new users')
  96. const registerButton = screen.getByRole('button', { name: /register/i })
  97. fireEvent.change(registerInput, { target: { value: email } })
  98. fireEvent.click(registerButton)
  99. expect(registerMock.callHistory.called()).to.be.true
  100. await screen.findByText('abc@')
  101. await screen.findByText('def@')
  102. })
  103. it('should display the registered and failed emails together', async function () {
  104. const email = 'abc@gmail.com, def@'
  105. render(<UserActivateRegister />)
  106. const endPointResponse1 = {
  107. status: 200,
  108. body: {
  109. email: 'abc@gmail.com',
  110. setNewPasswordUrl: 'SetNewPasswordURL',
  111. },
  112. }
  113. const endPointResponse2 = {
  114. status: 500,
  115. }
  116. fetchMock.get('/user/tpds/queues', TPDS_SYNCED)
  117. const registerMock = fetchMock.post('/admin/register', (path, req) => {
  118. const body = JSON.parse(req.body)
  119. if (body.email === 'abc@gmail.com') return endPointResponse1
  120. else if (body.email === 'def@gmail.com') return endPointResponse2
  121. else return 500
  122. })
  123. const registerInput = screen.getByLabelText('Emails to register new users')
  124. const registerButton = screen.getByRole('button', { name: /register/i })
  125. fireEvent.change(registerInput, { target: { value: email } })
  126. fireEvent.click(registerButton)
  127. expect(registerMock.callHistory.called()).to.be.true
  128. await screen.findByText('abc@gmail.com')
  129. await screen.findByText('def@')
  130. })
  131. })