diff --git a/views/ngXosLib/xosHelpers/spec/.eslintrc b/views/ngXosLib/xosHelpers/spec/.eslintrc
new file mode 100644
index 0000000..de1e44b
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/spec/.eslintrc
@@ -0,0 +1,7 @@
+{
+  "rules": {
+    "angular/ng_angularelement": 0,
+    "angular/ng_no_digest": 0,
+    "angular/ng_json_functions": 0
+  }
+}
\ No newline at end of file
diff --git a/views/ngXosLib/xosHelpers/spec/log.test.js b/views/ngXosLib/xosHelpers/spec/log.test.js
index f286a8e..21085c6 100644
--- a/views/ngXosLib/xosHelpers/spec/log.test.js
+++ b/views/ngXosLib/xosHelpers/spec/log.test.js
@@ -3,6 +3,7 @@
  *
  * Created by teone on 4/18/16.
  */
+/* eslint-disable angular/ng_window_service*/
 
 // TODO write tests for log
 // NODE Actually the code is working, the tests are not.
@@ -12,9 +13,9 @@
 
   xdescribe('The xos.helper module', function(){
 
-    let log;
+    let log, window;
 
-    var mockLog;
+    let mockLog;
 
     beforeEach(function() {
       mockLog = jasmine.createSpyObj('logMock', ['info']);
@@ -28,8 +29,9 @@
       });
     });
 
-    beforeEach(inject(($log) => {
+    beforeEach(inject(($log, $window) => {
       log = $log;
+      window = $window;
       // log.reset();
     }));
 
diff --git a/views/ngXosLib/xosHelpers/spec/ui/field.test.js b/views/ngXosLib/xosHelpers/spec/ui/field.test.js
index fad0826..f294daa 100644
--- a/views/ngXosLib/xosHelpers/spec/ui/field.test.js
+++ b/views/ngXosLib/xosHelpers/spec/ui/field.test.js
@@ -14,13 +14,13 @@
     if(!scope){
       scope = rootScope.$new();
     }
-    if(!angular.isDefined(element)){
+    if(angular.isUndefined(element)){
       element = angular.element('<xos-field name="name" field="field" ng-model="ngModel"></xos-field>');
     }
     compile(element)(scope);
     scope.$digest();
     isolatedScope = element.isolateScope().vm;
-  }
+  };
 
   describe('The xos.helper module', function(){
 
@@ -104,9 +104,6 @@
         });
       });
 
-
-
-
       describe('when a option is selected in dropdown', () => {
         beforeEach(() => {
           scope = rootScope.$new();
@@ -126,17 +123,18 @@
               }
             ]
           };
-          scope.ngModel = 'label';
+          scope.ngModel = 0;
           compileElement();
         });
 
         it('No of select elements', () => {
-          expect($(element).find('select').children('option').length).toEqual(3);
+          expect($(element).find('select').children('option').length).toEqual(2);
         });
 
-        it('should show a selected value', () => {
-          var elem =  angular.element($(element).find('select').children('option')[1]);
+        it('should show the selected value', () => {
+          var elem =  angular.element($(element).find('select').children('option')[0]);
           expect(elem.text()).toEqual('---Site---');
+          expect(elem).toHaveAttr('selected');
         });
       });
 
