mirror of
https://github.com/Foltik/Shimapan
synced 2025-01-05 15:58:03 -05:00
Move test functions to util file
This commit is contained in:
parent
907478e6f1
commit
9a090d794d
274
test/api.js
274
test/api.js
@ -5,203 +5,32 @@ var async = require('async');
|
||||
var mongoose = require('mongoose');
|
||||
var User = require('../app/models/User.js');
|
||||
var Invite = require('../app/models/Invite.js');
|
||||
var Upload = require('../app/models/Upload.js');
|
||||
var Token = require('../app/models/Token.js');
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var chai = require('chai');
|
||||
var http = require('chai-http');
|
||||
var should = chai.should();
|
||||
var app = require('../server');
|
||||
var server = app.server;
|
||||
var db = app.db;
|
||||
|
||||
chai.use(http);
|
||||
|
||||
function register(user, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/auth/register')
|
||||
.send(user)
|
||||
.end(cb);
|
||||
}
|
||||
|
||||
function verifySuccessfulRegister(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('token');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedUserRegister(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Username in use.');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedInviteRegister(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid invite code.');
|
||||
done();
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function login(user, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/auth/login')
|
||||
.send(user)
|
||||
.end(cb);
|
||||
}
|
||||
|
||||
function verifySuccessfulLogin(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('token');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedUsernameLogin(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid username.');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedPasswordLogin(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid password.');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function upload(token, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/upload')
|
||||
.attach('file', 'test/test.png')
|
||||
.set('Authorization', 'Bearer ' + token)
|
||||
.end(cb);
|
||||
}
|
||||
|
||||
function loginUpload(user, cb) {
|
||||
login(user, function(err, res) {
|
||||
upload(res.body.token, cb);
|
||||
});
|
||||
}
|
||||
|
||||
function verifySuccessfulUpload(user, done) {
|
||||
loginUpload(user, function(err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.have.be.a('object');
|
||||
res.body.should.have.property('name');
|
||||
res.body.should.have.property('oname');
|
||||
res.body.should.have.property('created');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedSizeUpload(user, done) {
|
||||
loginUpload(user, done, function(err, res) {
|
||||
//TODO
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedPermissionUpload(user, done) {
|
||||
loginUpload(user, function(err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Permission error.');
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
function verifyFailedAuthUpload(done) {
|
||||
async.parallel([
|
||||
function(cb) {
|
||||
upload('bogus', function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('UnauthorizedError: jwt malformed');
|
||||
cb();
|
||||
});
|
||||
},
|
||||
function(cb) {
|
||||
upload('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.' +
|
||||
'eyJpc3MiOiJzaGltYXBhbi5yb2NrcyIsImlhd' +
|
||||
'CI6MTUwNzkyNTAyNSwiZXhwIjoxNTM5NDYxMD' +
|
||||
'I1LCJhdWQiOiJ3d3cuc2hpbWFwYW4ucm9ja3M' +
|
||||
'iLCJzdWIiOiJUZXN0VXNlciIsInVzZXJuYW1l' +
|
||||
'IjoiVGVzdFVzZXIiLCJzY29wZSI6ImZpbGUud' +
|
||||
'XBsb2FkIn0.e746_BNNuxlbXKESKKYsxl6e5j' +
|
||||
'8JwmEFxO3zRf66tWo', function(err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('UnauthorizedError: invalid signature');
|
||||
cb();
|
||||
})
|
||||
}
|
||||
], function(err, res) {
|
||||
if (err) console.log(err);
|
||||
done();
|
||||
});
|
||||
}
|
||||
var util = require('./testUtil.js');
|
||||
|
||||
before(function (done) {
|
||||
async.series([
|
||||
function (cb) {
|
||||
db.once('open', function () {
|
||||
cb();
|
||||
});
|
||||
util.resetDatabase(cb);
|
||||
},
|
||||
function (cb) {
|
||||
User.remove({}, function (err) {
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function (cb) {
|
||||
Invite.remove({}, function (err) {
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function (cb) {
|
||||
var inv = new Invite();
|
||||
inv.code = 'TestCode1';
|
||||
inv.scope = ['test.perm'];
|
||||
inv.save(function (err) {
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function (cb) {
|
||||
var inv = new Invite();
|
||||
inv.code = 'TestCode2';
|
||||
inv.scope = ['test.perm', 'file.upload'];
|
||||
inv.save(function (err) {
|
||||
cb(err);
|
||||
});
|
||||
},
|
||||
function (cb) {
|
||||
var inv = new Invite();
|
||||
inv.code = 'TestCode3';
|
||||
|
||||
var yesterday = new Date();
|
||||
yesterday.setDate(yesterday.getDate() - 1);
|
||||
inv.exp = yesterday;
|
||||
|
||||
inv.scope = ['test.perm', 'file.upload'];
|
||||
inv.save(function (err) {
|
||||
cb(err);
|
||||
});
|
||||
function(cb) {
|
||||
util.createInvites([{
|
||||
code: 'TestCode1',
|
||||
scope: ['test.perm']
|
||||
}, {
|
||||
code: 'TestCode2'
|
||||
}, {
|
||||
code: 'TestCode3',
|
||||
exp: new Date() - 1
|
||||
}
|
||||
], cb);
|
||||
}
|
||||
], function (err) {
|
||||
if (err) console.log(err);
|
||||
@ -212,92 +41,74 @@ before(function (done) {
|
||||
describe('Users', function () {
|
||||
describe('/POST register', function () {
|
||||
it('SHOULD register valid user, valid invite', function (done) {
|
||||
var user = {
|
||||
util.verifySuccessfulRegister({
|
||||
username: 'TestUser1',
|
||||
password: 'TestPassword',
|
||||
invite: 'TestCode1'
|
||||
};
|
||||
|
||||
verifySuccessfulRegister(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD register another valid user, valid invite', function(done) {
|
||||
var user = {
|
||||
util.verifySuccessfulRegister({
|
||||
username: 'TestUser2',
|
||||
password: 'TestPassword',
|
||||
invite: 'TestCode2'
|
||||
};
|
||||
|
||||
verifySuccessfulRegister(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT register invalid user, valid invite', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedUserRegister({
|
||||
username: 'TestUser1',
|
||||
password: 'TestPassword',
|
||||
invite: 'TestCode2'
|
||||
};
|
||||
|
||||
verifyFailedUserRegister(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT register valid user, nonexistant invite', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedInviteRegister({
|
||||
username: 'TestUser3',
|
||||
password: 'TestPassword',
|
||||
invite: 'bogus'
|
||||
};
|
||||
|
||||
verifyFailedInviteRegister(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT register valid user, used invite', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedInviteRegister({
|
||||
username: 'TestUser3',
|
||||
password: 'TestPassword',
|
||||
invite: 'TestCode1'
|
||||
};
|
||||
|
||||
verifyFailedInviteRegister(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT register valid user, expired invite', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedInviteRegister({
|
||||
username: 'TestUser3',
|
||||
password: 'TestPassword',
|
||||
invite: 'TestCode3'
|
||||
};
|
||||
|
||||
verifyFailedInviteRegister(user, done);
|
||||
}, done);
|
||||
})
|
||||
});
|
||||
|
||||
describe('/POST login', function () {
|
||||
it('SHOULD accept valid user, valid password', function (done) {
|
||||
var user = {
|
||||
util.verifySuccessfulLogin({
|
||||
username: 'TestUser1',
|
||||
password: 'TestPassword'
|
||||
};
|
||||
|
||||
verifySuccessfulLogin(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT accept valid user, invalid password', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedPasswordLogin({
|
||||
username: 'TestUser1',
|
||||
password: 'bogus'
|
||||
};
|
||||
|
||||
verifyFailedPasswordLogin(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT accept invalid user, any password', function (done) {
|
||||
var user = {
|
||||
util.verifyFailedUsernameLogin({
|
||||
username: 'BogusTestUser',
|
||||
password: 'bogus'
|
||||
};
|
||||
|
||||
verifyFailedUsernameLogin(user, done);
|
||||
}, done);
|
||||
});
|
||||
});
|
||||
|
||||
@ -306,25 +117,28 @@ describe('Users', function () {
|
||||
describe('Uploads', function () {
|
||||
describe('/POST upload', function () {
|
||||
it('SHOULD accept logged in valid upload', function(done) {
|
||||
var user = {
|
||||
util.verifySuccessfulUpload({
|
||||
username: 'TestUser2',
|
||||
password: 'TestPassword'
|
||||
};
|
||||
|
||||
verifySuccessfulUpload(user, done);
|
||||
}, done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT accept unauthenticated valid upload', function(done) {
|
||||
verifyFailedAuthUpload(done);
|
||||
util.verifyFailedAuthUpload(done);
|
||||
});
|
||||
|
||||
it('SHOULD NOT accept invalid permission, valid upload', function(done) {
|
||||
var user = {
|
||||
util.verifyFailedPermissionUpload({
|
||||
username: 'TestUser1',
|
||||
password: 'TestPassword'
|
||||
};
|
||||
}, done);
|
||||
});
|
||||
|
||||
verifyFailedPermissionUpload(user, done);
|
||||
it('SHOULD NOT accept invalid size upload', function(done) {
|
||||
util.verifyFailedSizeUpload({
|
||||
username: 'TestUser2',
|
||||
password: 'TestPassword'
|
||||
}, done);
|
||||
})
|
||||
});
|
||||
});
|
||||
|
244
test/testUtil.js
Normal file
244
test/testUtil.js
Normal file
@ -0,0 +1,244 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
var async = require('async');
|
||||
|
||||
var mongoose = require('mongoose');
|
||||
var User = require('../app/models/User.js');
|
||||
var Invite = require('../app/models/Invite.js');
|
||||
var Upload = require('../app/models/Upload.js');
|
||||
var Token = require('../app/models/Token.js');
|
||||
|
||||
var chai = require('chai');
|
||||
var http = require('chai-http');
|
||||
var app = require('../server');
|
||||
var server = app.server;
|
||||
var db = app.db;
|
||||
|
||||
chai.use(http);
|
||||
|
||||
//---------------- DATABASE UTIL ----------------//
|
||||
|
||||
var resetDatabase = function(callback) {
|
||||
db.once('open', function() {
|
||||
async.each([
|
||||
User, Invite, Upload, Token
|
||||
], function(schema, cb) {
|
||||
schema.remove({}, function(err) {
|
||||
cb(err);
|
||||
});
|
||||
}, function(err) {
|
||||
if (err) console.log(err);
|
||||
callback();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var createInvites = function(invites, callback) {
|
||||
async.each(invites, function(invite, cb) {
|
||||
if (!invite.scope) {
|
||||
invite.scope = ['test.perm', 'file.upload'];
|
||||
}
|
||||
if (!invite.exp) {
|
||||
var date = new Date();
|
||||
date.setDate(date.getDate() + 7);
|
||||
invite.exp = date;
|
||||
}
|
||||
|
||||
invite.issuer = 'Mocha';
|
||||
invite.issued = new Date();
|
||||
|
||||
Invite.create(invite, function(err) {
|
||||
cb(err);
|
||||
});
|
||||
}, function(err) {
|
||||
if (err) console.log(err);
|
||||
callback();
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------- REGISTER UTIL ----------------//
|
||||
|
||||
var register = function(user, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/auth/register')
|
||||
.send(user)
|
||||
.end(cb);
|
||||
};
|
||||
|
||||
var verifySuccessfulRegister = function(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('token');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedUserRegister = function(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Username in use.');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedInviteRegister = function(user, done) {
|
||||
register(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid invite code.');
|
||||
done();
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------- LOGIN UTIL ----------------//
|
||||
|
||||
var login = function(user, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/auth/login')
|
||||
.send(user)
|
||||
.end(cb);
|
||||
};
|
||||
|
||||
var verifySuccessfulLogin = function(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('token');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedUsernameLogin = function(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid username.');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedPasswordLogin = function(user, done) {
|
||||
login(user, function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Invalid password.');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
//---------------- UPLOAD UTIL ----------------//
|
||||
|
||||
var upload = function(token, file, cb) {
|
||||
chai.request(server)
|
||||
.post('/api/upload')
|
||||
.attach('file', file)
|
||||
.set('Authorization', 'Bearer ' + token)
|
||||
.end(cb);
|
||||
};
|
||||
|
||||
var loginUpload = function(user, cb) {
|
||||
login(user, function(err, res) {
|
||||
upload(res.body.token, 'test/test.png', cb);
|
||||
});
|
||||
};
|
||||
|
||||
var loginUploadFile = function(user, file, cb) {
|
||||
login(user, function(err, res) {
|
||||
upload(res.body.token, file, cb);
|
||||
});
|
||||
};
|
||||
|
||||
var verifySuccessfulUpload = function(user, done) {
|
||||
loginUpload(user, function(err, res) {
|
||||
res.should.have.status(200);
|
||||
res.body.should.have.be.a('object');
|
||||
res.body.should.have.property('name');
|
||||
res.body.should.have.property('oname');
|
||||
res.body.should.have.property('created');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedSizeUpload = function(user, done) {
|
||||
loginUploadFile(user, 'test/large.bin', function(err, res) {
|
||||
res.should.have.status(413);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('File too large.');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedPermissionUpload = function(user, done) {
|
||||
loginUpload(user, function(err, res) {
|
||||
res.should.have.status(403);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('Permission error.');
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
var verifyFailedAuthUpload = function(done) {
|
||||
async.parallel([
|
||||
function(cb) {
|
||||
upload('bogus', 'test/test.png', function (err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('UnauthorizedError: jwt malformed');
|
||||
cb();
|
||||
});
|
||||
},
|
||||
function(cb) {
|
||||
upload('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.' +
|
||||
'eyJpc3MiOiJzaGltYXBhbi5yb2NrcyIsImlhd' +
|
||||
'CI6MTUwNzkyNTAyNSwiZXhwIjoxNTM5NDYxMD' +
|
||||
'I1LCJhdWQiOiJ3d3cuc2hpbWFwYW4ucm9ja3M' +
|
||||
'iLCJzdWIiOiJUZXN0VXNlciIsInVzZXJuYW1l' +
|
||||
'IjoiVGVzdFVzZXIiLCJzY29wZSI6ImZpbGUud' +
|
||||
'XBsb2FkIn0.e746_BNNuxlbXKESKKYsxl6e5j' +
|
||||
'8JwmEFxO3zRf66tWo',
|
||||
'test/test.png',
|
||||
function(err, res) {
|
||||
res.should.have.status(401);
|
||||
res.body.should.be.a('object');
|
||||
res.body.should.have.property('message').eql('UnauthorizedError: invalid signature');
|
||||
cb();
|
||||
})
|
||||
}
|
||||
], function(err, res) {
|
||||
if (err) console.log(err);
|
||||
done();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
resetDatabase: resetDatabase,
|
||||
|
||||
createInvites: createInvites,
|
||||
|
||||
register: register,
|
||||
verifySuccessfulRegister: verifySuccessfulRegister,
|
||||
verifyFailedUserRegister: verifyFailedUserRegister,
|
||||
verifyFailedInviteRegister: verifyFailedInviteRegister,
|
||||
|
||||
login: login,
|
||||
verifySuccessfulLogin: verifySuccessfulLogin,
|
||||
verifyFailedUsernameLogin: verifyFailedUsernameLogin,
|
||||
verifyFailedPasswordLogin: verifyFailedPasswordLogin,
|
||||
|
||||
upload: upload,
|
||||
loginUpload: loginUpload,
|
||||
verifySuccessfulUpload: verifySuccessfulUpload,
|
||||
verifyFailedAuthUpload: verifyFailedAuthUpload,
|
||||
verifyFailedPermissionUpload: verifyFailedPermissionUpload,
|
||||
verifyFailedSizeUpload: verifyFailedSizeUpload
|
||||
};
|
Loading…
Reference in New Issue
Block a user