user.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. process.env.NODE_ENV = 'test'
  2. let chai = require('chai')
  3. let server = require('../server')
  4. let should = chai.should()
  5. let User = require('../models').User
  6. const Errors = require('../lib/errors.js')
  7. chai.use(require('chai-http'))
  8. chai.use(require('chai-things'))
  9. describe('User', () => {
  10. //Delete all rows in table after
  11. //tests completed
  12. after((done) => {
  13. User.sync({ force: true })
  14. .then(() => {
  15. done(null);
  16. })
  17. .catch((err) => {
  18. done(err)
  19. })
  20. })
  21. describe('/POST user', () => {
  22. it('should create an account', (done) => {
  23. chai.request(server)
  24. .post('/api/v1/user')
  25. .set('content-type', 'application/x-www-form-urlencoded')
  26. .send({
  27. username: 'username',
  28. password: 'password'
  29. })
  30. .end((err, res) => {
  31. res.should.have.status(200)
  32. res.should.be.json
  33. res.body.should.have.property('username', 'username')
  34. res.body.should.have.property('hash')
  35. done()
  36. })
  37. })
  38. it('should throw an error if account already created', (done) => {
  39. chai.request(server)
  40. .post('/api/v1/user')
  41. .set('content-type', 'application/x-www-form-urlencoded')
  42. .send({
  43. username: 'username',
  44. password: 'password'
  45. })
  46. .end((err, res) => {
  47. res.should.have.status(400)
  48. res.should.be.json
  49. res.body.should.have.property('errors')
  50. res.body.errors.should.include.something.that.deep.equals(Errors.accountAlreadyCreated)
  51. done()
  52. })
  53. })
  54. it('should throw an error if no username or password', (done) => {
  55. chai.request(server)
  56. .post('/api/v1/user')
  57. .set('content-type', 'application/x-www-form-urlencoded')
  58. .send({})
  59. .end((err, res) => {
  60. res.should.have.status(400)
  61. res.should.be.json
  62. res.body.should.have.property('errors')
  63. res.body.errors.should.include.something.that.deep.equals(Errors.missingParameter('username'))
  64. res.body.errors.should.include.something.that.deep.equals(Errors.missingParameter('password'))
  65. done()
  66. })
  67. })
  68. it('should throw an error if username or password are not a string', (done) => {
  69. chai.request(server)
  70. .post('/api/v1/user')
  71. .set('content-type', 'application/json')
  72. .send({
  73. username: 123,
  74. password: 123
  75. })
  76. .end((err, res) => {
  77. res.should.have.status(400)
  78. res.should.be.json
  79. res.body.should.have.property('errors')
  80. res.body.should.have.property('errors')
  81. res.body.errors.should.include.something.that.deep.equals(Errors.invalidParameterType('username', 'string'))
  82. res.body.errors.should.include.something.that.deep.equals(Errors.invalidParameterType('password', 'string'))
  83. done()
  84. })
  85. })
  86. it('should throw an error if username or password less than 6 characters', (done) => {
  87. chai.request(server)
  88. .post('/api/v1/user')
  89. .set('content-type', 'application/x-www-form-urlencoded')
  90. .send({
  91. username: 'test',
  92. password: 'pass'
  93. })
  94. .end((err, res) => {
  95. res.should.have.status(400)
  96. res.should.be.json
  97. res.body.should.have.property('errors')
  98. res.body.errors.should.contain.something.that.deep.equals(Errors.parameterLengthTooSmall('username', '6'))
  99. res.body.errors.should.contain.something.that.deep.equals(Errors.parameterLengthTooSmall('password', '6'))
  100. done()
  101. })
  102. })
  103. it('should throw an error if username greater than 50 characters or password is greater than 100 characters', (done) => {
  104. chai.request(server)
  105. .post('/api/v1/user')
  106. .set('content-type', 'application/x-www-form-urlencoded')
  107. .send({
  108. username: '123456789012345678901234567890123456789012345678901',
  109. password: '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901'
  110. })
  111. .end((err, res) => {
  112. res.should.have.status(400)
  113. res.should.be.json
  114. res.body.should.have.property('errors')
  115. res.body.errors.should.contain.something.that.deep.equals(Errors.parameterLengthTooLarge('username', '50'))
  116. res.body.errors.should.contain.something.that.deep.equals(Errors.parameterLengthTooLarge('password', '100'))
  117. done()
  118. })
  119. })
  120. })
  121. })