123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- import app from '../bin/server'
- import supertest from 'supertest'
- import {cleanDb} from './utils'
- import {expect, should} from 'chai'
- should()
- const request = supertest.agent(app.listen())
- const context = {}
- describe('Users', () => {
-
- before((done) => {
- cleanDb()
- done()
- })
- describe('POST /users', () => {
- it('should reject signup when data is incomplete', (done) => {
- request
- .post('/users')
- .set('Accept', 'application/json')
- .send({ username: 'supercoolname' })
- .expect(422, done)
- })
- it('should sign up', (done) => {
- request
- .post('/users')
- .set('Accept', 'application/json')
- .send({ user: { username: 'supercoolname', password: 'supersecretpassword' } })
- .expect(200, (err, res) => {
- if (err) { return done(err) }
- res.body.user.should.have.property('username')
- res.body.user.username.should.equal('supercoolname')
- expect(res.body.user.password).to.not.exist
- context.user = res.body.user
- context.token = res.body.token
- done()
- })
- })
- })
- describe('GET /users', () => {
- it('should not fetch users if the authorization header is missing', (done) => {
- request
- .get('/users')
- .set('Accept', 'application/json')
- .expect(401, done)
- })
- it('should not fetch users if the authorization header is missing the scheme', (done) => {
- request
- .get('/users')
- .set({
- Accept: 'application/json',
- Authorization: '1'
- })
- .expect(401, done)
- })
- it('should not fetch users if the authorization header has invalid scheme', (done) => {
- const { token } = context
- request
- .get('/users')
- .set({
- Accept: 'application/json',
- Authorization: `Unknown ${token}`
- })
- .expect(401, done)
- })
- it('should not fetch users if token is invalid', (done) => {
- request
- .get('/users')
- .set({
- Accept: 'application/json',
- Authorization: 'Bearer 1'
- })
- .expect(401, done)
- })
- it('should fetch all users', (done) => {
- const { token } = context
- request
- .get('/users')
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(200, (err, res) => {
- if (err) { return done(err) }
- res.body.should.have.property('users')
- res.body.users.should.have.length(1)
- done()
- })
- })
- })
- describe('GET /users/:id', () => {
- it('should not fetch user if token is invalid', (done) => {
- request
- .get('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: 'Bearer 1'
- })
- .expect(401, done)
- })
- it('should throw 404 if user doesn\'t exist', (done) => {
- const { token } = context
- request
- .get('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(404, done)
- })
- it('should fetch user', (done) => {
- const {
- user: { _id },
- token
- } = context
- request
- .get(`/users/${_id}`)
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(200, (err, res) => {
- if (err) { return done(err) }
- res.body.should.have.property('user')
- expect(res.body.user.password).to.not.exist
- done()
- })
- })
- })
- describe('PUT /users/:id', () => {
- it('should not update user if token is invalid', (done) => {
- request
- .put('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: 'Bearer 1'
- })
- .expect(401, done)
- })
- it('should throw 404 if user doesn\'t exist', (done) => {
- const { token } = context
- request
- .put('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(404, done)
- })
- it('should update user', (done) => {
- const {
- user: { _id },
- token
- } = context
- request
- .put(`/users/${_id}`)
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .send({ user: { username: 'updatedcoolname' } })
- .expect(200, (err, res) => {
- if (err) { return done(err) }
- res.body.user.should.have.property('username')
- res.body.user.username.should.equal('updatedcoolname')
- expect(res.body.user.password).to.not.exist
- done()
- })
- })
- })
- describe('DELETE /users/:id', () => {
- it('should not delete user if token is invalid', (done) => {
- request
- .delete('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: 'Bearer 1'
- })
- .expect(401, done)
- })
- it('should throw 404 if user doesn\'t exist', (done) => {
- const { token } = context
- request
- .delete('/users/1')
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(404, done)
- })
- it('should delete user', (done) => {
- const {
- user: { _id },
- token
- } = context
- request
- .delete(`/users/${_id}`)
- .set({
- Accept: 'application/json',
- Authorization: `Bearer ${token}`
- })
- .expect(200, done)
- })
- })
- })
|