diff --git a/views/ngXosLib/xosHelpers/spec/ui/form.test.js b/views/ngXosLib/xosHelpers/spec/ui/form.test.js
index c1387ff..dc9c957 100644
--- a/views/ngXosLib/xosHelpers/spec/ui/form.test.js
+++ b/views/ngXosLib/xosHelpers/spec/ui/form.test.js
@@ -259,15 +259,25 @@
       });
       describe('when correctly configured for feedback', () => {
 
-        let cb = jasmine.createSpy('callback');
+        let fb = jasmine.createSpy('feedback').and.callFake(function(statusFlag) {
+          if(statusFlag){
+            scope.config.feedback.show = true;
+            scope.config.feedback.message = 'Form Submitted';
+            scope.config.feedback.type = 'success';
+          }
+          else {
+            scope.config.feedback.show = true;
+            scope.config.feedback.message = 'Error';
+            scope.config.feedback.type = 'danger';
 
-        beforeEach(inject(($rootScope) => {
+          }
+        });
 
-          scope = $rootScope.$new();
+        beforeEach(()=> {
+          scope = rootScope.$new();
+          scope.config =
+          {
 
-          scope.config = {
-            exclude: ['excludedField'],
-            formName: 'testForm',
             feedback: {
               show: false,
               message: 'Form submitted successfully !!!',
@@ -277,259 +287,33 @@
               {
                 label: 'Save',
                 icon: 'ok', // refers to bootstraps glyphicon
-                cb: cb,
+                cb: () => {},
                 class: 'success'
               }
-            ],
-            fields: {
-              first_name: {
-                label: 'Custom Label'
-              }
-            }
+            ]
           };
-
-          scope.model = {
-            id: 1,
-            first_name: 'Jhon',
-            last_name: 'Snow',
-            age: 25,
-            email: 'test@onlab.us',
-            birthDate: '2016-04-18T23:44:16.883181Z',
-            enabled: true,
-            role: 'user', //select
-            a_permissions: [
-            ],
-            object_field: {
-              string: 'bar',
-              number: 1,
-              email: 'teo@onlab.us'
-            }
-          };
-
+          scope.model={};
           compileElement();
-        }));
-
-        it('should add excluded properties to the list', () => {
-          let expected = ['id', 'validators', 'created', 'updated', 'deleted', 'backend_status', 'excludedField'];
-          expect(isolatedScope.excludedField).toEqual(expected);
         });
 
-        it('should render 10 input field', () => {
-          // boolean are in the form model, but are not input
-          expect(Object.keys(isolatedScope.formField).length).toEqual(9);
-          var field = element[0].getElementsByTagName('input');
-          expect(field.length).toEqual(10);
+        it('should not show feedback when loaded', () => {
+          expect($(element).find('xos-alert > div')).toHaveClass('alert alert-success ng-hide');
         });
 
-        it('should render 1 boolean field', () => {
-          expect($(element).find('.boolean-field > a').length).toEqual(2)
+        it('should show a success feedback', () => {
+          fb(true);
+          scope.$digest();
+          expect(isolatedScope.config.feedback.type).toEqual('success');
+          expect(fb).toHaveBeenCalledWith(true);
+          expect($(element).find('xos-alert > div')).toHaveClass('alert alert-success');
         });
 
-        it('when clicking on action should invoke callback', () => {
-          var link = $(element).find('[role="button"]');
-          //console.log(link);
-          link.click();
-          // TODO : Check correct parameters
-          expect(cb).toHaveBeenCalled();
-
-        });
-
-        it('should set a custom label', () => {
-          let nameField = element[0].getElementsByClassName('form-group')[0];
-          let label = angular.element(nameField.getElementsByTagName('label')[0]).text()
-          expect(label).toEqual('Custom Label:');
-        });
-
-        it('should use the correct input type', () => {
-          expect($(element).find('[name="age"]')).toHaveAttr('type', 'number');
-          expect($(element).find('[name="birthDate"]')).toHaveAttr('type', 'date');
-          expect($(element).find('[name="email"]')).toHaveAttr('type', 'email');
-        });
-
-
-
-        describe('A spy,configured with an alternate config implementation for Feedback', function() {
-          var feedbackParams, statusFlag, fetchedBar;
-
-          let fb = jasmine.createSpy('feedback').and.callFake(function(statusFlag) {
-            //console.log(statusFlag , '------------------------------------------------------');
-            if(statusFlag){
-              scope.config.feedback.show = true;
-              scope.config.feedback.message = 'Form Submitted';
-              scope.config.feedback.type = 'success';
-            }
-            else {
-              scope.config.feedback.show = true;
-              scope.config.feedback.message = 'Error';
-              scope.config.feedback.type = 'danger';
-
-            }
-            console.log(scope.config.feedback, '################################');
-
-
-
-          });
-
-          beforeEach(()=> {
-            scope = rootScope.$new();
-            scope.config =
-            {
-
-              feedback: {
-                show: false,
-                message: 'Form submitted successfully !!!',
-                type: 'success'
-              },
-              actions: [
-                {
-                  label: 'Save',
-                  icon: 'ok', // refers to bootstraps glyphicon
-                  cb: cb,
-                  class: 'success'
-                }
-              ]
-            };
-            scope.model={};
-            compileElement();
-          })
-
-          it('tracks that the spy was called', function() {
-            expect($(element).find('xos-alert > div')).toHaveClass('alert alert-success ng-hide');
-            scope.$digest();
-            fb(true);
-            scope.$digest();
-            expect(isolatedScope.config.feedback.type).toEqual('success');
-            expect(fb).toHaveBeenCalledWith(true);
-            expect($(element).find('xos-alert > div')).toHaveClass('alert alert-success');
-            fb(false);
-            scope.$digest();
-            expect(isolatedScope.config.feedback.type).toEqual('danger');
-            expect(fb).toHaveBeenCalledWith(false);
-            expect($(element).find('xos-alert > div')).toHaveClass('alert alert-danger');
-          });
-        });
-        xdescribe('the boolean field test', () => {
-
-          let setFalse, setTrue;
-
-          beforeEach(() => {
-            setFalse= $(element).find('.boolean-field > button:first-child');
-            setTrue = $(element).find('.boolean-field > button:last-child');
-          });
-
-          it('should change value to false', () => {
-            expect(isolatedScope.ngModel.enabled).toEqual(true);
-            setFalse.click();
-            expect(isolatedScope.ngModel.enabled).toEqual(false);
-          });
-
-          it('should change value to true', () => {
-            isolatedScope.ngModel.enabled = false;
-            scope.$apply();
-            expect(isolatedScope.ngModel.enabled).toEqual(false);
-            setTrue.click()
-            expect(isolatedScope.ngModel.enabled).toEqual(true);
-          });
-        });
-
-        // NOTE not sure why this tests are failing
-        xdescribe('the custom validation options', () => {
-          beforeEach(() => {
-            scope.config.fields.first_name.validators = {
-              minlength: 10,
-              maxlength: 15,
-              required: true
-            };
-
-            scope.config.fields.age = {
-              validators: {
-                min: 10,
-                max: 20
-              }
-            };
-
-            scope.$digest();
-          });
-
-          it('should validate required', () => {
-            scope.model.first_name = null;
-            scope.$digest();
-
-            expect(isolatedScope.testForm.first_name.$valid).toBeFalsy();
-            expect(isolatedScope.testForm.first_name.$error.required).toBeTruthy();
-          });
-
-          it('should validate minlength', () => {
-            scope.model.first_name = 'short';
-            scope.$digest();
-
-            expect(isolatedScope.testForm.first_name.$valid).toBeFalsy();
-            expect(isolatedScope.testForm.first_name.$error.minlength).toBeTruthy();
-          });
-
-          it('should validate maxlength', () => {
-            scope.model.first_name = 'this is way too long!';
-            scope.$digest();
-
-            expect(isolatedScope.testForm.first_name.$valid).toBeFalsy();
-            expect(isolatedScope.testForm.first_name.$error.maxlength).toBeTruthy();
-          });
-
-          it('should validate min', () => {
-            // not validating min and max for now
-            scope.model.age = 8;
-            scope.$digest();
-
-            expect(isolatedScope.testForm.age.$valid).toBeFalsy();
-            expect(isolatedScope.testForm.age.$error.min).toBeTruthy();
-          });
-        });
-
-        describe('when a deep model is passed', () => {
-
-          beforeEach(inject(($rootScope) => {
-
-            scope = $rootScope.$new();
-
-            scope.config = {
-              exclude: ['excludedField'],
-              formName: 'testForm',
-              actions: [
-                {
-                  label: 'Save',
-                  icon: 'ok', // refers to bootstraps glyphicon
-                  cb: cb,
-                  class: 'success'
-                }
-              ],
-              fields: {
-                object_field: {
-                  field_one: {
-                    label: 'Custom Label'
-                  }
-                }
-              }
-            };
-
-            scope.model = {
-              object_field: {
-                field_one: 'bar',
-                number: 1,
-                email: 'teo@onlab.us'
-              }
-            };
-
-            compileElement();
-          }));
-
-          it('should print nested field', () => {
-            expect($(element).find('input').length).toBe(3);
-          });
-
-          xit('should configure nested fields', () => {
-            let custom_label = $(element).find('input[name=field_one]').parent().find('label');
-            expect(custom_label.text()).toBe('Custom Label');
-          });
+        it('should show an error feedback', function() {
+          fb(false);
+          scope.$digest();
+          expect(isolatedScope.config.feedback.type).toEqual('danger');
+          expect(fb).toHaveBeenCalledWith(false);
+          expect($(element).find('xos-alert > div')).toHaveClass('alert alert-danger');
         });
       });
 
diff --git a/views/ngXosLib/xosHelpers/spec/ui/validation.test.js b/views/ngXosLib/xosHelpers/spec/ui/validation.test.js
index f8350ed..1029f2d 100644
--- a/views/ngXosLib/xosHelpers/spec/ui/validation.test.js
+++ b/views/ngXosLib/xosHelpers/spec/ui/validation.test.js
@@ -15,7 +15,7 @@
     if(!scope){
       scope = rootScope.$new();
     }
-    if(!angular.isDefined(element)){
+    if(angular.isUndefined(element)){
       element = angular.element('<xos-validation field="field" form="form"></xos-validation>');
     }
     compile(element)(scope);
