118 lines
3.0 KiB
JavaScript
118 lines
3.0 KiB
JavaScript
var app = require('../../examples/auth')
|
|
var request = require('supertest')
|
|
|
|
function getCookie(res) {
|
|
return res.headers['set-cookie'][0].split(';')[0];
|
|
}
|
|
|
|
describe('auth', function(){
|
|
describe('GET /',function(){
|
|
it('should redirect to /login', function(done){
|
|
request(app)
|
|
.get('/')
|
|
.expect('Location', '/login')
|
|
.expect(302, done)
|
|
})
|
|
})
|
|
|
|
describe('GET /login',function(){
|
|
it('should render login form', function(done){
|
|
request(app)
|
|
.get('/login')
|
|
.expect(200, /<form/, done)
|
|
})
|
|
|
|
it('should display login error for bad user', function (done) {
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=not-tj&password=foobar')
|
|
.expect('Location', '/login')
|
|
.expect(302, function(err, res){
|
|
if (err) return done(err)
|
|
request(app)
|
|
.get('/login')
|
|
.set('Cookie', getCookie(res))
|
|
.expect(200, /Authentication failed/, done)
|
|
})
|
|
})
|
|
|
|
it('should display login error for bad password', function (done) {
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=tj&password=nogood')
|
|
.expect('Location', '/login')
|
|
.expect(302, function (err, res) {
|
|
if (err) return done(err)
|
|
request(app)
|
|
.get('/login')
|
|
.set('Cookie', getCookie(res))
|
|
.expect(200, /Authentication failed/, done)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('GET /logout',function(){
|
|
it('should redirect to /', function(done){
|
|
request(app)
|
|
.get('/logout')
|
|
.expect('Location', '/')
|
|
.expect(302, done)
|
|
})
|
|
})
|
|
|
|
describe('GET /restricted',function(){
|
|
it('should redirect to /login without cookie', function(done){
|
|
request(app)
|
|
.get('/restricted')
|
|
.expect('Location', '/login')
|
|
.expect(302, done)
|
|
})
|
|
|
|
it('should succeed with proper cookie', function(done){
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=tj&password=foobar')
|
|
.expect('Location', '/')
|
|
.expect(302, function(err, res){
|
|
if (err) return done(err)
|
|
request(app)
|
|
.get('/restricted')
|
|
.set('Cookie', getCookie(res))
|
|
.expect(200, done)
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('POST /login', function(){
|
|
it('should fail without proper username', function(done){
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=not-tj&password=foobar')
|
|
.expect('Location', '/login')
|
|
.expect(302, done)
|
|
})
|
|
|
|
it('should fail without proper password', function(done){
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=tj&password=baz')
|
|
.expect('Location', '/login')
|
|
.expect(302, done)
|
|
})
|
|
|
|
it('should succeed with proper credentials', function(done){
|
|
request(app)
|
|
.post('/login')
|
|
.type('urlencoded')
|
|
.send('username=tj&password=foobar')
|
|
.expect('Location', '/')
|
|
.expect(302, done)
|
|
})
|
|
})
|
|
})
|