tellform/app/tests/form.server.routes.test.js

343 lines
9.3 KiB
JavaScript
Raw Normal View History

2015-10-07 01:16:47 +00:00
'use strict';
var should = require('should'),
2015-12-12 20:08:48 +00:00
lodash = require('lodash'),
2015-10-07 01:16:47 +00:00
app = require('../../server'),
request = require('supertest'),
2016-03-30 03:45:16 +00:00
Session = require('supertest-session'),
2015-10-07 01:16:47 +00:00
mongoose = require('mongoose'),
User = mongoose.model('User'),
Form = mongoose.model('Form'),
Field = mongoose.model('Field'),
2016-04-21 17:56:54 +00:00
FormSubmission = mongoose.model('FormSubmission');
2015-10-07 01:16:47 +00:00
2016-11-09 20:25:38 +00:00
/**
* Globals
*/
var credentials, user, myForm, userSession;
2015-10-07 01:16:47 +00:00
/**
* Form routes tests
*/
2015-10-30 18:40:02 +00:00
describe('Form Routes Unit tests', function() {
2015-10-07 01:16:47 +00:00
beforeEach(function(done) {
// Create user credentials
credentials = {
2016-11-09 20:25:38 +00:00
username: 'test',
2016-04-21 17:56:54 +00:00
email: 'test@test.com',
2015-10-07 01:16:47 +00:00
password: 'password'
};
// Create a new user
user = new User({
firstName: 'Full',
lastName: 'Name',
2015-12-12 20:08:48 +00:00
displayName: 'Full Name',
2016-11-09 20:25:38 +00:00
email: credentials.email,
2015-10-07 01:16:47 +00:00
username: credentials.username,
password: credentials.password,
provider: 'local'
});
// Save a user to the test db and create new Form
user.save(function(err) {
2015-12-12 20:08:48 +00:00
should.not.exist(err);
2015-10-30 18:40:02 +00:00
myForm = {
2015-10-07 01:16:47 +00:00
title: 'Form Title',
2016-11-09 20:25:38 +00:00
language: 'en',
2016-03-30 03:45:16 +00:00
admin: user.id,
form_fields: [
2015-10-07 01:16:47 +00:00
new Field({'fieldType':'textfield', 'title':'First Name', 'fieldValue': ''}),
new Field({'fieldType':'checkbox', 'title':'nascar', 'fieldValue': ''}),
new Field({'fieldType':'checkbox', 'title':'hockey', 'fieldValue': ''})
]
};
2016-11-09 20:25:38 +00:00
2016-04-21 17:56:54 +00:00
//Initialize Session
userSession = Session(app);
2015-10-07 01:16:47 +00:00
done();
});
});
2016-04-21 18:48:35 +00:00
it(' > should be able to upload a PDF to Form if signed in', function(done) {
userSession.post('/auth/signin')
.send(credentials)
.expect('Content-Type', /json/)
.expect(200)
.end(function(signinErr, signinRes) {
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Handle signin error
if (signinErr) return done(signinErr);
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
var user = signinRes.body;
var userId = user._id;
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Save a new Form
userSession.post('/forms')
.send({form: myForm})
2016-03-30 01:21:45 +00:00
.expect('Content-Type', /json/)
.expect(200)
2016-04-21 18:48:35 +00:00
.end(function(FormSaveErr, FormSaveRes) {
2016-03-30 01:21:45 +00:00
// Handle Form save error
2016-04-21 18:48:35 +00:00
if (FormSaveErr) return done(FormSaveErr);
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Get a list of Forms
userSession.get('/forms')
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormsGetErr, FormsGetRes) {
// Handle Form save error
if (FormsGetErr) return done(FormsGetErr);
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Get Forms list
var Forms = FormsGetRes.body;
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Set assertions
(Forms[0].admin).should.equal(userId);
(Forms[0].title).should.match('Form Title');
// Call the assertion callback
done();
});
});
});
2016-03-30 01:21:45 +00:00
});
2016-04-21 18:48:35 +00:00
it(' > should not be able to create a Form if not logged in', function(done) {
2016-04-21 17:56:54 +00:00
userSession.post('/forms')
2016-03-30 01:21:45 +00:00
.send({form: myForm})
.expect(401)
.end(function(FormSaveErr, FormSaveRes) {
// Call the assertion callback
done(FormSaveErr);
});
});
it(' > should not be able to get list of users\' Forms if not logged in', function(done) {
2016-04-21 17:56:54 +00:00
userSession.get('/forms')
2016-03-30 01:21:45 +00:00
.expect(401)
.end(function(FormSaveErr, FormSaveRes) {
// Call the assertion callback
done(FormSaveErr);
});
});
2015-10-07 01:16:47 +00:00
it(' > should not be able to save a Form if no title is provided', function(done) {
2015-10-07 01:16:47 +00:00
// Set Form with a invalid title field
2015-10-30 18:40:02 +00:00
myForm.title = '';
2015-10-07 01:16:47 +00:00
2016-04-21 17:56:54 +00:00
userSession.post('/auth/signin')
2015-10-07 01:16:47 +00:00
.send(credentials)
.expect('Content-Type', /json/)
.expect(200)
.end(function(signinErr, signinRes) {
2015-12-12 20:08:48 +00:00
should.not.exist(signinErr);
2015-10-07 01:16:47 +00:00
// Save a new Form
2016-04-21 17:56:54 +00:00
userSession.post('/forms')
.send({form: myForm})
.expect(400)
.end(function(FormSaveErr, FormSaveRes) {
// Set message assertion
(FormSaveRes.body.message).should.equal('Form Title cannot be blank');
done();
});
2015-10-07 01:16:47 +00:00
});
});
2016-03-30 01:21:45 +00:00
it(' > should be able to update a Form if signed in', function(done) {
userSession.post('/auth/signin')
.send(credentials)
.expect('Content-Type', /json/)
.expect(200)
.end(function(signinErr, signinRes) {
// Handle signin error
if (signinErr) return done(signinErr);
// Save a new Form
userSession.post('/forms')
.send({form: myForm})
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormSaveErr, FormSaveRes) {
// Handle Form save error
if (FormSaveErr) return done(FormSaveErr);
// Update Form title
myForm.title = 'WHY YOU GOTTA BE SO MEAN?';
// Update an existing Form
2016-03-30 03:45:16 +00:00
userSession.put('/forms/' + FormSaveRes.body._id)
2016-03-30 01:21:45 +00:00
.send({form: myForm})
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormUpdateErr, FormUpdateRes) {
// Handle Form update error
if (FormUpdateErr) done(FormUpdateErr);
// Set assertions
2016-03-30 03:45:16 +00:00
(FormUpdateRes.body._id).should.equal(FormSaveRes.body._id);
2016-03-30 01:21:45 +00:00
(FormUpdateRes.body.title).should.match('WHY YOU GOTTA BE SO MEAN?');
// Call the assertion callback
done();
});
});
});
});
it(' > should be able to read/get a Form if not signed in', function(done) {
// Create new Form model instance
var FormObj = new Form(myForm);
// Save the Form
FormObj.save(function(err, form) {
if(err) return done(err);
2016-04-21 17:56:54 +00:00
userSession.get('/forms/' + form._id)
2016-03-30 01:21:45 +00:00
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if(err) return done(err)
// Set assertion
(res.body).should.be.an.Object.with.property('title', myForm.title);
// Call the assertion callback
done();
});
});
});
it(' > should be able to delete a Form if signed in', function(done) {
userSession.post('/auth/signin')
.send(credentials)
.expect('Content-Type', /json/)
.expect(200)
.end(function(signinErr, signinRes) {
// Handle signin error
if (signinErr) return done(signinErr);
// Save a new Form
userSession.post('/forms')
.send({form: myForm})
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormSaveErr, FormSaveRes) {
// Handle Form save error
if (FormSaveErr) return done(FormSaveErr);
// Delete an existing Form
2016-03-30 03:45:16 +00:00
userSession.delete('/forms/' + FormSaveRes.body._id)
2016-03-30 01:21:45 +00:00
.send(myForm)
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormDeleteErr, FormDeleteRes) {
// Handle Form error error
if (FormDeleteErr) return done(FormDeleteErr);
// Set assertions
2016-04-21 17:56:54 +00:00
should.exist(FormDeleteRes.body);
2016-03-30 03:45:16 +00:00
// (FormDeleteRes.body._id).should.equal(FormSaveRes.body._id);
2016-03-30 01:21:45 +00:00
// Call the assertion callback
done();
});
});
});
});
it(' > should not be able to delete an Form if not signed in', function(done) {
// Set Form user
myForm.admin = user;
// Create new Form model instance
var FormObj = new Form(myForm);
// Save the Form
FormObj.save(function() {
// Try deleting Form
2016-04-21 17:56:54 +00:00
userSession.delete('/forms/' + FormObj._id)
2016-03-30 01:21:45 +00:00
.expect(401)
.end(function(FormDeleteErr, FormDeleteRes) {
// Handle Form error error
done(FormDeleteErr);
});
});
});
2016-04-21 18:48:35 +00:00
describe(' > Login and Save a new Form >', function() {
var _user, _form, _userSession = Session(app);
it('should be able to login as user', function(done){
_userSession.post('/auth/signin')
.send(credentials)
.expect('Content-Type', /json/)
.expect(200)
.end(function(signinErr, signinRes) {
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Handle signin error
if (signinErr) return done(signinErr);
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
_user = signinRes.body;
// Save a new Form
_userSession.post('/forms')
.send({form: myForm})
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormSaveErr, FormSaveRes) {
// Handle Form save error
if (FormSaveErr) return done(FormSaveErr);
_form = FormSaveRes.body;
// Get a list of Forms
_userSession.get('/forms/'+_form._id)
.expect('Content-Type', /json/)
.expect(200)
.end(function(FormsGetErr, FormsGetRes) {
// Handle Form save error
if (FormsGetErr) return done(FormsGetErr);
var fetchedForm = FormsGetRes.body;
// Set assertions
(fetchedForm.admin._id).should.equal(_user._id);
(fetchedForm.title).should.match(_form.title);
// Call the assertion callback
done();
});
});
});
});
after('should be able to signout user', function(done){
userSession.get('/auth/signout')
.end(function(signoutErr, signoutRes) {
2016-03-30 01:21:45 +00:00
2016-04-21 18:48:35 +00:00
// Handle signout error
if (signoutErr) return done(signoutErr);
_userSession.destroy();
done();
});
});
2016-03-30 01:21:45 +00:00
});
2015-10-07 01:16:47 +00:00
afterEach(function(done) {
2015-10-30 18:40:02 +00:00
Form.remove({}).exec(function() {
2016-04-21 18:48:35 +00:00
User.remove({}).exec(function() {
userSession.destroy();
done();
});
2015-10-07 01:16:47 +00:00
});
});
});