added stuff
This commit is contained in:
parent
4d20c36540
commit
90e00a98ba
@ -14,11 +14,13 @@ var mongoose = require('mongoose'),
|
|||||||
util = require('util');
|
util = require('util');
|
||||||
|
|
||||||
//Mongoose Models
|
//Mongoose Models
|
||||||
|
var FieldSchema = require('./form_field.server.model.js');
|
||||||
|
var Field = mongoose.model('Field');
|
||||||
|
|
||||||
var FormSubmissionSchema = require('./form_submission.server.model.js'),
|
var FormSubmissionSchema = require('./form_submission.server.model.js'),
|
||||||
FieldSchema = require('./form_field.server.model.js'),
|
|
||||||
Field = mongoose.model('Field', FieldSchema),
|
|
||||||
FormSubmission = mongoose.model('FormSubmission', FormSubmissionSchema);
|
FormSubmission = mongoose.model('FormSubmission', FormSubmissionSchema);
|
||||||
|
|
||||||
|
|
||||||
var ButtonSchema = new Schema({
|
var ButtonSchema = new Schema({
|
||||||
url: {
|
url: {
|
||||||
type: String,
|
type: String,
|
||||||
@ -64,10 +66,9 @@ var FormSchema = new Schema({
|
|||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
form_fields: [Field],
|
form_fields: [{
|
||||||
//form_fields: {
|
type: Schema.Types.Mixed
|
||||||
// type: [FieldSchema],
|
}],
|
||||||
//},
|
|
||||||
|
|
||||||
submissions: [{
|
submissions: [{
|
||||||
type: Schema.Types.ObjectId,
|
type: Schema.Types.ObjectId,
|
||||||
@ -163,11 +164,9 @@ var FormSchema = new Schema({
|
|||||||
auth: {
|
auth: {
|
||||||
user: {
|
user: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
|
||||||
},
|
},
|
||||||
pass: {
|
pass: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -189,16 +188,15 @@ var _original;
|
|||||||
|
|
||||||
//Set _original
|
//Set _original
|
||||||
FormSchema.pre('save', function (next) {
|
FormSchema.pre('save', function (next) {
|
||||||
// console.log(this.constructor.model);
|
|
||||||
// console.log(FormModel);
|
this.constructor
|
||||||
this.constructor // ≈ mongoose.model('…', FieldSchema).findById
|
|
||||||
.findOne({_id: this._id}).exec(function(err, original){
|
.findOne({_id: this._id}).exec(function(err, original){
|
||||||
if(err) {
|
if(err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
next(err);
|
next(err);
|
||||||
} else {
|
} else {
|
||||||
_original = original;
|
_original = original;
|
||||||
// console.log('_original');
|
//console.log('_original');
|
||||||
// console.log(_original);
|
// console.log(_original);
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
@ -291,7 +289,6 @@ FormSchema.pre('save', function (next) {
|
|||||||
callback( new Error('Generated formfields is empty'), null);
|
callback( new Error('Generated formfields is empty'), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log(_form_fields);
|
|
||||||
//Map PDF field names to FormField field names
|
//Map PDF field names to FormField field names
|
||||||
for(var i = 0; i < _form_fields.length; i++){
|
for(var i = 0; i < _form_fields.length; i++){
|
||||||
var field = _form_fields[i];
|
var field = _form_fields[i];
|
||||||
|
|||||||
@ -4,12 +4,20 @@
|
|||||||
* Module dependencies.
|
* Module dependencies.
|
||||||
*/
|
*/
|
||||||
var mongoose = require('mongoose'),
|
var mongoose = require('mongoose'),
|
||||||
|
relationship = require('mongoose-relationship'),
|
||||||
|
_ = require('lodash'),
|
||||||
Schema = mongoose.Schema;
|
Schema = mongoose.Schema;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Question Schema
|
* Question Schema
|
||||||
*/
|
*/
|
||||||
var FormFieldSchema = new Schema({
|
var FormFieldSchema = new Schema({
|
||||||
|
// formSubmission: {
|
||||||
|
// type: Schema.ObjectId,
|
||||||
|
// ref: 'FormSubmission',
|
||||||
|
// childPath: 'form_fields'
|
||||||
|
// },
|
||||||
|
|
||||||
created: {
|
created: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: Date.now
|
default: Date.now
|
||||||
@ -20,7 +28,6 @@ var FormFieldSchema = new Schema({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
|
||||||
trim: true,
|
trim: true,
|
||||||
required: 'Field title cannot be blank'
|
required: 'Field title cannot be blank'
|
||||||
},
|
},
|
||||||
@ -29,9 +36,10 @@ var FormFieldSchema = new Schema({
|
|||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
|
||||||
logicJumps: [{
|
logicJump: {
|
||||||
type: String,
|
type: Schema.Types.ObjectId,
|
||||||
}],
|
ref: 'LogicJump'
|
||||||
|
},
|
||||||
|
|
||||||
//DAVID: TODO: SEMI-URGENT: Need to come up with a schema for field options
|
//DAVID: TODO: SEMI-URGENT: Need to come up with a schema for field options
|
||||||
fieldOptions: [{
|
fieldOptions: [{
|
||||||
@ -58,6 +66,8 @@ var FormFieldSchema = new Schema({
|
|||||||
fieldValue: Schema.Types.Mixed
|
fieldValue: Schema.Types.Mixed
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// FormFieldSchema.plugin(relationship, { relationshipPathName:'formSubmission' });
|
||||||
|
|
||||||
FormFieldSchema.static('validTypes', function(){
|
FormFieldSchema.static('validTypes', function(){
|
||||||
return [
|
return [
|
||||||
'textfield',
|
'textfield',
|
||||||
@ -114,4 +124,8 @@ function validateFormFieldType(value) {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = FormFieldSchema;
|
var cloneFieldSchema = _.cloneDeep(FormFieldSchema);
|
||||||
|
mongoose.model('Field', FormFieldSchema);
|
||||||
|
|
||||||
|
module.exports = cloneFieldSchema;
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,7 @@ var mongoose = require('mongoose'),
|
|||||||
fs = require('fs-extra'),
|
fs = require('fs-extra'),
|
||||||
Field = mongoose.model('Field'),
|
Field = mongoose.model('Field'),
|
||||||
soap = require('soap'),
|
soap = require('soap'),
|
||||||
|
FieldSchema = require('./form_field.server.model.js'),
|
||||||
OscarSecurity = require('../../scripts/oscarhost/OscarSecurity');
|
OscarSecurity = require('../../scripts/oscarhost/OscarSecurity');
|
||||||
|
|
||||||
var newDemoTemplate = {
|
var newDemoTemplate = {
|
||||||
@ -60,7 +61,7 @@ var FormSubmissionSchema = new Schema({
|
|||||||
ref: 'User',
|
ref: 'User',
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
form_fields: [Field],
|
form_fields: [FieldSchema],
|
||||||
form: {
|
form: {
|
||||||
type:Schema.Types.ObjectId,
|
type:Schema.Types.ObjectId,
|
||||||
ref:'Form',
|
ref:'Form',
|
||||||
@ -112,10 +113,10 @@ FormSubmissionSchema.post('save', function (next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Generate demographics from hashmap
|
//Generate demographics from hashmap
|
||||||
var generateDemo = function(formFields, conversionMap, templateDemo){
|
var generateDemo = function(formFields, conversionMap, demographicsTemplate){
|
||||||
var _generatedDemo = {};
|
var _generatedDemo = {};
|
||||||
for(var field in formFields){
|
for(var field in formFields){
|
||||||
if(templateDemo.hasOwnProperty(conversionMap[field._id])){
|
if(demographicsTemplate.hasOwnProperty(conversionMap[field._id])){
|
||||||
var propertyName = conversionMap[field._id];
|
var propertyName = conversionMap[field._id];
|
||||||
|
|
||||||
if(propertyName === "unparsedDOB"){
|
if(propertyName === "unparsedDOB"){
|
||||||
@ -132,7 +133,7 @@ FormSubmissionSchema.post('save', function (next) {
|
|||||||
return _generatedDemo;
|
return _generatedDemo;
|
||||||
}
|
}
|
||||||
|
|
||||||
var submissionDemographic = generateDemo(this.form_fields, this.form.plugin.oscarhost.settings.fieldMap);
|
var submissionDemographic = generateDemo(this.form_fields, this.form.plugin.oscarhost.settings.fieldMap, newDemoTemplate);
|
||||||
|
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function (callback) {
|
function (callback) {
|
||||||
@ -146,7 +147,7 @@ FormSubmissionSchema.post('save', function (next) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
function (security_obj, callback) {
|
function (security_obj, callback) {
|
||||||
//Force Add
|
//Force Add Demographic
|
||||||
if(this.plugins.oscarhost.settings.updateType === 'force_add'){
|
if(this.plugins.oscarhost.settings.updateType === 'force_add'){
|
||||||
soap.createClient(url_demo, options, function(err, client) {
|
soap.createClient(url_demo, options, function(err, client) {
|
||||||
client.setSecurity(new OscarSecurity(security_obj.securityId, security_obj.securityTokenKey) );
|
client.setSecurity(new OscarSecurity(security_obj.securityId, security_obj.securityTokenKey) );
|
||||||
|
|||||||
@ -7,6 +7,7 @@ var should = require('should'),
|
|||||||
mongoose = require('mongoose'),
|
mongoose = require('mongoose'),
|
||||||
User = mongoose.model('User'),
|
User = mongoose.model('User'),
|
||||||
Form = mongoose.model('Form'),
|
Form = mongoose.model('Form'),
|
||||||
|
Field = mongoose.model('Field'),
|
||||||
_ = require('lodash'),
|
_ = require('lodash'),
|
||||||
config = require('../../config/config'),
|
config = require('../../config/config'),
|
||||||
FormSubmission = mongoose.model('FormSubmission');
|
FormSubmission = mongoose.model('FormSubmission');
|
||||||
@ -58,6 +59,11 @@ var user, myForm, mySubmission;
|
|||||||
* Unit tests
|
* Unit tests
|
||||||
*/
|
*/
|
||||||
describe('Form Model Unit Tests:', function() {
|
describe('Form Model Unit Tests:', function() {
|
||||||
|
beforeEach(function(done) {
|
||||||
|
Form.remove().exec(function() {
|
||||||
|
User.remove().exec(done);
|
||||||
|
});
|
||||||
|
});
|
||||||
beforeEach(function(done) {
|
beforeEach(function(done) {
|
||||||
user = new User({
|
user = new User({
|
||||||
firstName: 'Full',
|
firstName: 'Full',
|
||||||
@ -73,10 +79,12 @@ describe('Form Model Unit Tests:', function() {
|
|||||||
title: 'Form Title',
|
title: 'Form Title',
|
||||||
admin: user,
|
admin: user,
|
||||||
language: 'english',
|
language: 'english',
|
||||||
|
form_fields: [
|
||||||
|
{'fieldType':'textfield', 'title':'First Name', 'fieldValue': ''},
|
||||||
|
{'fieldType':'checkbox', 'title':'nascar', 'fieldValue': ''},
|
||||||
|
{'fieldType':'checkbox', 'title':'hockey', 'fieldValue': ''}
|
||||||
|
]
|
||||||
});
|
});
|
||||||
myForm.form_fields.push({fieldType:'textfield', title:'First Name'});
|
|
||||||
myForm.form_fields.push({fieldType:'checkbox', title:'nascar'});
|
|
||||||
myForm.form_fields.push({fieldType:'checkbox', title:'hockey'});
|
|
||||||
|
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@ -117,141 +125,7 @@ describe('Form Model Unit Tests:', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Test FormField and Submission Logic', function() {
|
|
||||||
var new_form_fields_add1, new_form_fields_del, submission_fields, old_fields, form;
|
|
||||||
|
|
||||||
before(function(){
|
|
||||||
new_form_fields_add1 = _.clone(myForm.toObject().form_fields);
|
|
||||||
new_form_fields_add1.push(
|
|
||||||
{'fieldType':'textfield', 'title':'Last Name', 'fieldValue': ''}
|
|
||||||
);
|
|
||||||
|
|
||||||
new_form_fields_del = _.clone(myForm.toObject().form_fields);
|
|
||||||
new_form_fields_del.splice(0, 1);
|
|
||||||
|
|
||||||
submission_fields = _.clone(myForm.toObject().form_fields);
|
|
||||||
submission_fields[0].fieldValue = 'David';
|
|
||||||
submission_fields[1].fieldValue = true;
|
|
||||||
submission_fields[2].fieldValue = true;
|
|
||||||
|
|
||||||
mySubmission = new FormSubmission({
|
|
||||||
form_fields: submission_fields,
|
|
||||||
admin: user,
|
|
||||||
form: myForm,
|
|
||||||
timeElapsed: 17.55
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(function(done){
|
|
||||||
myForm.save(function(){
|
|
||||||
mySubmission.save(function(){
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(function(done){
|
|
||||||
mySubmission.remove(function(){
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// it('should preserve deleted form_fields that have submissions without any problems', function(done) {
|
|
||||||
|
|
||||||
// old_fields = myForm.toObject().form_fields;
|
|
||||||
// // console.log(old_fields);
|
|
||||||
|
|
||||||
// // var expected_fields = old_fields.slice(1,3).concat(old_fields.slice(0,1));
|
|
||||||
|
|
||||||
// myForm.form_fields = new_form_fields_del;
|
|
||||||
|
|
||||||
// myForm.save(function(err, _form) {
|
|
||||||
|
|
||||||
// should.not.exist(err);
|
|
||||||
// should.exist(_form);
|
|
||||||
|
|
||||||
// // var actual_fields = _.map(_form.toObject().form_fields, function(o){ _.omit(o, '_id')});
|
|
||||||
// // old_fields = _.map(old_fields, function(o){ _.omit(o, '_id')});
|
|
||||||
|
|
||||||
// // console.log(old_fields);
|
|
||||||
// should.deepEqual(JSON.stringify(_form.toObject().form_fields), JSON.stringify(old_fields), 'old form_fields not equal to newly saved form_fields');
|
|
||||||
// done();
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
|
|
||||||
// it('should delete \'preserved\' form_fields whose submissions have been removed without any problems', function(done) {
|
|
||||||
|
|
||||||
// myForm.form_fields = new_form_fields_del;
|
|
||||||
// myForm.save(function(err, form
|
|
||||||
// should.not.exist(err);
|
|
||||||
// (form.form_fields).should.be.eql(old_fields, 'old form_fields not equal to newly saved form_fields');
|
|
||||||
|
|
||||||
// //Remove submission
|
|
||||||
// mySubmission.remove(function(err){
|
|
||||||
// myForm.submissions.should.have.length(0);
|
|
||||||
// myForm.form_fields.should.not.containDeep(old_fields[0]);
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
// });
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Submission of Form should add Patient to OscarHost', function() {
|
|
||||||
var mySubmission;
|
|
||||||
before(function(done){
|
|
||||||
myForm.form_fields = [
|
|
||||||
new Field({'fieldType':'textfield', 'title':'What\'s your first name', 'fieldValue': ''}),
|
|
||||||
new Field({'fieldType':'textfield', 'title':'And your last name', 'fieldValue': ''}),
|
|
||||||
new Field({'fieldType':'radio', 'title':'And your sex', 'fieldOptions': [{ 'option_id': 0, 'option_title': 'Male', 'option_value': 'M' }, { 'option_id': 1, 'option_title': 'Female', 'option_value': 'F' }], 'fieldValue': ''}),
|
|
||||||
new Field({'fieldType':'date', 'title':'When were you born?', 'fieldValue': ''}),
|
|
||||||
new Field({'fieldType':'number', 'title':'What\'s your phone #?', 'fieldValue': ''}),
|
|
||||||
];
|
|
||||||
var myFieldMap = {};
|
|
||||||
myFieldMap[myForm.form_fields[0]._id] = 'firstName';
|
|
||||||
myFieldMap[myForm.form_fields[1]._id] = 'lastName';
|
|
||||||
myFieldMap[myForm.form_fields[2]._id] = 'sex';
|
|
||||||
myFieldMap[myForm.form_fields[3]._id] = 'unparsedDOB';
|
|
||||||
myFieldMap[myForm.form_fields[4]._id] = 'phone';
|
|
||||||
|
|
||||||
myForm.plugins.oscarhost = {
|
|
||||||
baseUrl: config.oscarhost.baseUrl,
|
|
||||||
settings: {
|
|
||||||
lookupField: '',
|
|
||||||
updateType: 'force_add',
|
|
||||||
fieldMap: myFieldMap,
|
|
||||||
},
|
|
||||||
auth: config.oscarhost.auth,
|
|
||||||
};
|
|
||||||
|
|
||||||
myForm.save(function(err, form){
|
|
||||||
if(err) done(err);
|
|
||||||
|
|
||||||
var submission_fields = _.clone(myForm.toObject().form_fields);
|
|
||||||
submission_fields[0].fieldValue = 'David';
|
|
||||||
submission_fields[1].fieldValue = 'Baldwynn'+Date.now();
|
|
||||||
submission_fields[2].fieldValue = 'M';
|
|
||||||
submission_fields[3].fieldValue = Date.now();
|
|
||||||
submission_fields[4].fieldValue = 6043158008;
|
|
||||||
|
|
||||||
mySubmission = new FormSubmission({
|
|
||||||
form_fields: submission_fields,
|
|
||||||
admin: form.admin,
|
|
||||||
form: form,
|
|
||||||
timeElapsed: 17.55
|
|
||||||
});
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
it('should be able to submit a valid form without problems', function(done) {
|
|
||||||
mySubmission.save(function(err, submission) {
|
|
||||||
should.not.exist(err);
|
|
||||||
should.exist(submission.oscarDemoNum);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(function(done) {
|
afterEach(function(done) {
|
||||||
Form.remove().exec(function() {
|
Form.remove().exec(function() {
|
||||||
User.remove().exec(done);
|
User.remove().exec(done);
|
||||||
|
|||||||
269
app/tests/form_submission.model.test.js
Normal file
269
app/tests/form_submission.model.test.js
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
*/
|
||||||
|
var should = require('should'),
|
||||||
|
mongoose = require('mongoose'),
|
||||||
|
User = mongoose.model('User'),
|
||||||
|
Form = mongoose.model('Form'),
|
||||||
|
Field = mongoose.model('Field'),
|
||||||
|
_ = require('lodash'),
|
||||||
|
config = require('../../config/config'),
|
||||||
|
FormSubmission = mongoose.model('FormSubmission');
|
||||||
|
|
||||||
|
|
||||||
|
var exampleDemo = {
|
||||||
|
activeCount: 1,
|
||||||
|
unparsedDOB: '',
|
||||||
|
address: '880-9650 Velit. St.',
|
||||||
|
chartNo: '',
|
||||||
|
city: '',
|
||||||
|
dateJoined: Date.now(),
|
||||||
|
dateOfBirth: '10',
|
||||||
|
displayName: 'LITTLE, URIAH',
|
||||||
|
email: '',
|
||||||
|
familyDoctor: '<rdohip></rdohip><rd></rd>',
|
||||||
|
firstName: 'Uriah F.',
|
||||||
|
hcType: 'BC',
|
||||||
|
hin: '',
|
||||||
|
hsAlertCount: 0,
|
||||||
|
lastName: 'Little',
|
||||||
|
lastUpdateDate: Date.now(),
|
||||||
|
lastUpdateUser: '',
|
||||||
|
links: '',
|
||||||
|
monthOfBirth: '05',
|
||||||
|
officialLanguage: 'English',
|
||||||
|
patientStatus: 'AC',
|
||||||
|
patientStatusDate: Date.now(),
|
||||||
|
phone: '250-',
|
||||||
|
phone2: '',
|
||||||
|
postal: "S4M 7T8",
|
||||||
|
providerNo: '4',
|
||||||
|
province: 'BC',
|
||||||
|
rosterStatus: '',
|
||||||
|
sex: 'M',
|
||||||
|
sexDesc: 'Female',
|
||||||
|
sin: '',
|
||||||
|
spokenLanguage: 'English',
|
||||||
|
title: 'MS.',
|
||||||
|
yearOfBirth: '2015'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Globals
|
||||||
|
*/
|
||||||
|
var user, myForm, mySubmission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests
|
||||||
|
*/
|
||||||
|
describe('FormSubmission Model Unit Tests:', function() {
|
||||||
|
beforeEach(function(done) {
|
||||||
|
user = new User({
|
||||||
|
firstName: 'Full',
|
||||||
|
lastName: 'Name',
|
||||||
|
displayName: 'Full Name',
|
||||||
|
email: 'test1@test.com',
|
||||||
|
username: 'test1@test.com',
|
||||||
|
password: 'password'
|
||||||
|
});
|
||||||
|
|
||||||
|
user.save(function(err, _user) {
|
||||||
|
if(err) done(err);
|
||||||
|
|
||||||
|
myForm = new Form({
|
||||||
|
title: 'Form Title',
|
||||||
|
admin: _user,
|
||||||
|
language: 'english',
|
||||||
|
form_fields: [
|
||||||
|
{'fieldType':'textfield', 'title':'What\'s your first name', 'fieldValue': ''},
|
||||||
|
{'fieldType':'textfield', 'title':'And your last name', 'fieldValue': ''},
|
||||||
|
{'fieldType':'radio', 'title':'And your sex', 'fieldOptions': [{ 'option_id': 0, 'option_title': 'Male', 'option_value': 'M' }, { 'option_id': 1, 'option_title': 'Female', 'option_value': 'F' }], 'fieldValue': ''},
|
||||||
|
{'fieldType':'date', 'title':'When were you born?', 'fieldValue': ''},
|
||||||
|
{'fieldType':'number', 'title':'What\'s your phone #?', 'fieldValue': ''},
|
||||||
|
],
|
||||||
|
plugins: {
|
||||||
|
oscarhost: {
|
||||||
|
baseUrl: config.oscarhost.baseUrl,
|
||||||
|
settings: {
|
||||||
|
lookupField: '',
|
||||||
|
updateType: 'force_add',
|
||||||
|
},
|
||||||
|
auth: config.oscarhost.auth,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Method Save', function() {
|
||||||
|
var myFieldMap = {};
|
||||||
|
beforeEach(function(done){
|
||||||
|
myFieldMap[myForm.form_fields[0]._id+''] = 'firstName';
|
||||||
|
myFieldMap[myForm.form_fields[1]._id+''] = 'lastName';
|
||||||
|
myFieldMap[myForm.form_fields[2]._id+''] = 'sex';
|
||||||
|
myFieldMap[myForm.form_fields[3]._id+''] = 'unparsedDOB';
|
||||||
|
myFieldMap[myForm.form_fields[4]._id+''] = 'phone';
|
||||||
|
|
||||||
|
myForm.plugins.oscarhost.settings.fieldMap = myFieldMap;
|
||||||
|
|
||||||
|
myForm.save(function(err, form){
|
||||||
|
if(err) done(err);
|
||||||
|
|
||||||
|
// var submission_fields = _.cloneDeep(form.toObject().form_fields);
|
||||||
|
|
||||||
|
// var submission_fields = [
|
||||||
|
// {'fieldType':'textfield', 'title':'What\'s your first name', 'fieldValue': ''},
|
||||||
|
// {'fieldType':'textfield', 'title':'And your last name', 'fieldValue': ''},
|
||||||
|
// {'fieldType':'radio', 'title':'And your sex', 'fieldOptions': [{ 'option_id': 0, 'option_title': 'Male', 'option_value': 'M' }, { 'option_id': 1, 'option_title': 'Female', 'option_value': 'F' }], 'fieldValue': ''},
|
||||||
|
// {'fieldType':'date', 'title':'When were you born?', 'fieldValue': ''},
|
||||||
|
// {'fieldType':'number', 'title':'What\'s your phone #?', 'fieldValue': ''}
|
||||||
|
// ];
|
||||||
|
|
||||||
|
submission_fields[0].fieldValue = 'David';
|
||||||
|
submission_fields[1].fieldValue = 'Baldwynn'+Date.now();
|
||||||
|
submission_fields[2].fieldValue = 'M';
|
||||||
|
submission_fields[3].fieldValue = Date.now();
|
||||||
|
submission_fields[4].fieldValue = 6043158008;
|
||||||
|
|
||||||
|
mySubmission = new FormSubmission({
|
||||||
|
admin: user,
|
||||||
|
form: form,
|
||||||
|
timeElapsed: 17.55
|
||||||
|
});
|
||||||
|
|
||||||
|
// for(var i=0; i<submission_fields.length; i++){
|
||||||
|
// mySubmission.form_fields.create(submission_fields[i]);
|
||||||
|
// }
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be able to save a FormSubmission without problems', function(done) {
|
||||||
|
return mySubmission.save(function(err, submission) {
|
||||||
|
should.not.exist(err);
|
||||||
|
should.exist(submission.oscarDemoNum);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add Patient to OscarHost EMR after save');
|
||||||
|
});
|
||||||
|
|
||||||
|
// describe('Method Find', function(){
|
||||||
|
// beforeEach(function(done){
|
||||||
|
// myForm.save(function(err) {
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// // it('should be able to findOne my form without problems', function(done) {
|
||||||
|
// // return Form.findOne({_id: myForm._id}, function(err,form) {
|
||||||
|
// // should.not.exist(err);
|
||||||
|
// // should.exist(form);
|
||||||
|
// // should.deepEqual(form.toObject(), myForm.toObject());
|
||||||
|
// // done();
|
||||||
|
// // });
|
||||||
|
// // });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// describe('Test FormField and Submission Logic', function() {
|
||||||
|
// var new_form_fields_add1, new_form_fields_del, submission_fields, old_fields, form;
|
||||||
|
|
||||||
|
// before(function(){
|
||||||
|
// new_form_fields_add1 = _.clone(myForm.toObject().form_fields);
|
||||||
|
// new_form_fields_add1.push(
|
||||||
|
// {'fieldType':'textfield', 'title':'Last Name', 'fieldValue': ''}
|
||||||
|
// );
|
||||||
|
|
||||||
|
// new_form_fields_del = _.clone(myForm.toObject().form_fields);
|
||||||
|
// new_form_fields_del.splice(0, 1);
|
||||||
|
|
||||||
|
// //Create Submission
|
||||||
|
// submission_fields = _.clone(myForm.toObject().form_fields);
|
||||||
|
|
||||||
|
// for(var i=0; i<submission_fields.length; i++){
|
||||||
|
// submission_fields[i] = new Field(submission_fields[i]);
|
||||||
|
// }
|
||||||
|
// submission_fields[0].fieldValue = 'David';
|
||||||
|
// submission_fields[1].fieldValue = true;
|
||||||
|
// submission_fields[2].fieldValue = true;
|
||||||
|
|
||||||
|
// mySubmission = new FormSubmission({
|
||||||
|
// form_fields: [],
|
||||||
|
// admin: user,
|
||||||
|
// form: myForm,
|
||||||
|
// timeElapsed: 17.55
|
||||||
|
// });
|
||||||
|
|
||||||
|
// for(var i=0; i<submission_fields.length; i++){
|
||||||
|
// mySubmission.form_fields.push(submission_fields[i]);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// beforeEach(function(done){
|
||||||
|
// myForm.save(function(){
|
||||||
|
// console.log(mySubmission);
|
||||||
|
// mySubmission.save(function(err){
|
||||||
|
// if(err) done(err);
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// afterEach(function(done){
|
||||||
|
// mySubmission.remove(function(){
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('something', function(done){
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // it('should preserve deleted form_fields that have submissions without any problems', function(done) {
|
||||||
|
|
||||||
|
// // old_fields = myForm.toObject().form_fields;
|
||||||
|
|
||||||
|
// // // var expected_fields = old_fields.slice(1,3).concat(old_fields.slice(0,1));
|
||||||
|
|
||||||
|
// // myForm.form_fields = new_form_fields_del;
|
||||||
|
|
||||||
|
// // myForm.save(function(err, form) {
|
||||||
|
|
||||||
|
// // should.not.exist(err);
|
||||||
|
// // should.exist(_form);
|
||||||
|
|
||||||
|
// // // var actual_fields = _.map(_form.toObject().form_fields, function(o){ _.omit(o, '_id')});
|
||||||
|
// // // old_fields = _.map(old_fields, function(o){ _.omit(o, '_id')});
|
||||||
|
|
||||||
|
// // // console.log(old_fields);
|
||||||
|
// // should.deepEqual(JSON.stringify(_form.toObject().form_fields), JSON.stringify(old_fields), 'old form_fields not equal to newly saved form_fields');
|
||||||
|
// // done();
|
||||||
|
// // });
|
||||||
|
// // });
|
||||||
|
|
||||||
|
// // it('should delete \'preserved\' form_fields whose submissions have been removed without any problems', function(done) {
|
||||||
|
|
||||||
|
// // myForm.form_fields = new_form_fields_del;
|
||||||
|
// // myForm.save(function(err, form
|
||||||
|
// // should.not.exist(err);
|
||||||
|
// // (form.form_fields).should.be.eql(old_fields, 'old form_fields not equal to newly saved form_fields');
|
||||||
|
|
||||||
|
// // //Remove submission
|
||||||
|
// // mySubmission.remove(function(err){
|
||||||
|
// // myForm.submissions.should.have.length(0);
|
||||||
|
// // myForm.form_fields.should.not.containDeep(old_fields[0]);
|
||||||
|
// // });
|
||||||
|
// // });
|
||||||
|
// // });
|
||||||
|
// });
|
||||||
|
|
||||||
|
afterEach(function(done) {
|
||||||
|
Form.remove().exec(function() {
|
||||||
|
User.remove().exec(done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -51,9 +51,10 @@
|
|||||||
// };
|
// };
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// // describe('Create, Verify and Activate a User', function() {
|
// describe('Create, Verify and Activate a User', function() {
|
||||||
// var username = 'testActiveAccount.be1e58fb@mailosaur.in';
|
// var username = 'testActiveAccount.be1e58fb@mailosaur.in';
|
||||||
// var link, _tmpUser, activateToken = '';
|
// var link, _tmpUser, activateToken;
|
||||||
|
// this.timeout(15000);
|
||||||
|
|
||||||
// it('should be able to create a temporary (non-activated) User', function(done) {
|
// it('should be able to create a temporary (non-activated) User', function(done) {
|
||||||
// _User.email = _User.username = username;
|
// _User.email = _User.username = username;
|
||||||
@ -101,35 +102,50 @@
|
|||||||
// // // });
|
// // // });
|
||||||
|
|
||||||
|
|
||||||
// // // mailbox.getEmails(function(err, _emails) {
|
// // mailbox.getEmails(function(err, _emails) {
|
||||||
// // // if(err) done(err);
|
// // if(err) done(err);
|
||||||
|
|
||||||
// // // var emails = _emails;
|
// // var emails = _emails;
|
||||||
|
|
||||||
// // // console.log('mailbox.getEmails:');
|
// // console.log('mailbox.getEmails:');
|
||||||
// // // console.log(emails[0].text.links);
|
// // console.log(emails[0].text.links);
|
||||||
|
|
||||||
// // // var link = emails[0].text.links[0].href;
|
// // var link = emails[0].text.links[0].href;
|
||||||
// // // activateToken = _(url.parse(link).hash.split('/')).reverse().value()[0];
|
// // activateToken = _(url.parse(link).hash.split('/')).reverse().value()[0];
|
||||||
// // // console.log('actual activateToken: '+ activateToken);
|
// // console.log('actual activateToken: '+ activateToken);
|
||||||
// // // console.log('expected activateToken: ' + user.GENERATED_VERIFYING_URL);
|
// // console.log('expected activateToken: ' + user.GENERATED_VERIFYING_URL);
|
||||||
// // // (activateToken).should.equal(user.GENERATED_VERIFYING_URL);
|
// // (activateToken).should.equal(user.GENERATED_VERIFYING_URL);
|
||||||
|
|
||||||
// // // done();
|
// // done();
|
||||||
// // // });
|
// // });
|
||||||
// // });
|
// // });
|
||||||
// });
|
// });
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
// it('shold have created User Account', function(done){
|
||||||
|
// tmpUser.findOne({username: _User.username}, function (err, user) {
|
||||||
|
// should.not.exist(err);
|
||||||
|
// should.exist(user);
|
||||||
|
// _tmpUser = user;
|
||||||
|
|
||||||
// // it('should be able to verify a User Account', function(done) {
|
// _User.username.should.equal(user.username);
|
||||||
// // userSession.get('/auth/verify/'+activateToken)
|
// _User.firstName.should.equal(user.firstName);
|
||||||
// // .expect(200)
|
// _User.lastName.should.equal(user.lastName)
|
||||||
// // .end(function(VerifyErr, VerifyRes) {
|
|
||||||
// // should.not.exist(VerifyErr);
|
// activateToken = user.GENERATED_VERIFYING_URL;
|
||||||
// // (VerifyRes.text).should.equal('User successfully verified');
|
|
||||||
// // done();
|
// done();
|
||||||
// // });
|
// });
|
||||||
// // });
|
// });
|
||||||
|
// it('should be able to verify a User Account', function(done) {
|
||||||
|
// userSession.get('/auth/verify/'+activateToken)
|
||||||
|
// .expect(200)
|
||||||
|
// .end(function(VerifyErr, VerifyRes) {
|
||||||
|
// should.not.exist(VerifyErr);
|
||||||
|
// (VerifyRes.text).should.equal('User successfully verified');
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
// // it('should receive confirmation email after verifying a User Account', function(done) {
|
// // it('should receive confirmation email after verifying a User Account', function(done) {
|
||||||
// // mailbox.getEmails(function(err, _emails) {
|
// // mailbox.getEmails(function(err, _emails) {
|
||||||
@ -142,7 +158,7 @@
|
|||||||
// // done();
|
// // done();
|
||||||
// // });
|
// // });
|
||||||
// // });
|
// // });
|
||||||
// // });
|
// });
|
||||||
|
|
||||||
// // it('should be able to login and logout a User', function (done) {
|
// // it('should be able to login and logout a User', function (done) {
|
||||||
// // var username = 'testActiveAccount.be1e58fb@mailosaur.in';
|
// // var username = 'testActiveAccount.be1e58fb@mailosaur.in';
|
||||||
|
|||||||
7
docs/Extreme Programming:Agile/Sprints/tasks_sep13.md
Normal file
7
docs/Extreme Programming:Agile/Sprints/tasks_sep13.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
##Goals/Tasks for Week of Sep 13
|
||||||
|
|
||||||
|
1.Get OscarHost demographics update/create to work
|
||||||
|
2. Add testing for user verification/reset password
|
||||||
|
3. Fix bugs in GUI (user login and form creation)
|
||||||
|
4. Start creating E2E tests for user login/signup
|
||||||
|
5. Start testing GUI on different browsers/resolutions
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
###User Stories
|
||||||
|
|
||||||
|
1. A new patient walks up to kiosk, fills out new patient form, is detected to be new user, is added to OscarHost EMR and then completes form.
|
||||||
|
|
||||||
|
2. A patient walks up to kiosk, fills out new patient form, is detected to be current user, updates OscarHost EMR profile, and then completes form.
|
||||||
|
|
||||||
|
3. Manager wants to update or create form, so he logs into system, updates form and then changes are reflected in kiosk at front of clinic.
|
||||||
14
docs/Extreme Programming:Agile/requirements.md
Normal file
14
docs/Extreme Programming:Agile/requirements.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
KioskForm Requirements
|
||||||
|
======================
|
||||||
|
|
||||||
|
##MVP
|
||||||
|
-Must be webform accessible online
|
||||||
|
-Can create new/update current OscarHost patient from webform
|
||||||
|
-Forms must be editable by admin
|
||||||
|
-Forms questions must be showed/not showed by logic statement
|
||||||
|
-Must have basic input types (Phone, Legal Signature, Email, Phone, Name, Dropdown, etc)
|
||||||
|
|
||||||
|
|
||||||
|
###Optional
|
||||||
|
-Must be secure and encrypted ()
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user