CORD-772 Extending the GUI with external apps

Change-Id: Ie13d438716054260e03ff54ac752d9f072fb9d76
diff --git a/src/app/extender/services/onboard.service.spec.ts b/src/app/extender/services/onboard.service.spec.ts
new file mode 100644
index 0000000..f9373c9
--- /dev/null
+++ b/src/app/extender/services/onboard.service.spec.ts
@@ -0,0 +1,69 @@
+import * as angular from 'angular';
+import 'angular-mocks';
+import 'angular-resource';
+import {Subject} from 'rxjs';
+import {XosOnboarder, IXosOnboarder} from './onboard.service';
+import {IWSEventService} from '../../datasources/websocket/global';
+
+let service, $ocLazyLoad;
+
+const subject = new Subject();
+
+const MockWs: IWSEventService = {
+  list() {
+    return subject.asObservable();
+  }
+};
+
+const MockPromise = {
+  then: (cb) => {
+    cb('done');
+    return MockPromise;
+  },
+  catch: (cb) => {
+    cb('err');
+    return MockPromise;
+  }
+};
+
+const MockLoad = {
+  load: () => {
+    return MockPromise;
+  }
+};
+
+describe('The XosOnboarder service', () => {
+
+  beforeEach(() => {
+
+    angular
+      .module('XosOnboarder', [])
+      .value('WebSocket', MockWs)
+      .value('$ocLazyLoad', MockLoad)
+      .service('XosOnboarder', XosOnboarder);
+
+    angular.mock.module('XosOnboarder');
+  });
+
+  beforeEach(angular.mock.inject((
+    XosOnboarder: IXosOnboarder,
+    _$ocLazyLoad_: any
+  ) => {
+    $ocLazyLoad = _$ocLazyLoad_;
+    spyOn($ocLazyLoad, 'load').and.callThrough();
+    service = XosOnboarder;
+  }));
+
+  describe('when receive an event', () => {
+    it('should use $ocLazyLoad to add modules to the app', () => {
+      subject.next({
+        msg: {
+          app: 'sample',
+          files: ['vendor.js', 'app.js']
+        }
+      });
+      expect($ocLazyLoad.load).toHaveBeenCalledWith('vendor.js');
+      expect($ocLazyLoad.load).toHaveBeenCalledWith('app.js');
+    });
+  });
+});