user.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. process.env.NODE_ENV = 'test'
  2. let chai = require('chai')
  3. let chaiHttp = require('chai-http')
  4. let server = require('../server')
  5. let should = chai.should()
  6. let User = require('../models').User
  7. const Errors = require('../lib/errors.js')
  8. chai.use(chaiHttp)
  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', 'test')
  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(500)
  48. res.should.be.json
  49. res.body.should.have.property('error')
  50. res.body.error.should.deep.equal(Errors.accountAlreadyCreated)
  51. done()
  52. })
  53. })
  54. it('should throw an error if no username', (done) => {
  55. chai.request(server)
  56. .post('/api/v1/user')
  57. .set('content-type', 'application/x-www-form-urlencoded')
  58. .send({
  59. password: 'password'
  60. })
  61. .end((err, res) => {
  62. res.should.have.status(500)
  63. res.should.be.json
  64. res.body.should.have.property('error')
  65. res.body.error.should.deep.equal(Errors.missingParameter('username'))
  66. done()
  67. })
  68. })
  69. it('should throw an error if username is not a string', (done) => {
  70. chai.request(server)
  71. .post('/api/v1/user')
  72. .set('content-type', 'application/x-www-form-urlencoded')
  73. .send({
  74. username: 123,
  75. password: 'password'
  76. })
  77. .end((err, res) => {
  78. res.should.have.status(500)
  79. res.should.be.json
  80. res.body.should.have.property('error')
  81. res.body.error.should.deep.equal(Errors.invalidParameterType('username', 'string'))
  82. done()
  83. })
  84. })
  85. it('should throw an error if username less than 6 characters', (done) => {
  86. chai.request(server)
  87. .post('/api/v1/user')
  88. .set('content-type', 'application/x-www-form-urlencoded')
  89. .send({
  90. username: 'test',
  91. password: 'password'
  92. })
  93. .end((err, res) => {
  94. res.should.have.status(500)
  95. res.should.be.json
  96. res.body.should.have.property('error')
  97. res.body.error.should.deep.equal(Errors.parameterLengthTooSmall('username', '6'))
  98. done()
  99. })
  100. })
  101. it('should throw an error if username greater than 50 characters', (done) => {
  102. chai.request(server)
  103. .post('/api/v1/user')
  104. .set('content-type', 'application/x-www-form-urlencoded')
  105. .send({
  106. username: '123456789012345678901234567890123456789012345678901',
  107. password: 'password'
  108. })
  109. .end((err, res) => {
  110. res.should.have.status(500)
  111. res.should.be.json
  112. res.body.should.have.property('error')
  113. res.body.error.should.deep.equal(Errors.parameterLengthTooGreat('username', '50'))
  114. done()
  115. })
  116. })
  117. it('should throw an error if no password', (done) => {
  118. chai.request(server)
  119. .post('/api/v1/user')
  120. .set('content-type', 'application/x-www-form-urlencoded')
  121. .send({
  122. username: 'username1'
  123. })
  124. .end((err, res) => {
  125. res.should.have.status(500)
  126. res.should.be.json
  127. res.body.should.have.property('error')
  128. res.body.error.should.deep.equal(Errors.missingParameter('password'))
  129. done()
  130. })
  131. })
  132. it('should throw an error if password is not a string', (done) => {
  133. chai.request(server)
  134. .post('/api/v1/user')
  135. .set('content-type', 'application/x-www-form-urlencoded')
  136. .send({
  137. username: 'username1',
  138. password: 123
  139. })
  140. .end((err, res) => {
  141. res.should.have.status(500)
  142. res.should.be.json
  143. res.body.should.have.property('error')
  144. res.body.error.should.deep.equal(Errors.invalidParameterType('password', 'string'))
  145. done()
  146. })
  147. })
  148. it('should throw an error if password less than 6 characters', (done) => {
  149. chai.request(server)
  150. .post('/api/v1/user')
  151. .set('content-type', 'application/x-www-form-urlencoded')
  152. .send({
  153. username: 'username1',
  154. password: 'pass'
  155. })
  156. .end((err, res) => {
  157. res.should.have.status(500)
  158. res.should.be.json
  159. res.body.should.have.property('error')
  160. res.body.error.should.deep.equal(Errors.parameterLengthTooSmall('password', '6'))
  161. done()
  162. })
  163. })
  164. it('should throw an error if password greater than 100 characters', (done) => {
  165. chai.request(server)
  166. .post('/api/v1/user')
  167. .set('content-type', 'application/x-www-form-urlencoded')
  168. .send({
  169. username: 'username1',
  170. password: '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901'
  171. })
  172. .end((err, res) => {
  173. res.should.have.status(500)
  174. res.should.be.json
  175. res.body.should.have.property('error')
  176. res.body.error.should.deep.equal(Errors.parameterLengthTooGreat('password', '100'))
  177. done()
  178. })
  179. })
  180. })
  181. })