UserHelperTests.js 6.7 KB

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