user-activate-register.test.jsx 4.8 KB

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