AuthenticationTests.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const { expect } = require('chai')
  2. const { ObjectId } = require('mongodb')
  3. const User = require('./helpers/User').promises
  4. describe('Authentication', function () {
  5. let user
  6. beforeEach('init vars', function () {
  7. user = new User()
  8. })
  9. describe('CSRF regeneration on login', function () {
  10. it('should prevent use of csrf token from before login', function (done) {
  11. user.logout(err => {
  12. if (err) {
  13. return done(err)
  14. }
  15. user.getCsrfToken(err => {
  16. if (err) {
  17. return done(err)
  18. }
  19. const oldToken = user.csrfToken
  20. user.login(err => {
  21. if (err) {
  22. return done(err)
  23. }
  24. expect(oldToken === user.csrfToken).to.equal(false)
  25. user.request.post(
  26. {
  27. headers: {
  28. 'x-csrf-token': oldToken,
  29. },
  30. url: '/project/new',
  31. json: { projectName: 'test' },
  32. },
  33. (err, response, body) => {
  34. expect(err).to.not.exist
  35. expect(response.statusCode).to.equal(403)
  36. expect(body).to.equal('Forbidden')
  37. done()
  38. }
  39. )
  40. })
  41. })
  42. })
  43. })
  44. })
  45. describe('login', function () {
  46. beforeEach('doLogin', async function () {
  47. await user.login()
  48. })
  49. it('should log the user in', async function () {
  50. const {
  51. response: { statusCode },
  52. } = await user.doRequest('GET', '/project')
  53. expect(statusCode).to.equal(200)
  54. })
  55. it('should emit an user auditLog entry for the login', async function () {
  56. const {
  57. auditLog: [auditLogEntry],
  58. } = await user.get()
  59. expect(auditLogEntry).to.exist
  60. expect(auditLogEntry.timestamp).to.exist
  61. delete auditLogEntry.timestamp
  62. expect(auditLogEntry).to.deep.equal({
  63. operation: 'login',
  64. ipAddress: '127.0.0.1',
  65. initiatorId: ObjectId(user.id),
  66. })
  67. })
  68. })
  69. })