diff --git a/views/ngXosLib/xosHelpers/spec/log.test.js b/views/ngXosLib/xosHelpers/spec/log.test.js
index aa5c737..f286a8e 100644
--- a/views/ngXosLib/xosHelpers/spec/log.test.js
+++ b/views/ngXosLib/xosHelpers/spec/log.test.js
@@ -5,6 +5,7 @@
  */
 
 // TODO write tests for log
+// NODE Actually the code is working, the tests are not.
 
 (function () {
   'use strict';
@@ -13,8 +14,6 @@
 
     let log;
 
-    // beforeEach(module('xos.helpers'));
-
     var mockLog;
 
     beforeEach(function() {
@@ -23,32 +22,33 @@
 
     beforeEach(function() {
       angular.mock.module('xos.helpers', function($injector, $provide) {
+        // console.log('$injector',$injector.get('logDecorator'));
         $provide.value('$log', mockLog);
-        $provide.decorator('$log', $injector.get('logDecorator'));
+        // $provide.decorator('$log', $injector.get('logDecorator'));
       });
     });
 
-    // beforeEach(inject(($log) => {
-    //   log = $log;
-    //   log.reset();
-    // }));
+    beforeEach(inject(($log) => {
+      log = $log;
+      // log.reset();
+    }));
 
     describe('The log decorator', () => {
       it('should not print anything', inject(($log) => {
         // spyOn(log, 'info');
         $log.info('test');
-        // expect(mockLog.info).not.toHaveBeenCalled();
+        expect(mockLog.info).not.toHaveBeenCalled();
       }));
 
-      xdescribe('if logging is enabled', () => {
-        beforeEach(() => {
-          window.location.href += '?debug=true'
-        });
+    });
+    describe('if logging is enabled', () => {
+      beforeEach(() => {
+        window.location.href += '?debug=true'
+      });
 
-        it('should should log', () => {
-          log.info('test');
-          console.log(log.info.logs);
-        });
+      it('should should log', () => {
+        log.info('test');
+        console.log(log.info.logs);
       });
     });
   });
diff --git a/views/ngXosLib/xosHelpers/src/services/log.decorator.js b/views/ngXosLib/xosHelpers/src/services/log.decorator.js
index 382f78e..b8c5297 100644
--- a/views/ngXosLib/xosHelpers/src/services/log.decorator.js
+++ b/views/ngXosLib/xosHelpers/src/services/log.decorator.js
@@ -13,13 +13,18 @@
       return window.location.href.indexOf('debug=true') >= 0;
     }
     // Save the original $log.debug()
-    let debugFn = $delegate.info;
+    let logFn = $delegate.log;
+    let infoFn = $delegate.info;
+    let warnFn = $delegate.warn;
+    let errorFn = $delegate.error;
+    let debugFn = $delegate.debug;
 
     // create the replacement function
     const replacement = (fn) => {
       return function(){
+        // console.log(`Is Log Enabled: ${isLogEnabled()}`)
         if(!isLogEnabled()){
-          console.log('logging is disabled');
+          // console.log('logging is disabled');
           return;
         }
         let args    = [].slice.call(arguments);
@@ -28,12 +33,23 @@
         // Prepend timestamp
         args[0] = `[${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}] ${args[0]}`;
 
+        // HACK awfull fix for angular mock implementation whithin jasmine test failing issue
+        if (typeof $delegate.reset === 'function' && !($delegate.debug.logs instanceof Array)) {
+          // if we are within the mock and did not reset yet, we call it to avoid issue
+          // console.log('mock log impl fix to avoid logs array not existing...');
+          $delegate.reset();
+        }
+
         // Call the original with the output prepended with formatted timestamp
         fn.apply(null, args)
       };
     };
 
-    $delegate.info = replacement(debugFn);
+    $delegate.info = replacement(infoFn);
+    $delegate.log = replacement(logFn);
+    $delegate.warn = replacement(warnFn);
+    $delegate.error = replacement(errorFn);
+    $delegate.debug = replacement(debugFn);
 
     return $delegate;
   }]);
diff --git a/views/ngXosLib/xosHelpers/src/services/rest/Truckroll.js b/views/ngXosLib/xosHelpers/src/services/rest/Truckroll.js
index 0895a99..7af9016 100644
--- a/views/ngXosLib/xosHelpers/src/services/rest/Truckroll.js
+++ b/views/ngXosLib/xosHelpers/src/services/rest/Truckroll.js
@@ -4,12 +4,12 @@
   angular.module('xos.helpers')
   /**
   * @ngdoc service
-  * @name xos.helpers.Truckroll-Collection
-  * @description Angular resource to fetch /api/tenant/truckroll/:truckroll_id/
+  * @name xos.helpers.Truckroll
+  * @description Angular resource to fetch /api/tenant/truckroll/:id/
   **/
-  .service('Truckroll-Collection', function($resource){
-    return $resource('/api/tenant/truckroll/:truckroll_id/', { truckroll_id: '@id' }, {
+  .service('Truckroll', function($resource){
+    return $resource('/api/tenant/truckroll/:id/', { id: '@id' }, {
       update: { method: 'PUT' }
     });
   })
-})();
\ No newline at end of file
+})();
