UserHelperTests.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. const AuthenticationManager = require('../../../app/src/Features/Authentication/AuthenticationManager')
  2. const UserHelper = require('./helpers/UserHelper')
  3. const Features = require('../../../app/src/infrastructure/Features')
  4. const { expect } = require('chai')
  5. describe('UserHelper', function () {
  6. // Disable all tests unless the registration feature is enabled
  7. beforeEach(function () {
  8. if (!Features.hasFeature('registration')) {
  9. this.skip()
  10. }
  11. })
  12. describe('UserHelper.createUser', function () {
  13. describe('with no args', function () {
  14. it('should create new user with default username and password', async function () {
  15. const userHelper = await UserHelper.createUser()
  16. userHelper.user.email.should.equal(userHelper.getDefaultEmail())
  17. const { user: authedUser } =
  18. await AuthenticationManager.promises.authenticate(
  19. { _id: userHelper.user._id },
  20. userHelper.getDefaultPassword(),
  21. null,
  22. { enforceHIBPCheck: false }
  23. )
  24. expect(authedUser).to.not.be.null
  25. })
  26. })
  27. describe('with email', function () {
  28. it('should create new user with provided email and default password', async function () {
  29. const userHelper = await UserHelper.createUser({
  30. email: 'foo@test.com',
  31. })
  32. userHelper.user.email.should.equal('foo@test.com')
  33. const { user: authedUser } =
  34. await AuthenticationManager.promises.authenticate(
  35. { _id: userHelper.user._id },
  36. userHelper.getDefaultPassword(),
  37. null,
  38. { enforceHIBPCheck: false }
  39. )
  40. expect(authedUser).to.not.be.null
  41. })
  42. })
  43. describe('with password', function () {
  44. it('should create new user with provided password and default email', async function () {
  45. const userHelper = await UserHelper.createUser({
  46. password: 'foofoofoo',
  47. })
  48. userHelper.user.email.should.equal(userHelper.getDefaultEmail())
  49. const { user: authedUser } =
  50. await AuthenticationManager.promises.authenticate(
  51. { _id: userHelper.user._id },
  52. 'foofoofoo',
  53. null,
  54. { enforceHIBPCheck: false }
  55. )
  56. expect(authedUser).to.not.be.null
  57. })
  58. })
  59. })
  60. describe('UserHelper.getUser', function () {
  61. let user
  62. beforeEach(async function () {
  63. user = (await UserHelper.createUser()).user
  64. })
  65. describe('with string id', function () {
  66. it('should fetch user', async function () {
  67. const userHelper = await UserHelper.getUser(user._id.toString())
  68. userHelper.user.email.should.equal(user.email)
  69. })
  70. })
  71. describe('with _id', function () {
  72. it('should fetch user', async function () {
  73. const userHelper = await UserHelper.getUser({ _id: user._id })
  74. userHelper.user.email.should.equal(user.email)
  75. })
  76. })
  77. })
  78. describe('UserHelper.loginUser', function () {
  79. let userHelper
  80. beforeEach(async function () {
  81. userHelper = await UserHelper.createUser()
  82. })
  83. describe('with email and password', function () {
  84. it('should login user', async function () {
  85. const newUserHelper = await UserHelper.loginUser({
  86. email: userHelper.getDefaultEmail(),
  87. password: userHelper.getDefaultPassword(),
  88. })
  89. newUserHelper.user.email.should.equal(userHelper.user.email)
  90. })
  91. })
  92. describe('without email', function () {
  93. it('should throw error', async function () {
  94. await UserHelper.loginUser({
  95. password: userHelper.getDefaultPassword(),
  96. }).should.be.rejectedWith('email and password required')
  97. })
  98. })
  99. describe('without password', function () {
  100. it('should throw error', async function () {
  101. await UserHelper.loginUser({
  102. email: userHelper.getDefaultEmail(),
  103. }).should.be.rejectedWith('email and password required')
  104. })
  105. })
  106. describe('without email and password', function () {
  107. it('should throw error', async function () {
  108. await UserHelper.loginUser().should.be.rejectedWith(
  109. 'email and password required'
  110. )
  111. })
  112. })
  113. })
  114. describe('UserHelper.registerUser', function () {
  115. describe('with no args', function () {
  116. it('should create new user with default username and password', async function () {
  117. const userHelper = await UserHelper.registerUser()
  118. userHelper.user.email.should.equal(userHelper.getDefaultEmail())
  119. const { user: authedUser } =
  120. await AuthenticationManager.promises.authenticate(
  121. { _id: userHelper.user._id },
  122. userHelper.getDefaultPassword(),
  123. null,
  124. { enforceHIBPCheck: false }
  125. )
  126. expect(authedUser).to.not.be.null
  127. })
  128. })
  129. describe('with email', function () {
  130. it('should create new user with provided email and default password', async function () {
  131. const userHelper = await UserHelper.registerUser({
  132. email: 'foo2@test.com',
  133. })
  134. userHelper.user.email.should.equal('foo2@test.com')
  135. const { user: authedUser } =
  136. await AuthenticationManager.promises.authenticate(
  137. { _id: userHelper.user._id },
  138. userHelper.getDefaultPassword(),
  139. null,
  140. { enforceHIBPCheck: false }
  141. )
  142. expect(authedUser).to.not.be.null
  143. })
  144. })
  145. describe('with password', function () {
  146. it('should create new user with provided password and default email', async function () {
  147. const userHelper = await UserHelper.registerUser({
  148. password: 'foofoofoo',
  149. })
  150. userHelper.user.email.should.equal(userHelper.getDefaultEmail())
  151. const { user: authedUser } =
  152. await AuthenticationManager.promises.authenticate(
  153. { _id: userHelper.user._id },
  154. 'foofoofoo',
  155. null,
  156. { enforceHIBPCheck: false }
  157. )
  158. expect(authedUser).to.not.be.null
  159. })
  160. })
  161. })
  162. describe('getCsrfToken', function () {
  163. it('should fetch csrfToken', async function () {
  164. const userHelper = new UserHelper()
  165. await userHelper.getCsrfToken()
  166. expect(userHelper.csrfToken).to.be.a.string
  167. })
  168. })
  169. describe('after logout', function () {
  170. let userHelper, oldCsrfToken
  171. beforeEach(async function () {
  172. userHelper = await UserHelper.registerUser()
  173. oldCsrfToken = userHelper.csrfToken
  174. })
  175. it('refreshes csrf token after logout', async function () {
  176. await userHelper.logout()
  177. expect(userHelper._csrfToken).to.equal('')
  178. await userHelper.getCsrfToken()
  179. expect(userHelper._csrfToken).to.not.equal('')
  180. expect(userHelper._csrfToken).to.not.equal(oldCsrfToken)
  181. })
  182. })
  183. })