126 lines
3.9 KiB
JavaScript
126 lines
3.9 KiB
JavaScript
const request = require('supertest')
|
|
, config = require('./config')
|
|
, should = require('should')
|
|
|
|
const baseURL = config.baseURL;
|
|
|
|
describe('Exercise 1. Static file Server', function(){
|
|
it('should download root file', function(done){
|
|
request(baseURL)
|
|
.get('/file/hello.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('hello\.txt'|"hello\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('Hello Express.js');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should download level-1 file', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/level-1/hello.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('hello\.txt'|"hello\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('Hello from level 1!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should download level-2 file', function(done){
|
|
request(baseURL)
|
|
.get('/file/level-1/level-2/foo-2.js')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('foo-2\.js'|"foo-2\.js")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should download level-7 file', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/level-1/level-2/level-3/level-4/level-5/level-6/level-7/level7.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('level7\.txt'|"level7\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('You made it to level 7!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should handle white space characters', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/hello world node.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('hello world node\.txt'|"hello world node\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('I have spaces in my file name');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should handle lowercase and uppercase', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/UppeRCaSeLowerCASE.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('UppeRCaSeLowerCASE\.txt'|"UppeRCaSeLowerCASE\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('My filename has uppercase and lowercase characters');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should handle files start with a number', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/0.txt')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('0\.txt'|"0\.txt")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('My filename starts with a number');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should handle files with no extension', function(done){
|
|
request.agent(baseURL)
|
|
.get('/file/identitycrisis')
|
|
.expect(200)
|
|
.expect('Content-Disposition', /attachment;.*filename=('identitycrisis'|"identitycrisis")/)
|
|
.end(function(err,res){
|
|
if (err) return done(err);
|
|
res.text.should.equal('I have no extension');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should reply with a 404 if file does not exist', function(done){
|
|
request(baseURL)
|
|
.get('/file/filethatdoesnotexist')
|
|
.expect(404, done);
|
|
});
|
|
|
|
it('should reply with a 405 if a method other than GET is used', function(done){
|
|
request(baseURL)
|
|
.post('/file/hello.txt')
|
|
.expect(405)
|
|
.end(function(err){
|
|
if (err) return done(err);
|
|
request(baseURL)
|
|
.put('/file/hello.txt')
|
|
.expect(405)
|
|
.end(function(err){
|
|
if (err) return done(err);
|
|
request(baseURL)
|
|
.del('/file/hello.txt')
|
|
.expect(405, done);
|
|
});
|
|
});
|
|
});
|
|
});
|