auth-test.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. require('./_common')
  2. const { User } = require('../lib/database')
  3. const { expect } = require('chai')
  4. const controllers = require('../lib/controllers')
  5. const JWT = require('jsonwebtoken')
  6. const config = require('../config')
  7. const server = require('../lib/server')
  8. describe('Authentication', () => {
  9. let user
  10. before(async () => {
  11. user = await User.create({
  12. email: 'test@example.com',
  13. password: 'hello world'
  14. })
  15. })
  16. describe('user record', () => {
  17. let userRecord
  18. before(async () => {
  19. userRecord = await User.find({where:{email: 'test@example.com'}})
  20. })
  21. it('should represent the user', async () => {
  22. expect(userRecord).to.not.be.null
  23. expect(userRecord.email).to.equal('test@example.com')
  24. })
  25. it('should have an encrypted password', () => {
  26. expect(userRecord.password).to.not.equal('hello world')
  27. })
  28. })
  29. it('should be able to log in', async () => {
  30. const result = (await server.inject({
  31. method: 'POST',
  32. url: '/auth/login',
  33. payload: {
  34. email: 'test@example.com',
  35. password: 'hello world'
  36. }
  37. })).result
  38. expect(result).to.exist
  39. expect(result.user).to.exist
  40. expect(result.token).to.exist
  41. expect(result.user.email).to.equal('test@example.com')
  42. const decoded = await JWT.verify(result.token, config.auth.jwtSecret)
  43. expect(decoded).to.exist
  44. expect(decoded.iat).to.be.finite
  45. expect(decoded.exp - decoded.iat).to.equal(config.auth.jwtExpires)
  46. })
  47. it('should reject invalid passwords', async () => {
  48. const result = await server.inject({
  49. method: 'POST',
  50. url: '/auth/login',
  51. payload: {
  52. email: 'test@example.com',
  53. password: 'goodbye world'
  54. }
  55. })
  56. expect(result.statusCode).to.equal(401)
  57. })
  58. it('should reject invalid logins', async () => {
  59. const result = await server.inject({
  60. method: 'POST',
  61. url: '/auth/login',
  62. payload: {
  63. email: 'idontexist@example.com',
  64. password: 'hello world'
  65. }
  66. })
  67. expect(result.statusCode).to.equal(401)
  68. })
  69. })