{{ 'REVERIFY_ACCOUNT_LINK' | translate }}{{ 'SIGNIN_BTN' | translate }}")}]),ApplicationConfiguration.registerModule("view-form",["ngFileUpload","ui.router.tabs","ui.date","ui.sortable","angular-input-stars","pascalprecht.translate"]),angular.module("view-form").config(["$translateProvider",function($translateProvider){$translateProvider.translations("english",{FORM_SUCCESS:"Form entry successfully submitted!",REVIEW:"Review",BACK_TO_FORM:"Go back to Form",EDIT_FORM:"Edit this TellForm",CREATE_FORM:"Create this TellForm",ADVANCEMENT:"{{done}} out of {{total}} answered",CONTINUE_FORM:"Continue to Form",REQUIRED:"required",COMPLETING_NEEDED:"{{answers_not_completed}} answer(s) need completing",OPTIONAL:"optional",ERROR_EMAIL_INVALID:"Please enter a valid email address",ERROR_NOT_A_NUMBER:"Please enter valid numbers only",ERROR_URL_INVALID:"Please a valid url",OK:"OK",ENTER:"press ENTER",YES:"Yes",NO:"No",NEWLINE:"press SHIFT+ENTER to create a newline",CONTINUE:"Continue",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Delete",CANCEL:"Cancel",SUBMIT:"Submit",UPLOAD_FILE:"Upload your File"}),$translateProvider.preferredLanguage("english").fallbackLanguage("english").useSanitizeValueStrategy("escape")}]),angular.module("view-form").config(["$translateProvider",function($translateProvider){$translateProvider.translations("french",{FORM_SUCCESS:"Votre formulaire a été enregistré!",REVIEW:"Incomplet",BACK_TO_FORM:"Retourner au formulaire",EDIT_FORM:"Éditer le Tellform",CREATE_FORM:"Créer un TellForm",ADVANCEMENT:"{{done}} complétés sur {{total}}",CONTINUE_FORM:"Aller au formulaire",REQUIRED:"obligatoire",COMPLETING_NEEDED:"{{answers_not_completed}} réponse(s) doive(nt) être complétée(s)",OPTIONAL:"facultatif",ERROR_EMAIL_INVALID:"Merci de rentrer une adresse mail valide",ERROR_NOT_A_NUMBER:"Merce de ne rentrer que des nombres",ERROR_URL_INVALID:"Merci de rentrer une url valide",OK:"OK",ENTER:"presser ENTRÉE",YES:"Oui",NO:"Non",NEWLINE:"presser SHIFT+ENTER pour créer une nouvelle ligne",CONTINUE:"Continuer",LEGAL_ACCEPT:"J’accepte",LEGAL_NO_ACCEPT:"Je n’accepte pas",DELETE:"Supprimer",CANCEL:"Réinitialiser",SUBMIT:"Enregistrer",UPLOAD_FILE:"Envoyer un fichier",Y:"O",N:"N"})}]),angular.module("view-form").config(["$translateProvider",function($translateProvider){$translateProvider.translations("german",{FORM_SUCCESS:"Ihre Angaben wurden gespeichert.",REVIEW:"Unvollständig",BACK_TO_FORM:"Zurück zum Formular",EDIT_FORM:"",CREATE_FORM:"",ADVANCEMENT:"{{done}} von {{total}} beantwortet",CONTINUE_FORM:"Zum Formular",REQUIRED:"verpflichtend",COMPLETING_NEEDED:"Es fehlen/fehtl noch {{answers_not_completed}} Antwort(en)",OPTIONAL:"fakultativ",ERROR_EMAIL_INVALID:"Bitte gültige Mailadresse eingeben",ERROR_NOT_A_NUMBER:"Bitte nur Zahlen eingeben",ERROR_URL_INVALID:"Bitte eine gültige URL eingeben",OK:"Okay",ENTER:"Eingabetaste drücken",YES:"Ja",NO:"Nein",NEWLINE:"Für eine neue Zeile SHIFT+ENTER drücken",CONTINUE:"Weiter",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Entfernen",CANCEL:"Canceln",SUBMIT:"Speichern",UPLOAD_FILE:"Datei versenden",Y:"J",N:"N"})}]),angular.module("view-form").config(["$translateProvider",function($translateProvider){$translateProvider.translations("italian",{FORM_SUCCESS:"Il formulario è stato inviato con successo!",REVIEW:"Incompleto",BACK_TO_FORM:"Ritorna al formulario",EDIT_FORM:"",CREATE_FORM:"",ADVANCEMENT:"{{done}} su {{total}} completate",CONTINUE_FORM:"Vai al formulario",REQUIRED:"obbligatorio",COMPLETING_NEEDED:"{{answers_not_completed}} risposta/e deve/ono essere completata/e",OPTIONAL:"opzionale",ERROR_EMAIL_INVALID:"Si prega di inserire un indirizzo email valido",ERROR_NOT_A_NUMBER:"Si prega di inserire solo numeri",ERROR_URL_INVALID:"Grazie per inserire un URL valido",OK:"OK",ENTER:"premere INVIO",YES:"Sì",NO:"No",NEWLINE:"premere SHIFT+INVIO per creare una nuova linea",CONTINUE:"Continua",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Cancella",CANCEL:"Reset",SUBMIT:"Registra",UPLOAD_FILE:"Invia un file",Y:"S",N:"N"})}]),angular.module("view-form").config(["$translateProvider",function($translateProvider){$translateProvider.translations("spanish",{FORM_SUCCESS:"¡El formulario ha sido enviado con éxito!",REVIEW:"Revisar",BACK_TO_FORM:"Regresar al formulario",EDIT_FORM:"",CREATE_FORM:"",ADVANCEMENT:"{{done}} de {{total}} contestadas",CONTINUE_FORM:"Continuar al formulario",REQUIRED:"Información requerida",COMPLETING_NEEDED:"{{answers_not_completed}} respuesta(s) necesita(n) ser completada(s)",OPTIONAL:"Opcional",ERROR_EMAIL_INVALID:"Favor de proporcionar un correo electrónico válido",ERROR_NOT_A_NUMBER:"Por favor, introduzca sólo números válidos",ERROR_URL_INVALID:"Favor de proporcionar un url válido",OK:"OK",ENTER:"pulse INTRO",YES:"Si",NO:"No",NEWLINE:"presione SHIFT+INTRO para crear una nueva línea",CONTINUE:"Continuar",LEGAL_ACCEPT:"I accept",LEGAL_NO_ACCEPT:"I don’t accept",DELETE:"Eliminar",CANCEL:"Cancelar",SUBMIT:"Registrar",UPLOAD_FILE:"Cargar el archivo",Y:"S",N:"N"})}]),angular.module("view-form").filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}),angular.module("view-form").config(["$stateProvider",function($stateProvider){$stateProvider.state("submitForm",{url:"/forms/:formId",templateUrl:"/static/form_modules/forms/base/views/submit-form.client.view.html",resolve:{Forms:"Forms",myForm:["Forms","$stateParams",function(Forms,$stateParams){return Forms.get({formId:$stateParams.formId}).$promise}]},controller:"SubmitFormController",controllerAs:"ctrl"})}]),function(){function SendVisitorData(Socket,$state){function send(form,lastActiveIndex,timeElapsed){var visitorData={referrer:document.referrer,isSubmitted:form.submitted,formId:form._id,lastActiveField:form.form_fields[lastActiveIndex]._id,timeElapsed:timeElapsed};Socket.emit("form-visitor-data",visitorData)}function init(){Socket.socket||Socket.connect()}var service={send:send};return init(),service}angular.module("view-form").factory("SendVisitorData",SendVisitorData),SendVisitorData.$inject=["Socket","$state"]}(),angular.module("view-form").directive("keyToOption",function(){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs,$select){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,index=parseInt(String.fromCharCode(keyCode))-1;index<$scope.field.fieldOptions.length&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue=$scope.field.fieldOptions[index].option_value}))})}}}),angular.module("view-form").directive("keyToTruthy",["$rootScope",function($rootScope){return{restrict:"A",scope:{field:"="},link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,truthyKeyCode=$attrs.keyCharTruthy.charCodeAt(0)-32,falseyKeyCode=$attrs.keyCharFalsey.charCodeAt(0)-32;keyCode===truthyKeyCode?(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="true"})):keyCode===falseyKeyCode&&(event.preventDefault(),$scope.$apply(function(){$scope.field.fieldValue="false"}))})}}}]),angular.module("view-form").filter("formValidity",function(){return function(formObj){if(formObj&&formObj.form_fields&&formObj.visible_form_fields){var formKeys=Object.keys(formObj),fields=(formKeys.filter(function(key){return"$"!==key[0]}),formObj.form_fields),valid_count=fields.filter(function(field){return"object"==typeof field&&"statement"!==field.fieldType&&"rating"!==field.fieldType?!!field.fieldValue:void 0}).length;return valid_count-(formObj.form_fields.length-formObj.visible_form_fields.length)}return 0}}),angular.module("view-form").value("supportedFields",["textfield","textarea","date","dropdown","hidden","password","radio","legal","statement","rating","yes_no","number","natural"]),angular.module("view-form").controller("SubmitFormController",["$scope","$rootScope","$state","$translate","myForm",function($scope,$rootScope,$state,$translate,myForm){$scope.myform=myForm,$translate.use(myForm.language)}]),angular.module("view-form").directive("fieldIconDirective",function(){return{template:'',restrict:"E",scope:{typeName:"@"},controller:["$scope",function($scope){var iconTypeMap={textfield:"fa fa-pencil-square-o",dropdown:"fa fa-th-list",date:"fa fa-calendar",checkbox:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",email:"fa fa-envelope-o",textarea:"fa fa-pencil-square",legal:"fa fa-legal",file:"fa fa-cloud-upload",rating:"fa fa-star-half-o",link:"fa fa-link",scale:"fa fa-sliders",stripe:"fa fa-credit-card",statement:"fa fa-quote-left",yes_no:"fa fa-toggle-on",number:"fa fa-slack"};$scope.typeIcon=iconTypeMap[$scope.typeName]}]}});var __indexOf=[].indexOf||function(item){for(var i=0,l=this.length;l>i;i++)if(i in this&&this[i]===item)return i;return-1};angular.module("view-form").directive("fieldDirective",["$http","$compile","$rootScope","$templateCache","supportedFields",function($http,$compile,$rootScope,$templateCache,supportedFields){var getTemplateUrl=function(fieldType){var type=fieldType,templateUrl="modules/forms/base/views/directiveViews/field/";return __indexOf.call(supportedFields,type)>=0&&(templateUrl=templateUrl+type+".html"),$templateCache.get(templateUrl)};return{template:"
{{field.title}}
",restrict:"E",scope:{field:"=",required:"&",design:"=",index:"=",forms:"="},link:function(scope,element){$rootScope.chooseDefaultOption=scope.chooseDefaultOption=function(type){"yes_no"===type?scope.field.fieldValue="true":"rating"===type?scope.field.fieldValue=0:"radio"===scope.field.fieldType?(console.log(scope.field),scope.field.fieldValue=scope.field.fieldOptions[0].option_value,console.log(scope.field.fieldValue)):"legal"===type&&(scope.field.fieldValue="true",$rootScope.nextField())},scope.setActiveField=$rootScope.setActiveField,"date"===scope.field.fieldType&&(scope.dateOptions={changeYear:!0,changeMonth:!0,altFormat:"mm/dd/yyyy",yearRange:"1900:-0",defaultDate:0});var fieldType=scope.field.fieldType;if("number"===scope.field.fieldType||"textfield"===scope.field.fieldType||"email"===scope.field.fieldType||"link"===scope.field.fieldType){switch(scope.field.fieldType){case"textfield":scope.field.input_type="text";break;case"email":scope.field.input_type="email",scope.field.placeholder="joesmith@example.com";break;case"number":scope.field.input_type="text",scope.field.validateRegex=/^-?\d+$/;break;default:scope.field.input_type="url",scope.field.placeholder="http://example.com"}fieldType="textfield"}var template=getTemplateUrl(fieldType);element.html(template).show();$compile(element.contents())(scope)}}}]),angular.module("view-form").directive("onEnterKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode,onEnterKeyDisabled=!1;null!==$attrs.onEnterKeyDisabled&&(onEnterKeyDisabled=$attrs.onEnterKeyDisabled),13!==keyCode||event.shiftKey||onEnterKeyDisabled||(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterKey)}))})}}}]).directive("onTabKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;9!==keyCode||event.shiftKey||(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onTabKey)}))})}}}]).directive("onEnterOrTabKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;13!==keyCode&&9!==keyCode||event.shiftKey||(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onEnterOrTabKey)}))})}}}]).directive("onTabAndShiftKey",["$rootScope",function($rootScope){return{restrict:"A",link:function($scope,$element,$attrs){$element.bind("keydown keypress",function(event){var keyCode=event.which||event.keyCode;9===keyCode&&event.shiftKey&&(event.preventDefault(),$rootScope.$apply(function(){$rootScope.$eval($attrs.onTabAndShiftKey)}))})}}}]),angular.module("view-form").directive("onFinishRender",["$rootScope","$timeout",function($rootScope,$timeout){return{restrict:"A",link:function(scope,element,attrs){if(element.attr("ng-repeat")||element.attr("data-ng-repeat")){var broadcastMessage=attrs.onFinishRender||"ngRepeat";scope.$first&&!scope.$last?scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Started")}):scope.$last&&scope.$evalAsync(function(){$rootScope.$broadcast(broadcastMessage+" Finished")})}}}}]),angular.module("view-form").directive("submitFormDirective",["$http","TimeCounter","$filter","$rootScope","SendVisitorData",function($http,TimeCounter,$filter,$rootScope,SendVisitorData){return{templateUrl:"modules/forms/base/views/directiveViews/form/submit-form.client.view.html",restrict:"E",scope:{myform:"="},controller:["$document","$window","$scope",function($document,$window,$scope){$scope.noscroll=!1,$scope.forms={};var form_fields_count=$scope.myform.visible_form_fields.filter(function(field){return"statement"!==field.fieldType&&"rating"!==field.fieldType}).length,nb_valid=$filter("formValidity")($scope.myform);$scope.translateAdvancementData={done:nb_valid,total:form_fields_count,answers_not_completed:form_fields_count-nb_valid},$scope.reloadForm=function(){$scope.myform.submitted=!1,$scope.myform.form_fields=_.chain($scope.myform.visible_form_fields).map(function(field){return field.fieldValue="",field}).value(),$scope.loading=!1,$scope.error="",$scope.selected={_id:"",index:0},$scope.setActiveField($scope.myform.visible_form_fields[0]._id,0,!1),TimeCounter.restartClock()},$window.onscroll=function(){$scope.scrollPos=document.body.scrollTop||document.documentElement.scrollTop||0;var elemBox=document.getElementsByClassName("activeField")[0].getBoundingClientRect();$scope.fieldTop=elemBox.top,$scope.fieldBottom=elemBox.bottom;var field_id,field_index;$scope.noscroll||($scope.selected.index===$scope.myform.visible_form_fields.length-1&&$scope.fieldBottom<200?(field_index=$scope.selected.index+1,field_id="submit_field",$scope.setActiveField(field_id,field_index,!1)):$scope.selected.index===$scope.myform.visible_form_fields.length?$scope.fieldTop>200&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):$scope.fieldBottom<0?(field_index=$scope.selected.index+1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)):0!==$scope.selected.index&&$scope.fieldTop>0&&(field_index=$scope.selected.index-1,field_id=$scope.myform.visible_form_fields[field_index]._id,$scope.setActiveField(field_id,field_index,!1)),$scope.$apply())};var getActiveField=function(){if(null===$scope.selected)throw console.error("current active field is null"),new Error("current active field is null");return"submit_field"===$scope.selected._id?$scope.myform.form_fields.length-1:$scope.selected.index};$scope.setActiveField=$rootScope.setActiveField=function(field_id,field_index,animateScroll){if(null!==$scope.selected&&$scope.selected._id!==field_id){$scope.selected._id=field_id,$scope.selected.index=field_index;var nb_valid=$filter("formValidity")($scope.myform);$scope.translateAdvancementData={done:nb_valid,total:form_fields_count,answers_not_completed:form_fields_count-nb_valid},animateScroll?($scope.noscroll=!0,setTimeout(function(){$document.scrollToElement(angular.element(".activeField"),-10,200).then(function(){$scope.noscroll=!1,setTimeout(function(){document.querySelectorAll(".activeField .focusOn").length?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input").length?document.querySelectorAll(".activeField input")[0].focus():document.querySelectorAll(".activeField .selectize-input")[0].focus()})})})):setTimeout(function(){document.querySelectorAll(".activeField .focusOn")[0]?document.querySelectorAll(".activeField .focusOn")[0].focus():document.querySelectorAll(".activeField input")[0].focus()}),SendVisitorData.send($scope.myform,getActiveField(),TimeCounter.getTimeElapsed())}},$rootScope.nextField=$scope.nextField=function(){var selected_index,selected_id;$scope.selected.index<$scope.myform.visible_form_fields.length-1?(selected_index=$scope.selected.index+1,selected_id=$scope.myform.visible_form_fields[selected_index]._id,$rootScope.setActiveField(selected_id,selected_index,!0)):$scope.selected.index===$scope.myform.visible_form_fields.length-1&&(selected_index=$scope.selected.index+1,selected_id="submit_field",$rootScope.setActiveField(selected_id,selected_index,!0))},$rootScope.prevField=$scope.prevField=function(){if($scope.selected.index>0){var selected_index=$scope.selected.index-1,selected_id=$scope.myform.visible_form_fields[selected_index]._id;$scope.setActiveField(selected_id,selected_index,!0)}},$scope.exitStartPage=function(){$scope.myform.startPage.showStart=!1,$scope.myform.visible_form_fields.length>0&&($scope.selected._id=$scope.myform.visible_form_fields[0]._id)},$rootScope.goToInvalid=$scope.goToInvalid=function(){document.querySelectorAll(".ng-invalid.focusOn")[0].focus()},$rootScope.submitForm=$scope.submitForm=function(){var _timeElapsed=TimeCounter.stopClock();$scope.loading=!0;var form=_.cloneDeep($scope.myform);form.timeElapsed=_timeElapsed,form.percentageComplete=$filter("formValidity")($scope.myform)/$scope.myform.visible_form_fields.length*100,delete form.visible_form_fields;for(var i=0;i<$scope.myform.form_fields.length;i++)"dropdown"!==$scope.myform.form_fields[i].fieldType||$scope.myform.form_fields[i].deletePreserved||($scope.myform.form_fields[i].fieldValue=$scope.myform.form_fields[i].fieldValue.option_value);setTimeout(function(){$scope.submitPromise=$http.post("/forms/"+$scope.myform._id,form).success(function(data,status,headers){console.log($scope.myform.form_fields[0]),$scope.myform.submitted=!0,$scope.loading=!1,SendVisitorData.send($scope.myform,getActiveField(),_timeElapsed)}).error(function(error){$scope.loading=!1,console.error(error),$scope.error=error.message})},500)},$scope.reloadForm()}]}}]),angular.module("view-form").service("CurrentForm",function(){var _form={};this.getForm=function(){return _form},this.setForm=function(form){_form=form}}),angular.module("view-form").factory("Forms",["$resource","FORM_URL",function($resource,FORM_URL){return $resource(FORM_URL,{formId:"@_id"},{query:{method:"GET",isArray:!0},get:{method:"GET",transformResponse:function(data,header){var form=angular.fromJson(data);return form.visible_form_fields=_.filter(form.form_fields,function(field){return field.deletePreserved===!1}),form}},update:{method:"PUT"},save:{method:"POST"}})}]),function(){function Socket($timeout,$window){function connect(url){service.socket=io(url,{transports:["websocket","polling"]})}function emit(eventName,data){service.socket&&service.socket.emit(eventName,data)}function on(eventName,callback){service.socket&&service.socket.on(eventName,function(data){$timeout(function(){callback(data)})})}function removeListener(eventName){service.socket&&service.socket.removeListener(eventName)}var service={connect:connect,emit:emit,on:on,removeListener:removeListener,socket:null};return connect(window.location.protocol+"//"+window.location.hostname+":"+$window.socketPort),service}angular.module("view-form").factory("Socket",Socket),Socket.$inject=["$timeout","$window"]}(),angular.module("view-form").service("TimeCounter",[function(){var _startTime,_endTime=null;this.timeSpent=0,this.restartClock=function(){_startTime=Date.now(),_endTime=null},this.getTimeElapsed=function(){return _startTime?Math.abs(Date.now().valueOf()-_startTime.valueOf())/1e3:void 0},this.stopClock=function(){return _startTime&&null===_endTime?(_endTime=Date.now(),this.timeSpent=Math.abs(_endTime.valueOf()-_startTime.valueOf())/1e3,this._startTime=this._endTime=null,this.timeSpent):new Error("Clock has not been started")},this.clockStarted=function(){return!!this._startTime}}]);
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/controllers/admin-form.client.controller.test.js b/public/form_modules/forms/tests/unit/controllers/admin-form.client.controller.test.js
deleted file mode 100644
index 7530812f..00000000
--- a/public/form_modules/forms/tests/unit/controllers/admin-form.client.controller.test.js
+++ /dev/null
@@ -1,256 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('AdminForm Controller Tests', function() {
- // Initialize global variables
- var AdminFormController,
- createAdminFormController,
- scope,
- $httpBackend,
- $stateParams,
- $location,
- $state;
-
- var sampleUser = {
- firstName: 'Full',
- lastName: 'Name',
- email: 'test@test.com',
- username: 'test@test.com',
- password: 'password',
- provider: 'local',
- roles: ['user'],
- _id: 'ed873933b1f1dea0ce12fab9'
- };
-
- var sampleForm = {
- title: 'Form Title',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false, _id:'56340745f59a6fc9e22028e9'},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false, _id:'5c9e22028e907634f45f59a6'},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false, _id:'56e90745f5934fc9e22028a6'}
- ],
- _id: '525a8422f6d0f87f0e407a33'
- };
-
- var expectedForm = {
- title: 'Form Title',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false, _id:'56340745f59a6fc9e22028e9'},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false, _id:'5c9e22028e907634f45f59a6'},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false, _id:'56e90745f5934fc9e22028a6'}
- ],
- visible_form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false, _id:'56340745f59a6fc9e22028e9'},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false, _id:'5c9e22028e907634f45f59a6'},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false, _id:'56e90745f5934fc9e22028a6'}
- ],
- _id: '525a8422f6d0f87f0e407a33'
- };
-
- var newFakeModal = function(){
- var result = {
- opened: true,
- result: {
- then: function(confirmCallback, cancelCallback) {
- //Store the callbacks for later when the user clicks on the OK or Cancel button of the dialog
- this.confirmCallBack = confirmCallback;
- this.cancelCallback = cancelCallback;
- }
- },
- close: function( item ) {
- //The user clicked OK on the modal dialog, call the stored confirm callback with the selected item
- this.opened = false;
- this.result.confirmCallBack( item );
- },
- dismiss: function( type ) {
- //The user clicked cancel on the modal dialog, call the stored cancel callback
- this.opened = false;
- this.result.cancelCallback( type );
- }
- };
- return result;
- };
-
- //Mock Users Service
- beforeEach(module(function($provide) {
- $provide.service('myForm', function($q) {
- return sampleForm;
- });
- }));
-
-
- // The $resource service augments the response object with methods for updating and deleting the resource.
- // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
- // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
- // When the toEqualData matcher compares two objects, it takes only object properties into
- // account and ignores methods.
- beforeEach(function() {
- jasmine.addMatchers({
- toEqualData: function(util, customEqualityTesters) {
- return {
- compare: function(actual, expected) {
- return {
- pass: angular.equals(actual, expected)
- };
- }
- };
- }
- });
- });
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
-
- beforeEach(module('stateMock'));
-
- //Mock Users Service
- beforeEach(module(function($provide) {
- $provide.service('User', function($q) {
- return {
- getCurrent: function() {
- var deferred = $q.defer();
- deferred.resolve( JSON.stringify(sampleUser) );
- return deferred.promise;
- },
- login: function(credentials) {
- var deferred = $q.defer();
- if( credentials.password === sampleUser.password && credentials.username === sampleUser.username){
- deferred.resolve( JSON.stringify(sampleUser) );
- }else {
- deferred.resolve('Error: User could not be loggedin');
- }
-
- return deferred.promise;
- },
- logout: function() {
- var deferred = $q.defer();
- deferred.resolve(null);
- return deferred.promise;
- },
- signup: function(credentials) {
- var deferred = $q.defer();
- if( credentials.password === sampleUser.password && credentials.username === sampleUser.username){
- deferred.resolve( JSON.stringify(sampleUser) );
- }else {
- deferred.resolve('Error: User could not be signed up');
- }
-
- return deferred.promise;
- }
- };
- });
- }));
-
- //Mock Authentication Service
- beforeEach(module(function($provide) {
- $provide.service('Auth', function() {
- return {
- ensureHasCurrentUser: function() {
- return sampleUser;
- },
- isAuthenticated: function() {
- return true;
- },
- getUserState: function() {
- return true;
- }
- };
- });
- }));
-
-
- //Mock $uibModal
- beforeEach(inject(function($uibModal) {
- var modal = newFakeModal();
- spyOn($uibModal, 'open').and.returnValue(modal);
- //spyOn($uibModal, 'close').and.callFake(modal.close());
- }));
-
- // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
- // This allows us to inject a service but then attach it to a variable
- // with the same name as the service.
- beforeEach(inject(function($controller, $rootScope, _$state_, _$location_, _$stateParams_, _$httpBackend_, CurrentForm, Forms) {
- // Set a new global scope
- scope = $rootScope.$new();
-
- //Set CurrentForm
- CurrentForm.setForm(sampleForm);
-
- // Point global variables to injected services
- $stateParams = _$stateParams_;
- $httpBackend = _$httpBackend_;
- $location = _$location_;
- $state = _$state_;
-
- $httpBackend.whenGET(/\.html$/).respond('');
- $httpBackend.whenGET('/users/me/').respond('');
-
- // Initialize the Forms controller.
- createAdminFormController = function(){
- return $controller('AdminFormController', { $scope: scope });
- };
- }));
-
- it('AdminFormController should fetch current Form when instantiated', function() {
- // Run controller functionality
- var controller = createAdminFormController();
-
- // Test scope value
- expect(scope.myform).toEqualData(sampleForm);
- });
-
- it('$scope.removeCurrentForm() with valid form data should send a DELETE request with the id of form', function() {
- var controller = createAdminFormController();
-
- //Set $state transition
- $state.expectTransitionTo('listForms');
-
- // Set DELETE response
- $httpBackend.expect('DELETE', /^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
-
- //Run controller functionality
- scope.openDeleteModal();
- scope.removeCurrentForm();
-
- $httpBackend.flush();
- $state.ensureAllTransitionsHappened();
- });
-
- it('$scope.update() should send a PUT request with the id of form', function() {
- var controller = createAdminFormController();
-
- //Set PUT response
- $httpBackend.expect('PUT', /^(\/forms\/)([0-9a-fA-F]{24})$/).respond(200, sampleForm);
-
- //Run controller functionality
- scope.update(false, null);
-
- $httpBackend.flush();
- });
-
- it('$scope.openDeleteModal() should open scope.deleteModal', function() {
- var controller = createAdminFormController();
-
- //Run controller functionality
- scope.openDeleteModal();
- console.log(scope.deleteModal);
- expect(scope.deleteModal.opened).toEqual(true);
- });
-
- it('$scope.cancelDeleteModal() should close $scope.deleteModal', inject(function($uibModal) {
- var controller = createAdminFormController();
-
- //Run controller functionality
- scope.openDeleteModal();
-
- //Run controller functionality
- scope.cancelDeleteModal();
- expect( scope.deleteModal.opened ).toEqual(false);
- }));
- });
-}());
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/controllers/list-forms.client.controller.test.js b/public/form_modules/forms/tests/unit/controllers/list-forms.client.controller.test.js
deleted file mode 100644
index c89e73cf..00000000
--- a/public/form_modules/forms/tests/unit/controllers/list-forms.client.controller.test.js
+++ /dev/null
@@ -1,224 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('ListForms Controller Tests', function() {
- // Initialize global variables
- var ListFormsController,
- createListFormsController,
- scope,
- $httpBackend,
- $stateParams,
- $location,
- $state;
-
- var sampleForm = {
- title: 'Form Title',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false}
- ],
- _id: '525a8422f6d0f87f0e407a33'
- };
-
- var sampleFormList = [{
- title: 'Form Title1',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false}
- ],
- _id: '525a8422f6d0f87f0e407a33'
- },{
- title: 'Form Title2',
- admin: '39223933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false}
- ],
- _id: '52f6d0f87f5a407a384220e3'
- },{
- title: 'Form Title3',
- admin: '2fab9ed873937f0e1dea0ce1',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: '', deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: '', deletePreserved: false}
- ],
- _id: '922f6d0f87fed8730e4e1233'
- }
- ];
-
-
- // The $resource service augments the response object with methods for updating and deleting the resource.
- // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
- // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
- // When the toEqualData matcher compares two objects, it takes only object properties into
- // account and ignores methods.
- beforeEach(function() {
- jasmine.addMatchers({
- toEqualData: function(util, customEqualityTesters) {
- return {
- compare: function(actual, expected) {
- return {
- pass: angular.equals(actual, expected)
- };
- }
- };
- }
- });
- });
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
-
- beforeEach(module('stateMock'));
-
- //Mock Users Service
- beforeEach(module(function($provide) {
- $provide.service('myForm', function($q) {
- return sampleForm;
- });
- }));
-
-
- // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
- // This allows us to inject a service but then attach it to a variable
- // with the same name as the service.
- beforeEach(inject(function($controller, $rootScope, _$state_, _$location_, _$stateParams_, _$httpBackend_, CurrentForm, Forms) {
- // Set a new global scope
- scope = $rootScope.$new();
-
- //Set CurrentForm
- CurrentForm.setForm(sampleForm);
-
- // Point global variables to injected services
- $stateParams = _$stateParams_;
- $httpBackend = _$httpBackend_;
- $location = _$location_;
- $state = _$state_;
-
- $httpBackend.whenGET(/\.html$/).respond('');
- $httpBackend.whenGET('/users/me/').respond('');
-
- // Initialize the Forms controller.
- createListFormsController = function(){
- return $controller('ListFormsController', { $scope: scope });
- };
- }));
-
- it('$scope.findAll() should query all User\'s Forms', inject(function(Forms) {
-
- var controller = createListFormsController();
-
- // Set GET response
- $httpBackend.expectGET(/^(\/forms)$/).respond(200, sampleFormList);
-
- // Run controller functionality
- scope.findAll();
- $httpBackend.flush();
-
- // Test scope value
- expect( scope.myforms ).toEqualData(sampleFormList);
- }));
-
- it('$scope.duplicateForm() should duplicate a Form', inject(function(Forms) {
-
- var dupSampleForm = sampleFormList[2],
- dupSampleForm_index = 3,
- newSampleFormList = _.clone(sampleFormList);
- dupSampleForm._id = 'a02df75b44c1d26b6a5e05b8';
- newSampleFormList.splice(3, 0, dupSampleForm);
-
- var controller = createListFormsController();
-
- // Set GET response
- $httpBackend.expectGET(/^(\/forms)$/).respond(200, sampleFormList);
- // Run controller functionality
- scope.findAll();
- $httpBackend.flush();
-
- // Set GET response
- $httpBackend.expect('POST', '/forms').respond(200, dupSampleForm);
- // Run controller functionality
- scope.duplicateForm(2);
- $httpBackend.flush();
-
- // Test scope value
- expect( scope.myforms.length ).toEqual(newSampleFormList.length);
- for(var i=0; i');
- $compile(el)(tmp_scope);
- $rootScope.$digest();
-
- // Point global variables to injected services
- $httpBackend = _$httpBackend_;
-
- // $httpBackend.whenGET(/.+\.html$/).respond('');
- $httpBackend.whenGET('/users/me/').respond('');
-
- //Grab controller instance
- controller = el.controller();
-
- //Grab scope. Depends on type of scope.
- //See angular.element documentation.
- scope = el.isolateScope() || el.scope();
-
- }));
-
- it('$scope.uploadPDF() should upload a pdf file', function() {
- // expect(scope.isInitialized).toBeDefined()
- // expect(scope.log).toEqual('');
-
- expect(scope.pdfLoading).toBe(false);
-
- //Set POST response
- $httpBackend.when('POST', '/upload/pdf').respond(pdfObj);
-
- var files = [{}];
- scope.uploadPDF(files);
-
- $httpBackend.flush();
- expect(scope.myform.pdf).toEqualData(pdfObj);
- });
-
- it('$scope.removePDF() should removed uploaded pdf file', function() {
- // expect(scope.isInitialized).toBeDefined()
- // expect(scope.log).toEqual('');
-
- scope.myform.pdf = pdfObj;
- scope.myform.isGenerated = true;
- scope.myform.autofillPDFs = true;
-
- scope.removePDF();
-
- expect(scope.myform.pdf).toEqual(null);
- expect(scope.myform.isGenerated).toBe(false);
- expect(scope.myform.autofillPDFs).toBe(false);
- });
- });
-}());
diff --git a/public/form_modules/forms/tests/unit/directives/edit-form-submissions.client.directive.test.js b/public/form_modules/forms/tests/unit/directives/edit-form-submissions.client.directive.test.js
deleted file mode 100644
index 63520f48..00000000
--- a/public/form_modules/forms/tests/unit/directives/edit-form-submissions.client.directive.test.js
+++ /dev/null
@@ -1,200 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('EditSubmissions Directive-Controller Tests', function() {
- // Initialize global variables
- var el, scope, controller, $httpBackend;
-
- var sampleUser = {
- firstName: 'Full',
- lastName: 'Name',
- email: 'test@test.com',
- username: 'test@test.com',
- password: 'password',
- provider: 'local',
- roles: ['user'],
- _id: 'ed873933b1f1dea0ce12fab9'
- };
-
- var pdfObj = {
- fieldname:'file',
- originalname:'test.pdf',
- name:'1440112660375.pdf',
- encoding:'7bit',
- mimetype:'application/pdf',
- path:'uploads/tmp/test@test.com/1440112660375.pdf',
- extension:'pdf',
- size:56223,
- truncated:false,
- buffer:null
- };
-
- var sampleForm = {
- title: 'Form Title',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed873933b0ce121f1deafab9'},
- {fieldType:'checkbox', title:'nascar', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
- {fieldType:'checkbox', title:'hockey', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'}
- ],
- pdf: {},
- pdfFieldMap: {},
- startPage: {
- showStart: false
- },
- hideFooter: false,
- isGenerated: false,
- isLive: false,
- autofillPDFs: false,
- _id: '525a8422f6d0f87f0e407a33'
- };
-
- var sampleSubmission = {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'John Smith', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: 1, deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: 0, deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 17.55
- };
-
- var sampleSubmissions = [{
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'The Terminator', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: 0, deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: 1, deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 10.33
- },
- {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'John Smith', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: 1, deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: 0, deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 2.33
- },
- {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'Jane Doe', deletePreserved: false},
- {fieldType:'checkbox', title:'nascar', fieldValue: 1, deletePreserved: false},
- {fieldType:'checkbox', title:'hockey', fieldValue: 1, deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 11.11
- }];
-
- // The $resource service augments the response object with methods for updating and deleting the resource.
- // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
- // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
- // When the toEqualData matcher compares two objects, it takes only object properties into
- // account and ignores methods.
- beforeEach(function() {
- jasmine.addMatchers({
- toEqualData: function(util, customEqualityTesters) {
- return {
- compare: function(actual, expected) {
- return {
- pass: angular.equals(actual, expected)
- };
- }
- };
- }
- });
- });
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
- beforeEach(module('module-templates'));
- beforeEach(module('stateMock'));
-
- beforeEach(inject(function($compile, $controller, $rootScope, _$httpBackend_) {
-
- // Point global variables to injected services
- $httpBackend = _$httpBackend_;
-
- $httpBackend.whenGET('/users/me/').respond('');
- $httpBackend.whenGET(/^(\/forms\/)([0-9a-fA-F]{24})(\/submissions)$/).respond(200, sampleSubmissions);
-
- //Instantiate directive.
- var tmp_scope = $rootScope.$new();
- tmp_scope.myform = sampleForm;
- tmp_scope.user = sampleUser;
-
- //gotacha: Controller and link functions will execute.
- el = angular.element('');
- $compile(el)(tmp_scope);
- $rootScope.$digest();
-
- //Grab controller instance
- controller = el.controller();
-
- //Grab scope. Depends on type of scope.
- //See angular.element documentation.
- scope = el.isolateScope() || el.scope();
- }));
-
- it('$scope.initFormSubmissions() should fetch all relevant form submissions', function() {
- $httpBackend.expectGET(/^(\/forms\/)([0-9a-fA-F]{24})(\/submissions)$/).respond(200, sampleSubmissions);
- scope.initFormSubmissions();
- $httpBackend.flush();
- scope.$digest();
- });
-
- describe('Form Table Methods', function(){
-
- it('$scope.toggleAllCheckers should toggle all checkboxes in table', function(){
- scope.initFormSubmissions();
- $httpBackend.flush();
-
- //Run Controller Logic to Test
- scope.table.masterChecker = true;
- scope.toggleAllCheckers();
-
- for(var i=0; i');
- $compile(el)(tmp_scope);
- $rootScope.$digest();
-
- // Point global variables to injected services
- $httpBackend = _$httpBackend_;
-
- //$httpBackend.whenGET(/.+\.html$/).respond('');
- $httpBackend.whenGET('/users/me/').respond('');
-
- //Grab controller instance
- controller = el.controller();
-
- //Grab scope. Depends on type of scope.
- //See angular.element documentation.
- scope = el.isolateScope() || el.scope();
-
- }));
-
- describe('> Form Field >',function(){
-
- beforeEach(function(){
- scope.myform = _.cloneDeep(sampleForm);
- });
-
- it('$scope.addNewField() should ADD a new field to $scope.myform.form_fields', function() {
-
- //Run controller methods
- scope.addNewField(true, 'textfield');
-
- var expectedFormField = {
- title:'Short Text2',
- fieldType:'textfield',
- fieldValue: '',
- required: true,
- disabled: false,
- deletePreserved: false
- };
-
- var actualFormField = _.cloneDeep(_.last(scope.myform.form_fields));
- delete actualFormField._id;
-
- expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
- expect(actualFormField).toEqualData(expectedFormField);
- });
-
- it('$scope.deleteField() should DELETE a field to $scope.myform.form_fields', function() {
-
- //Run controller methods
- scope.deleteField(0);
-
- expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length-1);
- expect(_.first(scope.myform.form_fields)).toEqualData(sampleForm.form_fields[1]);
- });
-
- it('$scope.duplicateField() should DUPLICATE a field and update $scope.myform.form_fields', function() {
-
- //Run controller methods
- scope.duplicateField(0);
-
- var originalField = _.cloneDeep(scope.myform.form_fields[0]);
- originalField.title += ' copy';
-
- delete originalField._id;
- var copyField = _.cloneDeep(scope.myform.form_fields[1]);
- delete copyField._id;
-
- expect(scope.myform.form_fields.length).toEqual(sampleForm.form_fields.length+1);
- expect(originalField).toEqualData(copyField);
- });
-
- });
-
- describe('> Form Field Button >',function(){
-
- it('$scope.addButton() should ADD a button to $scope.myform.startPage.buttons', function() {
-
- var expectedStartPageBtn = {
- bgColor:'#ddd',
- color:'#ffffff',
- text: 'Button'
- };
-
- //Run controller methods
- scope.addButton();
- var actualStartPageBtn = _.cloneDeep(_.last(scope.myform.startPage.buttons));
- delete actualStartPageBtn._id;
-
- expect(scope.myform.startPage.buttons.length).toEqual(sampleForm.startPage.buttons.length+1);
- expect(actualStartPageBtn).toEqualData(expectedStartPageBtn);
- });
-
- it('$scope.deleteButton() should DELETE a button from $scope.myform.startPage.buttons', function() {
- //Run controller methods
- scope.deleteButton(scope.myform.startPage.buttons[0]);
-
- expect(scope.myform.startPage.buttons.length).toEqual(0);
- });
- });
-
- describe('> Form Field Option >',function(){
- it('$scope.addOption() should ADD a new option to a field.fieldOptions', function() {
- var originalOptionLen = scope.myform.form_fields[1].fieldOptions.length;
-
- //Run controller methods
- scope.addOption(1);
-
- expect(originalOptionLen+1).toEqual(scope.myform.form_fields[1].fieldOptions.length);
- expect(scope.myform.form_fields[1].fieldOptions[0].option_title).toEqualData('Option 0');
- expect(scope.myform.form_fields[1].fieldOptions[0].option_value).toEqualData('Option 0');
- });
-
- it('$scope.deleteOption() should DELETE remove option from field.fieldOptions', function() {
- //Run controller methods
- scope.deleteOption(1, scope.myform.form_fields[1].fieldOptions[0]);
-
- expect(scope.myform.form_fields[0].fieldOptions.length).toEqual(0);
- expect(scope.myform.form_fields[0].fieldOptions[0]).not.toBeDefined();
- });
- });
- });
-}());
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/directives/entry-page.client.directive.test.js b/public/form_modules/forms/tests/unit/directives/entry-page.client.directive.test.js
deleted file mode 100644
index e24cfc48..00000000
--- a/public/form_modules/forms/tests/unit/directives/entry-page.client.directive.test.js
+++ /dev/null
@@ -1,93 +0,0 @@
-// 'use strict';
-
-// (function() {
-// // Forms Controller Spec
-// describe('entryPage Directive Tests', function() {
-// // Initialize global variables
-// var scope,
-// $templateCache,
-// $httpBackend,
-// $compile;
-
-// var sampleStartPage = {
-// showStart: true,
-// introTitle: 'Welcome to Form',
-// introParagraph: 'Sample intro paragraph',
-// buttons:[
-// {
-// url: 'http://google.com',
-// action: '',
-// text: 'Google',
-// bgColor: '#ffffff',
-// color: '#000000',
-// },
-// {
-// url: 'http://facebook.com',
-// action: '',
-// text: 'Facebook',
-// bgColor: '#0000ff',
-// color: '#000000',
-// }
-// ]
-// };
-
-
-// // The $resource service augments the response object with methods for updating and deleting the resource.
-// // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
-// // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
-// // When the toEqualData matcher compares two objects, it takes only object properties into
-// // account and ignores methods.
-// beforeEach(function() {
-// jasmine.addMatchers({
-// toEqualData: function(util, customEqualityTesters) {
-// return {
-// compare: function(actual, expected) {
-// return {
-// pass: angular.equals(actual, expected)
-// };
-// }
-// };
-// }
-// });
-// });
-
-// // Load the main application module
-// beforeEach(module(ApplicationConfiguration.applicationModuleName));
-
-// beforeEach(inject(function($rootScope, _$compile_, _$httpBackend_) {
-// scope = $rootScope.$new();
-// $compile = _$compile_;
-
-// // Point global variables to injected services
-// $httpBackend = _$httpBackend_;
-// }));
-
-
-// it('should be able to render entryPage in html', function() {
-// scope.myStartPage = _.cloneDeep(sampleStartPage);
-// console.log(scope.myStartPage);
-// var element = angular.element('');
-// $compile(element)(scope);
-// scope.$digest();
-
-// // console.log(element.html());
-// expect(element.html()).not.toEqual('
Start Page
');
-// });
-
-// // it('exitStartPage should work for "startPage" type of entryPage', inject(function($rootScope) {
-// // scope.myPage = _.cloneDeep(sampleStartPage);
-// // var el = angular.element('');
-// // $compile(el)(scope);
-// // scope.$digest();
-
-// // $httpBackend.whenGET(/.+\.html$/).respond('');
-// // $httpBackend.whenGET('/users/me/').respond('');
-
-// // scope = el.isolateScope() || el.scope();
-
-// // scope.exitStartPage();
-// // // expect(scope.myStartPage.showStart).toBe(false);
-// // expect(el.html()).not.toEqual('
Start Page
');
-// // }));
-// });
-// }());
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/directives/field-icon.client.directive.test.js b/public/form_modules/forms/tests/unit/directives/field-icon.client.directive.test.js
deleted file mode 100644
index 32784832..00000000
--- a/public/form_modules/forms/tests/unit/directives/field-icon.client.directive.test.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('FieldIcon Directive Tests', function() {
- // Initialize global variables
- var scope,
- FormFields,
- faClasses = {
- 'textfield': 'fa fa-pencil-square-o',
- 'dropdown': 'fa fa-th-list',
- 'date': 'fa fa-calendar',
- 'checkbox': 'fa fa-check-square-o',
- 'radio': 'fa fa-dot-circle-o',
- 'email': 'fa fa-envelope-o',
- 'textarea': 'fa fa-pencil-square',
- 'legal': 'fa fa-legal',
- 'file': 'fa fa-cloud-upload',
- 'rating': 'fa fa-star-half-o',
- 'link': 'fa fa-link',
- 'scale': 'fa fa-sliders',
- 'stripe': 'fa fa-credit-card',
- 'statement': 'fa fa-quote-left',
- 'yes_no': 'fa fa-toggle-on',
- 'number': 'fa fa-slack'
- };
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
-
- beforeEach(inject(function ($rootScope, _FormFields_) {
- scope = $rootScope.$new();
- FormFields = _FormFields_;
- }));
-
- it('should be able render all field-icon types', inject(function($compile) {
- var currType, currClass;
-
- for(var i=0; i')(scope);
- scope.$digest();
-
- expect(currClass).toBeDefined();
-
- expect(element.find('i')).not.toBe(null);
- expect(element.find('i').hasClass(currClass)).toBe(true);
- }
-
- }));
- });
-}());
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/directives/field.client.directive.test.js b/public/form_modules/forms/tests/unit/directives/field.client.directive.test.js
deleted file mode 100644
index b5527d62..00000000
--- a/public/form_modules/forms/tests/unit/directives/field.client.directive.test.js
+++ /dev/null
@@ -1,97 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('Field Directive Tests', function() {
- // Initialize global variables
- var scope,
- FormFields,
- $templateCache,
- $httpBackend,
- $compile;
-
- var sampleUser = {
- firstName: 'Full',
- lastName: 'Name',
- email: 'test@test.com',
- username: 'test@test.com',
- password: 'password',
- provider: 'local',
- roles: ['user'],
- _id: 'ed873933b1f1dea0ce12fab9',
- };
-
- var sampleFields = [
- {fieldType:'textfield', title:'First Name', fieldValue: 'AoeuName', deletePreserved: false, required: true, disabled: false},
- {fieldType:'email', title:'Email', fieldValue: 'aoeu@aoeu.com', deletePreserved: false, required: true, disabled: false},
- {fieldType:'yes_no', title:'Do you Play Hockey?', fieldValue: 'true', deletePreserved: false, required: true, disabled: false},
- {fieldType:'url', title:'Github Account', fieldValue: 'http://github.com/aoeu', deletePreserved: false, required: true, disabled: false},
- {fieldType:'textarea', title:'Bio', fieldValue: 'This is my bio.', deletePreserved: false, required: true, disabled: false},
- {fieldType:'number', title:'Phone #', fieldValue: 5325325325, deletePreserved: false, required: true, disabled: false},
- {fieldType:'legal', title:'You agree to terms and conditions', description:'By selecting \'I agree\' you are agreeing under Canadian law that you have read and accept terms and conditions outlayed below', fieldValue: '', deletePreserved: false, required: true, disabled: false},
- {fieldType:'dropdown', title:'Your Sex', fieldValue: '', fieldOptions:[ { 'option_id': 0, 'option_title': 'M', 'option_value': 'male' }, { 'option_id': 1, 'option_title': 'F', 'option_value': 'female' }], deletePreserved: false, required: true, disabled: false},
- {fieldType:'radio', title:'Your Sexual Orientation', fieldValue: '', fieldOptions:[ { 'option_id': 0, 'option_title': 'Heterosexual', 'option_value': 'hetero' }, { 'option_id': 1, 'option_title': 'Homosexual', 'option_value': 'homo' }, { 'option_id': 2, 'option_title': 'Bisexual', 'option_value': 'bi' }, { 'option_id': 3, 'option_title': 'Asexual', 'option_value': 'asex' }], deletePreserved: false, required: true, disabled: false},
- {fieldType:'rating', title:'Your Current Happiness', fieldValue: '0', deletePreserved: false, required: true, disabled: false},
- ];
-
-
- // The $resource service augments the response object with methods for updating and deleting the resource.
- // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
- // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
- // When the toEqualData matcher compares two objects, it takes only object properties into
- // account and ignores methods.
- beforeEach(function() {
- jasmine.addMatchers({
- toEqualData: function(util, customEqualityTesters) {
- return {
- compare: function(actual, expected) {
- return {
- pass: angular.equals(actual, expected)
- };
- }
- };
- }
- });
- });
-
- beforeEach(module(function ($sceProvider) {
- $sceProvider.enabled(false);
- }));
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
- beforeEach(module('stateMock'));
- beforeEach(module('module-templates'));
-
- beforeEach(module('ngSanitize', 'ui.select'));
-
- beforeEach(inject(function($rootScope, _FormFields_, _$compile_) {
- scope = $rootScope.$new();
- FormFields = _FormFields_;
-
- $compile = _$compile_;
- }));
-
- it('should be able to render all field types in html', inject(function($rootScope) {
- scope.fields = sampleFields;
-
- for(var i=0; i');
- $compile(element)(scope);
- scope.$digest();
-
- console.log('Actual: ');
- console.log(element.html());
-
- console.log('\nExpected: ');
-
- console.log('
')(scope);
- scope.$digest();
-
- //run code to test
- expect($rootScope.$broadcast).toHaveBeenCalledWith('editFormFields Started');
- expect(scope.$broadcast).toHaveBeenCalledWith('editFormFields Finished');
- }));
-
- it('should emit "ngRepeat Finished" and "ngRepeat Started" events on ng-repeat when attr is not set to string', inject(function($compile, $rootScope) {
-
- // console.log(FormFields.types);
- scope.myfields = FormFields.types;
-
- var e = $compile('
{{item.name}}
')(scope);
- scope.$digest();
-
- //run code to test
- expect($rootScope.$broadcast).toHaveBeenCalledWith('ngRepeat Started');
- expect(scope.$broadcast).toHaveBeenCalledWith('ngRepeat Finished');
- }));
-
- });
-}());
\ No newline at end of file
diff --git a/public/form_modules/forms/tests/unit/directives/submit-form.client.directive.test.js b/public/form_modules/forms/tests/unit/directives/submit-form.client.directive.test.js
deleted file mode 100644
index db46b05c..00000000
--- a/public/form_modules/forms/tests/unit/directives/submit-form.client.directive.test.js
+++ /dev/null
@@ -1,203 +0,0 @@
-'use strict';
-
-(function() {
- // Forms Controller Spec
- describe('SubmitForm Directive-Controller Tests', function() {
- // Initialize global variables
- var scope, controller, $httpBackend;
-
- var sampleUser = {
- firstName: 'Full',
- lastName: 'Name',
- email: 'test@test.com',
- username: 'test@test.com',
- password: 'password',
- provider: 'local',
- roles: ['user'],
- _id: 'ed873933b1f1dea0ce12fab9'
- };
-
- var pdfObj = {
- fieldname:'file',
- originalname:'test.pdf',
- name:'1440112660375.pdf',
- encoding:'7bit',
- mimetype:'application/pdf',
- path:'uploads/tmp/test@test.com/1440112660375.pdf',
- extension:'pdf',
- size:56223,
- truncated:false,
- buffer:null
- };
-
- var sampleForm = {
- title: 'Form Title',
- admin: 'ed873933b1f1dea0ce12fab9',
- language: 'english',
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed873933b0ce121f1deafab9'},
- {fieldType:'checkbox', title:'nascar', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
- {fieldType:'checkbox', title:'hockey', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'} ],
- visible_form_fields: [
- {fieldType:'textfield', title:'First Name', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed873933b0ce121f1deafab9'},
- {fieldType:'checkbox', title:'nascar', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
- {fieldType:'checkbox', title:'hockey', fieldOptions: [], fieldValue: '', required: true, disabled: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'} ],
- pdf: {},
- pdfFieldMap: {},
- startPage: {
- showStart: false
- },
- hideFooter: false,
- isGenerated: false,
- isLive: false,
- autofillPDFs: false,
- _id: '525a8422f6d0f87f0e407a33'
- };
-
- var sampleSubmission = {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'John Smith', deletePreserved: false, _id: 'ed873933b0ce121f1deafab9'},
- {fieldType:'yes_no', title:'Do you like nascar', fieldValue: true, deletePreserved: false, _id: 'ed83b0ce121f17393deafab9'},
- {fieldType:'yes_no', title:'Do you like hockey', fieldValue: false, deletePreserved: false, _id: 'ed8317393deab0ce121ffab9'}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 17.55
- };
-
- var sampleSubmissions = [{
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'The Terminator', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like nascar', fieldValue: 'true', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like hockey', fieldValue: 'false', deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 10.33
- },
- {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'John Smith', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like nascar', fieldValue: 'true', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like hockey', fieldValue: 'true', deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 2.33
- },
- {
- form_fields: [
- {fieldType:'textfield', title:'First Name', fieldValue: 'Jane Doe', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like nascar', fieldValue: 'false', deletePreserved: false},
- {fieldType:'yes_no', title:'Do you like hockey', fieldValue: 'false', deletePreserved: false}
- ],
- admin: sampleUser,
- form: sampleForm,
- timeElapsed: 11.11
- }];
-
- // The $resource service augments the response object with methods for updating and deleting the resource.
- // If we were to use the standard toEqual matcher, our tests would fail because the test values would not match
- // the responses exactly. To solve the problem, we define a new toEqualData Jasmine matcher.
- // When the toEqualData matcher compares two objects, it takes only object properties into
- // account and ignores methods.
- beforeEach(function() {
- jasmine.addMatchers({
- toEqualData: function(util, customEqualityTesters) {
- return {
- compare: function(actual, expected) {
- return {
- pass: angular.equals(actual, expected)
- };
- }
- };
- }
- });
- });
-
- // Load the main application module
- beforeEach(module(ApplicationConfiguration.applicationModuleName));
- beforeEach(module('module-templates'));
- beforeEach(module('stateMock'));
-
- beforeEach(inject(function($compile, $controller, $rootScope, _$httpBackend_) {
-
- // Point global variables to injected services
- $httpBackend = _$httpBackend_;
- $httpBackend.whenGET('/users/me/').respond('');
-
- //Instantiate directive.
- var tmp_scope = $rootScope.$new();
- tmp_scope.myform = sampleForm;
-
- //gotacha: Controller and link functions will execute.
- var el = angular.element('');
- $compile(el)(tmp_scope);
- tmp_scope.$digest();
- $rootScope.$digest();
-
- //Grab controller instance
- controller = el.controller();
-
- //Grab scope. Depends on type of scope.
- //See angular.element documentation.
- scope = el.isolateScope() || el.scope();
-
- console.log(scope);
- }));
-
- var Validator = (function() {
- return {
- hasMinimumFields: function(entry) {
- return !_.isEmpty(entry._id) && !_.isEmpty(entry.title);
- },
- isNewForm: function(entry) {
- return this.hasMinimumFields(entry);
- }
- };
- })();
-
-
- it('$scope.submitForm() should submit valid form', function(){
- //Initialize variables
- scope.myform.form_fields = sampleSubmissions[0].form_fields;
-
- var expectedForm = _.cloneDeep(sampleForm);
- expectedForm.form_fields = sampleSubmissions[0].form_fields;
- delete expectedForm.visible_form_fields;
-
- var data = function(data) {
- var form = angular.fromJson(data);
- var compareForm = _.cloneDeep(form);
- delete compareForm.timeElapsed;
- delete compareForm.percentageComplete;
-
- return Validator.isNewForm(form) && _.isEqual(compareForm, expectedForm);
- };
-
- //Set expected HTTP requests
- $httpBackend.expect('POST',/^(\/forms\/)([0-9a-fA-F]{24})$/, data).respond(200);
-
- //Run Controller Logic to Test
- scope.submitForm();
-
- $httpBackend.flush();
-
- setTimeout(function(){
- expect(scope.myform.submitted).toBe(true);
- expect(scope.error).toEqual('');
- }, 25);
- });
-
- it('$scope.reloadForm() should reset and reload form', function(){
- scope.submitForm();
- scope.reloadForm();
-
- expect(scope.myform.submitted).toBe(false);
- for(var i=0; i 0){
- var expectedState = this.expectedTransitions.shift();
- if(expectedState !== stateName){
- throw Error('Expected transition to state: ' + expectedState + ' but transitioned to ' + stateName );
- }
- }else{
- throw Error('No more transitions were expected! Tried to transition to '+ stateName );
- }
- console.log('Mock transition to: ' + stateName);
- var deferred = $q.defer();
- var promise = deferred.promise;
- deferred.resolve();
- return promise;
- };
-
- this.go = this.transitionTo;
- this.expectTransitionTo = function(stateName){
- this.expectedTransitions.push(stateName);
- };
-
- this.ensureAllTransitionsHappened = function(){
- if(this.expectedTransitions.length > 0){
- throw Error('Not all transitions happened!');
- }
- };
-});
\ No newline at end of file