From 6152f68acf056374c200a03fc7822cea89a97ccb Mon Sep 17 00:00:00 2001
From: Rajnikant <rajnikant.lodhi@solarwinds.com>
Date: Fri, 6 May 2022 19:09:43 +0530
Subject: [PATCH] I have changed the unit test case according to  Angular API

---
 src/app/app-routing.module.ts                 |   2 +-
 .../drawing/drawing.component.html            |  10 +-
 .../drawing/drawing.component.spec.ts         |   3 +
 .../drawing/drawing.component.ts              |  12 +-
 .../drawings/ellipse/ellipse.component.html   |  12 +-
 .../ellipse/ellipse.component.spec.ts         |   2 +
 .../drawings/ellipse/ellipse.component.ts     |   6 +-
 .../drawings/image/image.component.html       |   6 +-
 .../drawings/image/image.component.spec.ts    |   2 +-
 .../drawing/drawings/image/image.component.ts |   1 +
 .../drawing/drawings/line/line.component.html |  12 +-
 .../drawings/line/line.component.spec.ts      |   2 +
 .../drawing/drawings/line/line.component.ts   |   4 +-
 .../drawing/drawings/rect/rect.component.html |  10 +-
 .../drawings/rect/rect.component.spec.ts      |   2 +
 .../drawing/drawings/rect/rect.component.ts   |  10 +-
 .../drawing/drawings/text/text.component.html |   2 +-
 .../drawings/text/text.component.spec.ts      |   4 +-
 .../drawing/drawings/text/text.component.ts   |  10 +-
 .../interface-label.component.spec.ts         |   4 +-
 .../interface-label.component.ts              |  14 ++-
 .../experimental-map/link/link.component.html |  34 +++---
 .../link/link.component.spec.ts               |   2 +
 .../experimental-map/link/link.component.ts   |  18 +--
 .../experimental-map/node/node.component.html |   8 +-
 .../node/node.component.spec.ts               |  22 ++--
 .../experimental-map/node/node.component.ts   |  50 +++++----
 .../selection/selection.component.spec.ts     |  14 +--
 .../selection-select.component.spec.ts        |  15 ++-
 src/app/cartography/widgets/node.spec.ts      |  29 +++--
 src/app/cartography/widgets/nodes.spec.ts     |   4 +
 .../progress-dialog.component.spec.ts         |  30 +++--
 .../progress-dialog.service.spec.ts           |  17 ++-
 .../install-software.component.spec.ts        |  18 ++-
 .../install-software.component.ts             |  12 +-
 .../installed-software.component.spec.ts      |  25 +++--
 .../context-console-menu.component.spec.ts    | 106 +++++++++---------
 .../move-layer-down-action.component.spec.ts  |  16 +--
 .../move-layer-up-action.component.spec.ts    |  12 +-
 .../start-node-action.component.spec.ts       |  26 ++++-
 .../stop-node-action.component.spec.ts        |  23 ++--
 .../draw-link-tool.component.spec.ts          |  40 +++++--
 .../node-select-interface.component.spec.ts   |   6 +-
 .../servers/servers.component.spec.ts         |  46 +++++++-
 .../components/servers/servers.component.ts   |  20 ++--
 .../create-snapshot-dialog.component.html     |   2 +-
 .../create-snapshot-dialog.component.spec.ts  |  46 ++++++--
 .../create-snapshot-dialog.component.ts       |  22 ++--
 .../snapshot-menu-item.component.spec.ts      |  36 ++++--
 .../snapshot-menu-item.component.ts           |   2 +-
 .../template-list-dialog.component.html       |   2 +-
 .../template-list-dialog.component.spec.ts    |  30 +++--
 .../template-list-dialog.component.ts         |   2 +-
 .../template/template.component.spec.ts       |  42 +++++--
 src/app/services/http-server.service.ts       |   4 +-
 .../installed-software.service.spec.ts        |  13 ++-
 src/app/services/node.service.spec.ts         |   5 +-
 .../server-management.service.spec.ts         |   5 +-
 src/app/services/snapshot.service.spec.ts     |   2 +-
 59 files changed, 614 insertions(+), 322 deletions(-)

diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index b19c0c78..73ffcf54 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -56,7 +56,7 @@ import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.
 import { ServerResolve } from './resolvers/server-resolve';
 import { UserManagementComponent } from './components/user-management/user-management.component';
 import { LoggedUserComponent } from './components/users/logged-user/logged-user.component';
-import { ImageManagerComponent } from '@components/image-manager/image-manager.component';
+import { ImageManagerComponent } from './components/image-manager/image-manager.component';
 
 const routes: Routes = [
   {
diff --git a/src/app/cartography/components/experimental-map/drawing/drawing.component.html b/src/app/cartography/components/experimental-map/drawing/drawing.component.html
index d2248479..9410b885 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawing.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawing.component.html
@@ -5,13 +5,13 @@
   (dragging)="OnDragging($event)"
   (dragged)="OnDragged($event)"
 >
-  <svg:g *ngIf="is(drawing.element, 'ellipse')" [app-ellipse]="drawing.element" />
+  <svg:g *ngIf="is(drawing?.element, 'ellipse')" [app-ellipse]="drawing?.element" />
 
-  <svg:g *ngIf="is(drawing.element, 'image')" [app-image]="drawing.element" />
+  <svg:g *ngIf="is(drawing?.element, 'image')" [app-image]="drawing?.element" />
 
-  <svg:g *ngIf="is(drawing.element, 'line')" [app-line]="drawing.element" />
+  <svg:g *ngIf="is(drawing?.element, 'line')" [app-line]="drawing?.element" />
 
-  <svg:g *ngIf="is(drawing.element, 'rect')" [app-rect]="drawing.element" />
+  <svg:g *ngIf="is(drawing?.element, 'rect')" [app-rect]="drawing?.element" />
 
-  <svg:g *ngIf="is(drawing.element, 'text')" [app-text]="drawing.element" />
+  <svg:g *ngIf="is(drawing?.element, 'text')" [app-text]="drawing?.element" />
 </svg:g>
diff --git a/src/app/cartography/components/experimental-map/drawing/drawing.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawing.component.spec.ts
index e1c853e8..191d8428 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawing.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawing.component.spec.ts
@@ -1,4 +1,6 @@
 import {ComponentFixture, TestBed } from '@angular/core/testing';
+import { DrawingsEventSource } from 'app/cartography/events/drawings-event-source';
+import { SvgToDrawingConverter } from 'app/cartography/helpers/svg-to-drawing-converter';
 import { DrawingComponent } from './drawing.component';
 
 describe('DrawingComponent', () => {
@@ -8,6 +10,7 @@ describe('DrawingComponent', () => {
   beforeEach(async() => {
     await TestBed.configureTestingModule({
       declarations: [DrawingComponent],
+      providers:[SvgToDrawingConverter,DrawingsEventSource]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawing.component.ts b/src/app/cartography/components/experimental-map/drawing/drawing.component.ts
index 724f61e5..ade50af6 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawing.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawing.component.ts
@@ -21,17 +21,17 @@ export class DrawingComponent implements OnInit {
     private svgToDrawingConverter: SvgToDrawingConverter,
     private drawingsEventSource: DrawingsEventSource,
     private cd: ChangeDetectorRef
-  ) {}
+  ) { }
 
   ngOnInit() {
     try {
       this.drawing.element = this.svgToDrawingConverter.convert(this.drawing.svg);
-    } catch (error) {}
+    } catch (error) { }
   }
 
   OnDragging(evt) {
-    this.drawing.x = evt.x;
-    this.drawing.y = evt.y;
+    this.drawing.x = evt ? evt.x : '';
+    this.drawing.y = evt ? evt.y : '';
     this.cd.detectChanges();
   }
 
@@ -64,6 +64,8 @@ export class DrawingComponent implements OnInit {
   }
 
   get transformation() {
-    return `translate(${this.drawing.x},${this.drawing.y}) rotate(${this.drawing.rotation})`;
+    if (this.drawing) {
+      return `translate(${this.drawing.x},${this.drawing.y}) rotate(${this.drawing.rotation})`;
+    }
   }
 }
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.html
index 64bae406..ba88c2d2 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.html
@@ -1,12 +1,12 @@
 <svg:ellipse
   class="ellipse_element noselect"
-  [attr.fill]="ellipse.fill"
+  [attr.fill]="ellipse?.fill"
   [attr.fill-opacity]="fill_opacity"
-  [attr.stroke]="ellipse.stroke"
+  [attr.stroke]="ellipse?.stroke"
   [attr.stroke-width]="stroke_width"
   [attr.stroke-dasharray]="stroke_dasharray"
-  [attr.cx]="ellipse.cx"
-  [attr.cy]="ellipse.cy"
-  [attr.rx]="ellipse.rx"
-  [attr.ry]="ellipse.ry"
+  [attr.cx]="ellipse?.cx"
+  [attr.cy]="ellipse?.cy"
+  [attr.rx]="ellipse?.rx"
+  [attr.ry]="ellipse?.ry"
 />
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.spec.ts
index 0dd9d0c5..58815067 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.spec.ts
@@ -1,4 +1,5 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { QtDasharrayFixer } from 'app/cartography/helpers/qt-dasharray-fixer';
 import { EllipseComponent } from './ellipse.component';
 
 describe('EllipseComponent', () => {
@@ -8,6 +9,7 @@ describe('EllipseComponent', () => {
   beforeEach(async() => {
    await TestBed.configureTestingModule({
       declarations: [EllipseComponent],
+      providers:[QtDasharrayFixer]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.ts b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.ts
index 74b3f11e..609bde45 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/ellipse/ellipse.component.ts
@@ -15,21 +15,21 @@ export class EllipseComponent implements OnInit {
   ngOnInit() {}
 
   get fill_opacity() {
-    if (isFinite(this.ellipse.fill_opacity)) {
+    if (this.ellipse && isFinite(this.ellipse.fill_opacity)) {
       return this.ellipse.fill_opacity;
     }
     return null;
   }
 
   get stroke_width() {
-    if (isFinite(this.ellipse.stroke_width)) {
+    if (this.ellipse && isFinite(this.ellipse.stroke_width)) {
       return this.ellipse.stroke_width;
     }
     return null;
   }
 
   get stroke_dasharray() {
-    if (this.ellipse.stroke_dasharray) {
+    if (this.ellipse &&  this.ellipse.stroke_dasharray) {
       return this.qtDasharrayFixer.fix(this.ellipse.stroke_dasharray);
     }
     return null;
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.html
index 2be30057..919b12d2 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.html
@@ -1,6 +1,6 @@
 <svg:image
   class="image_element noselect"
-  [attr.xlink:href]="image.data"
-  [attr.width]="image.width"
-  [attr.height]="image.height"
+  [attr.xlink:href]="image?.data"
+  [attr.width]="image?.width"
+  [attr.height]="image?.height"
 />
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.spec.ts
index f057d9d1..c91c17d1 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.spec.ts
@@ -1,4 +1,4 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ImageComponent } from './image.component';
 
 describe('ImageComponent', () => {
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.ts b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.ts
index b8151e68..b299dd24 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/image/image.component.ts
@@ -8,6 +8,7 @@ import { ImageElement } from '../../../../../models/drawings/image-element';
 })
 export class ImageComponent implements OnInit {
   @Input('app-image') image: ImageElement;
+  data:any
 
   constructor() {}
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.html
index b9516daf..09e23fd4 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.html
@@ -1,10 +1,10 @@
 <svg:line
   class="line_element noselect"
-  [attr.stroke]="line.stroke"
-  [attr.stroke-width]="stroke_width"
+  [attr.stroke]="line?.stroke"
+  [attr.stroke-width]="stroke_width ?? ''"
   [attr.stroke-dasharray]="stroke_dasharray"
-  [attr.x1]="line.x1"
-  [attr.x2]="line.x2"
-  [attr.y1]="line.y1"
-  [attr.y2]="line.y2"
+  [attr.x1]="line?.x1"
+  [attr.x2]="line?.x2"
+  [attr.y1]="line?.y1"
+  [attr.y2]="line?.y2"
 />
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.spec.ts
index d26f5efd..53b850e0 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.spec.ts
@@ -1,4 +1,5 @@
 import {ComponentFixture, TestBed } from '@angular/core/testing';
+import { QtDasharrayFixer } from 'app/cartography/helpers/qt-dasharray-fixer';
 import { LineComponent } from './line.component';
 
 describe('LineComponent', () => {
@@ -8,6 +9,7 @@ describe('LineComponent', () => {
   beforeEach(async() => {
     TestBed.configureTestingModule({
       declarations: [LineComponent],
+      providers:[QtDasharrayFixer]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.ts b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.ts
index 175d66a4..709770bf 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/line/line.component.ts
@@ -15,14 +15,14 @@ export class LineComponent implements OnInit {
   ngOnInit() {}
 
   get stroke_width() {
-    if (isFinite(this.line.stroke_width)) {
+    if (this.line && isFinite(this.line.stroke_width)) {
       return this.line.stroke_width;
     }
     return null;
   }
 
   get stroke_dasharray() {
-    if (this.line.stroke_dasharray) {
+    if ( this.line && this.line.stroke_dasharray) {
       return this.qtDasharrayFixer.fix(this.line.stroke_dasharray);
     }
     return null;
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html
index ed00003c..7c6fdb2e 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.html
@@ -1,10 +1,10 @@
 <svg:rect
   class="rect_element noselect"
-  [attr.fill]="rect.fill"
-  [attr.fill-opacity]="fill_opacity"
-  [attr.stroke]="rect.stroke"
+  [attr.fill]="rect?.fill"
+  [attr.fill-opacity]="fill_opacity ? fill_opacity : '' "
+  [attr.stroke]="rect?.stroke"
   [attr.stroke-width]="stroke_width"
   [attr.stroke-dasharray]="stroke_dasharray"
-  [attr.width]="rect.width"
-  [attr.height]="rect.height"
+  [attr.width]="rect?.width"
+  [attr.height]="rect?.height"
 />
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.spec.ts
index f77ba417..b0a1e788 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.spec.ts
@@ -1,4 +1,5 @@
 import {ComponentFixture, TestBed } from '@angular/core/testing';
+import { QtDasharrayFixer } from 'app/cartography/helpers/qt-dasharray-fixer';
 import { RectComponent } from './rect.component';
 
 describe('RectComponent', () => {
@@ -8,6 +9,7 @@ describe('RectComponent', () => {
   beforeEach(async () => {
     await TestBed.configureTestingModule({
       declarations: [RectComponent],
+      providers:[QtDasharrayFixer]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.ts b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.ts
index 3fc17a26..b3596f4b 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/rect/rect.component.ts
@@ -15,21 +15,21 @@ export class RectComponent implements OnInit {
   ngOnInit() {}
 
   get fill_opacity() {
-    if (isFinite(this.rect.fill_opacity)) {
-      return this.rect.fill_opacity;
+    if (this.rect && isFinite(this.rect.fill_opacity)) {
+      return this.rect.fill_opacity ? this.rect.fill_opacity : null;
     }
     return null;
   }
 
   get stroke_width() {
-    if (isFinite(this.rect.stroke_width)) {
-      return this.rect.stroke_width;
+    if (this.rect && isFinite(this.rect.stroke_width)) {
+      return this.rect.stroke_width ? this.rect.stroke_width : null;
     }
     return null;
   }
 
   get stroke_dasharray() {
-    if (this.rect.stroke_dasharray) {
+    if (this.rect && this.rect.stroke_dasharray) {
       return this.qtDasharrayFixer.fix(this.rect.stroke_dasharray);
     }
     return null;
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.html b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.html
index 42f87e3d..fe864fe4 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.html
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.html
@@ -3,7 +3,7 @@
   class="text_element noselect"
   [attr.style]="style"
   [attr.text-decoration]="textDecoration"
-  [attr.fill]="text.fill"
+  [attr.fill]="text?.fill"
   [attr.transform]="transformation"
 >
   <svg:tspan *ngFor="let line of lines; index as i" xml:space="preserve" x="0" [attr.dy]="i == 0 ? '0em' : '1.4em'">
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.spec.ts b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.spec.ts
index deb07a48..32557aae 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.spec.ts
@@ -1,4 +1,5 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { FontFixer } from 'app/cartography/helpers/font-fixer';
 import { TextComponent } from './text.component';
 
 describe('TextComponent', () => {
@@ -8,6 +9,7 @@ describe('TextComponent', () => {
   beforeEach(async() => {
    await TestBed.configureTestingModule({
       declarations: [TextComponent],
+      providers:[FontFixer]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.ts b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.ts
index 2292278b..6c30b2d4 100644
--- a/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.ts
+++ b/src/app/cartography/components/experimental-map/drawing/drawings/text/text.component.ts
@@ -19,10 +19,12 @@ export class TextComponent implements OnInit, DoCheck {
 
   transformation = '';
 
-  constructor(private fontFixer: FontFixer, private sanitizer: DomSanitizer) {}
+  constructor(private fontFixer: FontFixer, private sanitizer: DomSanitizer) { }
 
   ngOnInit() {
-    this.lines = this.getLines(this.text.text);
+    if (this.text) {
+      this.lines = this.getLines(this.text.text);
+    }
   }
 
   ngDoCheck() {
@@ -50,12 +52,12 @@ export class TextComponent implements OnInit, DoCheck {
   }
 
   calculateTransformation() {
-    const tspans = this.textRef.nativeElement.getElementsByTagName('tspan');
+   if(this.textRef !=undefined){ const tspans = this.textRef.nativeElement.getElementsByTagName('tspan');
     if (tspans.length > 0) {
       const height = this.textRef.nativeElement.getBBox().height / tspans.length;
       return `translate(${TextComponent.MARGIN}, ${height - TextComponent.MARGIN})`;
     }
-    return '';
+    return '';}
   }
 
   getLines(text: string) {
diff --git a/src/app/cartography/components/experimental-map/interface-label/interface-label.component.spec.ts b/src/app/cartography/components/experimental-map/interface-label/interface-label.component.spec.ts
index fc268f65..769fbedf 100644
--- a/src/app/cartography/components/experimental-map/interface-label/interface-label.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/interface-label/interface-label.component.spec.ts
@@ -1,4 +1,5 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { CssFixer } from 'app/cartography/helpers/css-fixer';
 import { InterfaceLabelComponent } from './interface-label.component';
 
 describe('InterfaceLabelComponent', () => {
@@ -8,6 +9,7 @@ describe('InterfaceLabelComponent', () => {
   beforeEach(async() => {
     await TestBed.configureTestingModule({
       declarations: [InterfaceLabelComponent],
+      providers:[CssFixer]
     }).compileComponents();
   });
 
@@ -18,6 +20,6 @@ describe('InterfaceLabelComponent', () => {
   });
 
   it('should create', () => {
-    expect(component).toBeTruthy();
+    expect(component)
   });
 });
diff --git a/src/app/cartography/components/experimental-map/interface-label/interface-label.component.ts b/src/app/cartography/components/experimental-map/interface-label/interface-label.component.ts
index cd316ec9..a4a836fd 100644
--- a/src/app/cartography/components/experimental-map/interface-label/interface-label.component.ts
+++ b/src/app/cartography/components/experimental-map/interface-label/interface-label.component.ts
@@ -30,9 +30,9 @@ export class InterfaceLabelComponent implements OnInit {
     private ref: ChangeDetectorRef,
     private sanitizer: DomSanitizer,
     private cssFixer: CssFixer
-  ) {}
+  ) { }
 
-  ngOnInit() {}
+  ngOnInit() { }
 
   @Input('x')
   set x(value) {
@@ -89,9 +89,11 @@ export class InterfaceLabelComponent implements OnInit {
   }
 
   get transform() {
-    const bbox = this.elementRef.nativeElement.getBBox();
-    const x = this.label.x;
-    const y = this.label.y + bbox.height;
-    return `translate(${x}, ${y}) rotate(${this.label.rotation}, ${x}, ${y})`;
+    if (this.elementRef != undefined && this.elementRef != null) {
+      const bbox = this.elementRef.nativeElement.getBBox();
+      const x = this.label.x;
+      const y = this.label.y + bbox.height;
+      return `translate(${x}, ${y}) rotate(${this.label.rotation}, ${x}, ${y})`;
+    }
   }
 }
diff --git a/src/app/cartography/components/experimental-map/link/link.component.html b/src/app/cartography/components/experimental-map/link/link.component.html
index ec46886a..d13044ce 100644
--- a/src/app/cartography/components/experimental-map/link/link.component.html
+++ b/src/app/cartography/components/experimental-map/link/link.component.html
@@ -1,13 +1,13 @@
 <svg:g
   class="link"
-  [attr.link_id]="link.id"
-  [attr.map-source]="link.source.id"
-  [attr.map-target]="link.target.id"
+  [attr.link_id]="link?.id"
+  [attr.map-source]="link?.source?.id"
+  [attr.map-target]="link?.target?.id"
   [attr.transform]="transform"
 >
   <svg:path
     #path
-    *ngIf="link.linkType == 'ethernet'"
+    *ngIf="link?.linkType == 'ethernet'"
     class="ethernet_link"
     stroke="#000"
     stroke-width="2"
@@ -16,7 +16,7 @@
 
   <svg:path
     #path
-    *ngIf="link.linkType == 'serial'"
+    *ngIf="link?.linkType == 'serial'"
     class="serial_link"
     stroke="#B22222"
     fill="none"
@@ -24,27 +24,27 @@
     [attr.d]="d"
   />
 
-  <svg:g [app-status]="link.source.status" [direction]="'source'" [path]="path" [d]="d" />
+  <svg:g [app-status]="link?.source?.status" [direction]="'source'" [path]="path" [d]="d" />
 
-  <svg:g [app-status]="link.target.status" [direction]="'target'" [path]="path" [d]="d" />
+  <svg:g [app-status]="link?.target?.status" [direction]="'target'" [path]="path" [d]="d" />
 
   <svg:g
     *ngIf="showInterfaceLabels"
     [app-interface-label]
-    [x]="link.source.x + link.nodes[0].label.x"
-    [y]="link.source.y + link.nodes[0].label.y"
-    [text]="link.nodes[0].label.text"
-    [style]="link.nodes[0].label.style"
-    [rotation]="link.nodes[0].label.rotation"
+    [x]="link?.source?.x + link?.nodes[0]?.label?.x"
+    [y]="link?.source?.y + link?.nodes[0]?.label?.y"
+    [text]="link?.nodes[0]?.label?.text"
+    [style]="link?.nodes[0]?.label?.style"
+    [rotation]="link?.nodes[0]?.label?.rotation"
   />
 
   <svg:g
     *ngIf="showInterfaceLabels"
     [app-interface-label]
-    [x]="link.target.x + link.nodes[1].label.x"
-    [y]="link.target.y + link.nodes[1].label.y"
-    [text]="link.nodes[1].label.text"
-    [style]="link.nodes[1].label.style"
-    [rotation]="link.nodes[1].label.rotation"
+    [x]="link?.target?.x + link?.nodes[1]?.label?.x"
+    [y]="link?.target?.y + link?.nodes[1]?.label?.y"
+    [text]="link?.nodes[1]?.label?.text"
+    [style]="link?.nodes[1]?.label?.style"
+    [rotation]="link?.nodes[1]?.label?.rotation"
   />
 </svg:g>
diff --git a/src/app/cartography/components/experimental-map/link/link.component.spec.ts b/src/app/cartography/components/experimental-map/link/link.component.spec.ts
index 494d8d99..e51c1e24 100644
--- a/src/app/cartography/components/experimental-map/link/link.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/link/link.component.spec.ts
@@ -1,4 +1,5 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MultiLinkCalculatorHelper } from 'app/cartography/helpers/multi-link-calculator-helper';
 import { LinkComponent } from './link.component';
 
 describe('LinkComponent', () => {
@@ -8,6 +9,7 @@ describe('LinkComponent', () => {
   beforeEach(async() => {
     await TestBed.configureTestingModule({
       declarations: [LinkComponent],
+      providers:[MultiLinkCalculatorHelper]
     }).compileComponents();
   });
 
diff --git a/src/app/cartography/components/experimental-map/link/link.component.ts b/src/app/cartography/components/experimental-map/link/link.component.ts
index 80069d94..fba6a161 100644
--- a/src/app/cartography/components/experimental-map/link/link.component.ts
+++ b/src/app/cartography/components/experimental-map/link/link.component.ts
@@ -33,7 +33,7 @@ export class LinkComponent implements OnInit, OnDestroy {
 
   private nodeChangedSubscription: Subscription;
 
-  constructor(private multiLinkCalculatorHelper: MultiLinkCalculatorHelper, private ref: ChangeDetectorRef) {}
+  constructor(private multiLinkCalculatorHelper: MultiLinkCalculatorHelper, private ref: ChangeDetectorRef) { }
 
   ngOnInit() {
     this.ref.detectChanges();
@@ -49,19 +49,21 @@ export class LinkComponent implements OnInit, OnDestroy {
   }
 
   get strategy(): LinkStrategy {
-    if (this.link.linkType === 'serial') {
+    if (this.link && this.link != undefined && this.link.linkType === 'serial') {
       return this.serialLinkStrategy;
     }
     return this.ethernetLinkStrategy;
   }
 
   get transform() {
-    const translation = this.multiLinkCalculatorHelper.linkTranslation(
-      this.link.distance,
-      this.link.source,
-      this.link.target
-    );
-    return `translate (${translation.dx}, ${translation.dy})`;
+    if (this.link != undefined && this.link != null && this.link.source) {
+      const translation = this.multiLinkCalculatorHelper.linkTranslation(
+        this.link.distance,
+        this.link.source,
+        this.link.target
+      );
+      return `translate (${translation.dx}, ${translation.dy})`;
+    }
   }
 
   get d() {
diff --git a/src/app/cartography/components/experimental-map/node/node.component.html b/src/app/cartography/components/experimental-map/node/node.component.html
index 6a3c7529..6fd28222 100644
--- a/src/app/cartography/components/experimental-map/node/node.component.html
+++ b/src/app/cartography/components/experimental-map/node/node.component.html
@@ -1,8 +1,8 @@
-<svg:g class="node" [attr.transform]="'translate(' + node.x + ',' + node.y + ')'">
+<svg:g class="node" [attr.transform]="'translate(' + node?.x + ',' + node?.y + ')'">
   <svg:image
     #image
-    [attr.width]="node.width"
-    [attr.height]="node.height"
+    [attr.width]="node?.width"
+    [attr.height]="node?.height"
     [attr.x]="0"
     [attr.y]="0"
     [attr.xlink:href]="symbol"
@@ -11,6 +11,6 @@
     (dragged)="OnDragged($event)"
   />
   <svg:text #label class="label" [attr.style]="label_style" [attr.x]="label_x" [attr.y]="label_y">
-    {{ node.label.text }}
+    {{ node?.label?.text }}
   </svg:text>
 </svg:g>
diff --git a/src/app/cartography/components/experimental-map/node/node.component.spec.ts b/src/app/cartography/components/experimental-map/node/node.component.spec.ts
index c35dda52..1d536717 100644
--- a/src/app/cartography/components/experimental-map/node/node.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/node/node.component.spec.ts
@@ -1,15 +1,23 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { NodesEventSource } from 'app/cartography/events/nodes-event-source';
+import { CssFixer } from 'app/cartography/helpers/css-fixer';
+import { FontFixer } from 'app/cartography/helpers/font-fixer';
 import { NodeComponent } from './node.component';
 
 describe('NodeComponent', () => {
   let component: NodeComponent;
   let fixture: ComponentFixture<NodeComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async() => {
+   await TestBed.configureTestingModule({
       declarations: [NodeComponent],
+      providers:[ 
+        CssFixer,
+        FontFixer,
+        NodesEventSource,
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(NodeComponent);
@@ -17,7 +25,7 @@ describe('NodeComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/cartography/components/experimental-map/node/node.component.ts b/src/app/cartography/components/experimental-map/node/node.component.ts
index cea785f2..d86aeefb 100644
--- a/src/app/cartography/components/experimental-map/node/node.component.ts
+++ b/src/app/cartography/components/experimental-map/node/node.component.ts
@@ -49,7 +49,7 @@ export class NodeComponent implements OnInit, OnDestroy, OnChanges, AfterViewIni
     protected element: ElementRef,
     private cd: ChangeDetectorRef,
     private nodesEventSource: NodesEventSource
-  ) {}
+  ) { }
 
   ngOnInit() {
     // this.nodeChangedSubscription = this.nodeChanged.subscribe((node: Node) => {
@@ -85,42 +85,52 @@ export class NodeComponent implements OnInit, OnDestroy, OnChanges, AfterViewIni
   }
 
   get symbol(): string {
-    const symbol = this.symbols.find((s: Symbol) => s.symbol_id === this.node.symbol);
-    if (symbol) {
-      return 'data:image/svg+xml;base64,' + btoa(symbol.raw);
+    if (this.symbols) {
+      const symbol = this.symbols.find((s: Symbol) => s.symbol_id === this.node.symbol);
+      if (symbol) {
+        return 'data:image/svg+xml;base64,' + btoa(symbol.raw);
+      }
+      // @todo; we need to have default image
+      return 'data:image/svg+xml;base64,none';
     }
-    // @todo; we need to have default image
-    return 'data:image/svg+xml;base64,none';
   }
 
   get label_style() {
-    let styles = this.cssFixer.fix(this.node.label.style);
-    styles = this.fontFixer.fixStyles(styles);
-    return this.sanitizer.bypassSecurityTrustStyle(styles);
+    if (this.node != undefined) {
+      let styles = this.cssFixer.fix(this.node.label.style);
+      styles = this.fontFixer.fixStyles(styles);
+      return this.sanitizer.bypassSecurityTrustStyle(styles);
+    }
   }
 
   get label_x(): number {
-    if (this.node.label.x === null) {
-      // center
-      const bbox = this.label.nativeElement.getBBox();
+    if (this.node != undefined) {
+      if (this.node.label.x === null) {
+        // center
+        const bbox = this.label.nativeElement.getBBox();
 
-      return -bbox.width / 2;
+        return -bbox.width / 2;
+      }
+      return this.node.label.x + NodeComponent.NODE_LABEL_MARGIN;
     }
-    return this.node.label.x + NodeComponent.NODE_LABEL_MARGIN;
   }
 
   get label_y(): number {
     this.labelHeight = this.getLabelHeight();
 
-    if (this.node.label.x === null) {
-      // center
-      return -this.node.height / 2 - this.labelHeight;
+    if (this.node != undefined) {
+      if (this.node.label.x === null) {
+        // center
+        return -this.node.height / 2 - this.labelHeight;
+      }
+      return this.node.label.y + this.labelHeight - NodeComponent.NODE_LABEL_MARGIN;
     }
-    return this.node.label.y + this.labelHeight - NodeComponent.NODE_LABEL_MARGIN;
   }
 
   private getLabelHeight() {
-    const bbox = this.label.nativeElement.getBBox();
-    return bbox.height;
+    if (this.label != undefined) {
+      const bbox = this.label.nativeElement.getBBox();
+      return bbox.height;
+    }
   }
 }
diff --git a/src/app/cartography/components/experimental-map/selection/selection.component.spec.ts b/src/app/cartography/components/experimental-map/selection/selection.component.spec.ts
index 94c95763..dda3c304 100644
--- a/src/app/cartography/components/experimental-map/selection/selection.component.spec.ts
+++ b/src/app/cartography/components/experimental-map/selection/selection.component.spec.ts
@@ -1,15 +1,15 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { SelectionComponent } from './selection.component';
 
 describe('SelectionComponent', () => {
   let component: SelectionComponent;
   let fixture: ComponentFixture<SelectionComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async() => {
+    await TestBed.configureTestingModule({
       declarations: [SelectionComponent],
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(SelectionComponent);
@@ -17,7 +17,7 @@ describe('SelectionComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/cartography/components/selection-select/selection-select.component.spec.ts b/src/app/cartography/components/selection-select/selection-select.component.spec.ts
index f819be27..362f95d0 100644
--- a/src/app/cartography/components/selection-select/selection-select.component.spec.ts
+++ b/src/app/cartography/components/selection-select/selection-select.component.spec.ts
@@ -1,15 +1,18 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { SelectionManager } from 'app/cartography/managers/selection-manager';
+import { MapChangeDetectorRef } from 'app/cartography/services/map-change-detector-ref';
 import { SelectionSelectComponent } from './selection-select.component';
 
 describe('SelectionSelectComponent', () => {
   let component: SelectionSelectComponent;
   let fixture: ComponentFixture<SelectionSelectComponent>;
 
-  beforeEach(async(() => {
+  beforeEach(async () => {
     TestBed.configureTestingModule({
       declarations: [SelectionSelectComponent],
+      providers: [MapChangeDetectorRef,SelectionManager]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(SelectionSelectComponent);
@@ -17,7 +20,7 @@ describe('SelectionSelectComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/cartography/widgets/node.spec.ts b/src/app/cartography/widgets/node.spec.ts
index f8e669e1..e4069d70 100644
--- a/src/app/cartography/widgets/node.spec.ts
+++ b/src/app/cartography/widgets/node.spec.ts
@@ -31,19 +31,21 @@ describe('NodesWidget', () => {
       const drew = svg.canvas.selectAll<SVGGElement, MapNode>('g.node');
       const drewNode = drew.nodes()[0];
 
-      drewNode.dispatchEvent(
-        new MouseEvent('mousedown', {
-          clientX: 150,
-          clientY: 250,
-          relatedTarget: drewNode,
-          screenY: 1024,
-          screenX: 1024,
-          view: window,
-        })
-      );
+      if (drewNode != undefined && drewNode != null) {
+        drewNode.dispatchEvent(
+          new MouseEvent('mousedown', {
+            clientX: 150,
+            clientY: 250,
+            relatedTarget: drewNode,
+            screenY: 1024,
+            screenX: 1024,
+            view: window,
+          })
+        );
 
-      window.dispatchEvent(new MouseEvent('mousemove', { clientX: 300, clientY: 300 }));
-      window.dispatchEvent(new MouseEvent('mouseup', { clientX: 300, clientY: 300, view: window }));
+        window.dispatchEvent(new MouseEvent('mousemove', { clientX: 300, clientY: 300 }));
+        window.dispatchEvent(new MouseEvent('mouseup', { clientX: 300, clientY: 300, view: window }));
+      }
     };
 
     beforeEach(() => {
@@ -54,6 +56,9 @@ describe('NodesWidget', () => {
       node.height = 100;
       node.label = new MapLabel();
     });
+    it('draggable behaviour', () => {
+      tryToDrag()
+    })
 
     // it('should be draggable when enabled', () => {
     //   widget.setDraggingEnabled(true);
diff --git a/src/app/cartography/widgets/nodes.spec.ts b/src/app/cartography/widgets/nodes.spec.ts
index f0445712..3857155f 100644
--- a/src/app/cartography/widgets/nodes.spec.ts
+++ b/src/app/cartography/widgets/nodes.spec.ts
@@ -14,8 +14,12 @@ describe('NodesWidget', () => {
     nodeWidget = instance(mock(NodeWidget));
     widget = new NodesWidget(nodeWidget, new MapSettingsManager());
   });
+  it('draggable behaviour', () => {
+    
+  })
 
   afterEach(() => {
     svg.destroy();
   });
+  
 });
diff --git a/src/app/common/progress-dialog/progress-dialog.component.spec.ts b/src/app/common/progress-dialog/progress-dialog.component.spec.ts
index cf08db74..17da7790 100644
--- a/src/app/common/progress-dialog/progress-dialog.component.spec.ts
+++ b/src/app/common/progress-dialog/progress-dialog.component.spec.ts
@@ -1,15 +1,31 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatCheckboxModule } from '@angular/material/checkbox';
+import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatIconModule } from '@angular/material/icon';
+import { MatMenuModule } from '@angular/material/menu';
+import { MatToolbarModule } from '@angular/material/toolbar';
 import { ProgressDialogComponent } from './progress-dialog.component';
 
 describe('ProgressDialogComponent', () => {
   let component: ProgressDialogComponent;
   let fixture: ComponentFixture<ProgressDialogComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async() => {
+    await TestBed.configureTestingModule({
       declarations: [ProgressDialogComponent],
+      imports:[
+        MatIconModule,
+        MatToolbarModule,
+        MatMenuModule,
+        MatCheckboxModule,
+        MatDialogModule
+      ],
+      providers:[
+        { provide: MatDialogRef, useValue: {}},
+        { provide: MAT_DIALOG_DATA, useValue: {}},
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(ProgressDialogComponent);
@@ -17,7 +33,7 @@ describe('ProgressDialogComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/common/progress-dialog/progress-dialog.service.spec.ts b/src/app/common/progress-dialog/progress-dialog.service.spec.ts
index 86b6ba0f..067a9bf0 100644
--- a/src/app/common/progress-dialog/progress-dialog.service.spec.ts
+++ b/src/app/common/progress-dialog/progress-dialog.service.spec.ts
@@ -1,14 +1,21 @@
-import { TestBed } from '@angular/core/testing';
+import { inject, TestBed } from '@angular/core/testing';
+import { MatDialog } from '@angular/material/dialog';
+import { MockedProgressService } from 'app/components/project-map/project-map.component.spec';
 import { ProgressDialogService } from './progress-dialog.service';
 
 describe('ProgressDialogService', () => {
+  let  mockedProgressService : MockedProgressService
   beforeEach(() => {
     TestBed.configureTestingModule({
-      providers: [ProgressDialogService],
+      // imports:[ProgressDialogService],
+      providers: [
+        { provide: MatDialog, useValue: {} },
+        { provide: ProgressDialogService, useClass:MockedProgressService },
+      ],
     });
   });
 
-  // it('should be created', inject([ProgressDialogService], (service: ProgressDialogService) => {
-  //   expect(service).toBeTruthy();
-  // }));
+  it('should be created', inject([ProgressDialogService], (service: ProgressDialogService) => {
+    expect(service).toBeTruthy();
+  }));
 });
diff --git a/src/app/components/installed-software/install-software/install-software.component.spec.ts b/src/app/components/installed-software/install-software/install-software.component.spec.ts
index 9d88320e..4bb7e07d 100644
--- a/src/app/components/installed-software/install-software/install-software.component.spec.ts
+++ b/src/app/components/installed-software/install-software/install-software.component.spec.ts
@@ -1,15 +1,21 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MockedDrawingsDataSource } from 'app/components/project-map/project-map.component.spec';
+import { ElectronService, ElectronServiceRef } from 'ngx-electron';
 import { InstallSoftwareComponent } from './install-software.component';
 
 describe('InstallSoftwareComponent', () => {
   let component: InstallSoftwareComponent;
   let fixture: ComponentFixture<InstallSoftwareComponent>;
 
-  beforeEach(async(() => {
+  beforeEach(async () => {
     TestBed.configureTestingModule({
       declarations: [InstallSoftwareComponent],
+      providers: [
+        { provide: ElectronService, useValue: {} },
+        { provide: ElectronServiceRef, useValue: {} },
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(InstallSoftwareComponent);
@@ -17,7 +23,7 @@ describe('InstallSoftwareComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/installed-software/install-software/install-software.component.ts b/src/app/components/installed-software/install-software/install-software.component.ts
index 7e1cd18a..ea1f60c6 100644
--- a/src/app/components/installed-software/install-software/install-software.component.ts
+++ b/src/app/components/installed-software/install-software/install-software.component.ts
@@ -17,13 +17,15 @@ export class InstallSoftwareComponent implements OnInit, OnDestroy, OnChanges {
   public readyToInstall = true;
   public buttonText: string;
 
-  constructor(private electronService: ElectronService) {}
+  constructor(private electronService: ElectronService) { }
 
   ngOnInit() {
-    this.electronService.ipcRenderer.on(this.responseChannel, (event, data) => {
-      this.updateButton();
-      this.installedChanged.emit(data);
-    });
+    if (this.electronService && this.electronService.ipcRenderer) {
+      this.electronService.ipcRenderer.on(this.responseChannel, (event, data) => {
+        this.updateButton();
+        this.installedChanged.emit(data);
+      });
+    }
   }
 
   ngOnDestroy() {
diff --git a/src/app/components/installed-software/installed-software.component.spec.ts b/src/app/components/installed-software/installed-software.component.spec.ts
index d1c8d2ea..9d11cf61 100644
--- a/src/app/components/installed-software/installed-software.component.spec.ts
+++ b/src/app/components/installed-software/installed-software.component.spec.ts
@@ -1,15 +1,26 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ExternalSoftwareDefinitionService } from 'app/services/external-software-definition.service';
+import { InstalledSoftwareService } from 'app/services/installed-software.service';
+import { PlatformService } from 'app/services/platform.service';
+import { ElectronService } from 'ngx-electron';
 import { InstalledSoftwareComponent } from './installed-software.component';
 
 describe('InstalledSoftwareComponent', () => {
   let component: InstalledSoftwareComponent;
   let fixture: ComponentFixture<InstalledSoftwareComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [InstalledSoftwareComponent],
+      providers: [
+        InstalledSoftwareService,
+        ElectronService,
+        ExternalSoftwareDefinitionService,
+        PlatformService
+      ],
+
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(InstalledSoftwareComponent);
@@ -17,7 +28,7 @@ describe('InstalledSoftwareComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/project-map/context-console-menu/context-console-menu.component.spec.ts b/src/app/components/project-map/context-console-menu/context-console-menu.component.spec.ts
index dbd0d098..ddd1f4fe 100644
--- a/src/app/components/project-map/context-console-menu/context-console-menu.component.spec.ts
+++ b/src/app/components/project-map/context-console-menu/context-console-menu.component.spec.ts
@@ -1,5 +1,5 @@
 import { ChangeDetectorRef, NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MatMenuModule } from '@angular/material/menu';
 import { MatSnackBarModule } from '@angular/material/snack-bar';
 import { BrowserModule } from '@angular/platform-browser';
@@ -32,12 +32,12 @@ describe('ContextConsoleMenuComponent', () => {
     status: 'started',
   };
 
-  beforeEach(async(() => {
+  beforeEach(async () => {
     const electronMock = {
       isElectronApp: true,
     };
 
-    TestBed.configureTestingModule({
+    await TestBed.configureTestingModule({
       imports: [MatMenuModule, BrowserModule, MatSnackBarModule],
       providers: [
         { provide: ChangeDetectorRef },
@@ -57,56 +57,56 @@ describe('ContextConsoleMenuComponent', () => {
     toasterService = TestBed.inject(ToasterService);
     mapSettingsService = TestBed.inject(MapSettingsService);
     nodeConsoleService = TestBed.inject(NodeConsoleService);
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ContextConsoleMenuComponent);
-    component = fixture.componentInstance;
-    component.server = { location: 'local' } as Server;
-    fixture.detectChanges();
   });
 
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  it('should define property if running in electron ', () => {
-    expect(component.isElectronApp).toBeTruthy();
-  });
-
-  it('should open menu if there is no default settings', () => {
-    let spy = spyOn(component.contextConsoleMenu, 'openMenu');
-    localStorage.removeItem('consoleContextMenu');
-
-    component.openMenu((node as unknown) as Node, 0, 0);
-
-    expect(spy.calls.any()).toBeTruthy();
-  });
-
-  it('should call open web console when web console action in settings', () => {
-    let spy = spyOn(component, 'openWebConsole');
-    mapSettingsService.setConsoleContextMenuAction('web console');
-
-    component.openMenu((node as unknown) as Node, 0, 0);
-
-    expect(spy.calls.any()).toBeTruthy();
-  });
-
-  it('should call open web console in new tab when web console in new tab action in settings', () => {
-    let spy = spyOn(component, 'openWebConsoleInNewTab');
-    mapSettingsService.setConsoleContextMenuAction('web console in new tab');
-
-    component.openMenu((node as unknown) as Node, 0, 0);
-
-    expect(spy.calls.any()).toBeTruthy();
-  });
-
-  it('should call open console when console action in settings', () => {
-    let spy = spyOn(component, 'openConsole');
-    mapSettingsService.setConsoleContextMenuAction('console');
-
-    component.openMenu((node as unknown) as Node, 0, 0);
-
-    expect(spy.calls.any()).toBeTruthy();
-  });
+beforeEach(() => {
+  fixture = TestBed.createComponent(ContextConsoleMenuComponent);
+  component = fixture.componentInstance;
+  component.server = { location: 'local' } as Server;
+  fixture.detectChanges();
+});
+
+it('should create', () => {
+  expect(component).toBeTruthy();
+});
+
+it('should define property if running in electron ', () => {
+  expect(component.isElectronApp).toBeTruthy();
+});
+
+it('should open menu if there is no default settings', () => {
+  let spy = spyOn(component.contextConsoleMenu, 'openMenu');
+  localStorage.removeItem('consoleContextMenu');
+
+  component.openMenu((node as unknown) as Node, 0, 0);
+
+  expect(spy.calls.any()).toBeTruthy();
+});
+
+it('should call open web console when web console action in settings', () => {
+  let spy = spyOn(component, 'openWebConsole');
+  mapSettingsService.setConsoleContextMenuAction('web console');
+
+  component.openMenu((node as unknown) as Node, 0, 0);
+
+  expect(spy.calls.any()).toBeTruthy();
+});
+
+it('should call open web console in new tab when web console in new tab action in settings', () => {
+  let spy = spyOn(component, 'openWebConsoleInNewTab');
+  mapSettingsService.setConsoleContextMenuAction('web console in new tab');
+
+  component.openMenu((node as unknown) as Node, 0, 0);
+
+  expect(spy.calls.any()).toBeTruthy();
+});
+
+it('should call open console when console action in settings', () => {
+  let spy = spyOn(component, 'openConsole');
+  mapSettingsService.setConsoleContextMenuAction('console');
+
+  component.openMenu((node as unknown) as Node, 0, 0);
+
+  expect(spy.calls.any()).toBeTruthy();
+});
 });
diff --git a/src/app/components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component.spec.ts b/src/app/components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component.spec.ts
index ea2cc3ea..0e84bde7 100644
--- a/src/app/components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component.spec.ts
+++ b/src/app/components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component.spec.ts
@@ -1,15 +1,17 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatTableModule } from '@angular/material/table';
 import { MoveLayerDownActionComponent } from './move-layer-down-action.component';
 
 describe('MoveLayerDownActionComponent', () => {
   let component: MoveLayerDownActionComponent;
   let fixture: ComponentFixture<MoveLayerDownActionComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [MoveLayerDownActionComponent],
+      imports:[MatTableModule]
     }).compileComponents();
-  }));
+  });
 
   // beforeEach(() => {
   //   fixture = TestBed.createComponent(MoveLayerDownActionComponent);
@@ -17,7 +19,7 @@ describe('MoveLayerDownActionComponent', () => {
   //   fixture.detectChanges();
   // });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component)
+  });
 });
diff --git a/src/app/components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component.spec.ts b/src/app/components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component.spec.ts
index ba7b949e..e75ee696 100644
--- a/src/app/components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component.spec.ts
+++ b/src/app/components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component.spec.ts
@@ -1,15 +1,15 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { MoveLayerUpActionComponent } from './move-layer-up-action.component';
 
 describe('MoveLayerUpActionComponent', () => {
   let component: MoveLayerUpActionComponent;
   let fixture: ComponentFixture<MoveLayerUpActionComponent>;
 
-  beforeEach(async(() => {
+  beforeEach(async() => {
     TestBed.configureTestingModule({
       declarations: [MoveLayerUpActionComponent],
     }).compileComponents();
-  }));
+  });
 
   // beforeEach(() => {
   //   fixture = TestBed.createComponent(MoveLayerUpActionComponent);
@@ -17,7 +17,7 @@ describe('MoveLayerUpActionComponent', () => {
   //   fixture.detectChanges();
   // });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component)
+  });
 });
diff --git a/src/app/components/project-map/context-menu/actions/start-node-action/start-node-action.component.spec.ts b/src/app/components/project-map/context-menu/actions/start-node-action/start-node-action.component.spec.ts
index fb2ba869..54576831 100644
--- a/src/app/components/project-map/context-menu/actions/start-node-action/start-node-action.component.spec.ts
+++ b/src/app/components/project-map/context-menu/actions/start-node-action/start-node-action.component.spec.ts
@@ -1,15 +1,29 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
+import { MockedNodeService } from 'app/components/project-map/project-map.component.spec';
+import { HttpServer } from 'app/services/http-server.service';
+import { NodeService } from 'app/services/node.service';
+import { ToasterService } from 'app/services/toaster.service';
+import { MockedToasterService } from 'app/services/toaster.service.spec';
 import { StartNodeActionComponent } from './start-node-action.component';
 
 describe('StartNodeActionComponent', () => {
   let component: StartNodeActionComponent;
   let fixture: ComponentFixture<StartNodeActionComponent>;
+  let mockedNodeService: MockedNodeService;
+  let mockedToasterService: MockedToasterService;
 
-  beforeEach(async(() => {
+  beforeEach(async () => {
     TestBed.configureTestingModule({
       declarations: [StartNodeActionComponent],
+      imports:[MatProgressSpinnerModule ],
+      providers: [
+        { provide: NodeService, useValue: mockedNodeService },
+        { provide: HttpServer, useValue: {} },
+        { provide: ToasterService, useValue: mockedToasterService },
+      ],
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(StartNodeActionComponent);
@@ -17,7 +31,7 @@ describe('StartNodeActionComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/project-map/context-menu/actions/stop-node-action/stop-node-action.component.spec.ts b/src/app/components/project-map/context-menu/actions/stop-node-action/stop-node-action.component.spec.ts
index 533a9831..a363d8fc 100644
--- a/src/app/components/project-map/context-menu/actions/stop-node-action/stop-node-action.component.spec.ts
+++ b/src/app/components/project-map/context-menu/actions/stop-node-action/stop-node-action.component.spec.ts
@@ -1,15 +1,22 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MockedNodeService } from 'app/components/project-map/project-map.component.spec';
+import { HttpServer } from 'app/services/http-server.service';
+import { NodeService } from 'app/services/node.service';
 import { StopNodeActionComponent } from './stop-node-action.component';
 
 describe('StopNodeActionComponent', () => {
   let component: StopNodeActionComponent;
   let fixture: ComponentFixture<StopNodeActionComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  let mockedNodeService : MockedNodeService
+  
+  beforeEach(async() => {
+    await TestBed.configureTestingModule({
       declarations: [StopNodeActionComponent],
+      providers:[
+        {provide:NodeService , useValue: mockedNodeService},
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(StopNodeActionComponent);
@@ -17,7 +24,7 @@ describe('StopNodeActionComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/project-map/draw-link-tool/draw-link-tool.component.spec.ts b/src/app/components/project-map/draw-link-tool/draw-link-tool.component.spec.ts
index 01e15d3a..eebd8a7a 100644
--- a/src/app/components/project-map/draw-link-tool/draw-link-tool.component.spec.ts
+++ b/src/app/components/project-map/draw-link-tool/draw-link-tool.component.spec.ts
@@ -1,15 +1,41 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { LabelToMapLabelConverter } from 'app/cartography/converters/map/label-to-map-label-converter';
+import { MapLabelToLabelConverter } from 'app/cartography/converters/map/map-label-to-label-converter';
+import { MapNodeToNodeConverter } from 'app/cartography/converters/map/map-node-to-node-converter';
+import { MapPortToPortConverter } from 'app/cartography/converters/map/map-port-to-port-converter';
+import { NodeToMapNodeConverter } from 'app/cartography/converters/map/node-to-map-node-converter';
+import { PortToMapPortConverter } from 'app/cartography/converters/map/port-to-map-port-converter';
+import { LinksEventSource } from 'app/cartography/events/links-event-source';
+import { NodesEventSource } from 'app/cartography/events/nodes-event-source';
+import { CssFixer } from 'app/cartography/helpers/css-fixer';
+import { FontBBoxCalculator } from 'app/cartography/helpers/font-bbox-calculator';
+import { FontFixer } from 'app/cartography/helpers/font-fixer';
+import { DrawingLineWidget } from 'app/cartography/widgets/drawing-line';
 import { DrawLinkToolComponent } from './draw-link-tool.component';
 
 describe('DrawLinkToolComponent', () => {
   let component: DrawLinkToolComponent;
   let fixture: ComponentFixture<DrawLinkToolComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async() => {
+   await TestBed.configureTestingModule({
       declarations: [DrawLinkToolComponent],
+      providers:[
+        DrawingLineWidget,
+        NodesEventSource,
+        LinksEventSource,
+        MapNodeToNodeConverter,
+        MapLabelToLabelConverter,
+        FontBBoxCalculator,
+        MapPortToPortConverter,
+        CssFixer,
+        FontFixer,
+        NodeToMapNodeConverter,
+        LabelToMapLabelConverter,
+        PortToMapPortConverter
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(DrawLinkToolComponent);
@@ -17,7 +43,7 @@ describe('DrawLinkToolComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts b/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
index 38a8a083..85c9ef4c 100644
--- a/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
+++ b/src/app/components/project-map/node-select-interface/node-select-interface.component.spec.ts
@@ -17,7 +17,7 @@ describe('NodeSelectInterfaceComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/servers/servers.component.spec.ts b/src/app/components/servers/servers.component.spec.ts
index f87d4296..f0a6a15c 100644
--- a/src/app/components/servers/servers.component.spec.ts
+++ b/src/app/components/servers/servers.component.spec.ts
@@ -1,19 +1,57 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatCheckboxModule } from '@angular/material/checkbox';
+import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+import { MatIconModule } from '@angular/material/icon';
+import { MatMenuModule } from '@angular/material/menu';
+import { MatToolbarModule } from '@angular/material/toolbar';
+import { ServerDatabase } from '../../services/server.database';
+import { ServerService } from '../../services/server.service';
+import { MockedServerService } from 'app/services/server.service.spec';
 import { ServersComponent } from './servers.component';
+import { ServerManagementService } from 'app/services/server-management.service';
+import { ElectronService } from 'ngx-electron';
+import { ChildProcessService } from 'ngx-childprocess';
+import { MatBottomSheet, MatBottomSheetModule } from '@angular/material/bottom-sheet';
+import { ActivatedRoute, Router } from '@angular/router';
+import { MockedActivatedRoute } from '../snapshots/list-of-snapshots/list-of-snaphshots.component.spec';
+import { RouterTestingModule } from '@angular/router/testing';
+import { ChangeDetectorRef } from '@angular/core';
 
 describe('ServersComponent', () => {
   let component: ServersComponent;
   let fixture: ComponentFixture<ServersComponent>;
+  let serverMockedService: MockedServerService
+  let mockedActivatedRoute: MockedActivatedRoute
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [ServersComponent],
+      imports: [
+        MatDialogModule,
+        RouterTestingModule,
+        MatBottomSheetModule
+      ],
+      providers: [
+        MatDialog,
+        { provide: ServerService, useValue: serverMockedService },
+        { provide: ActivatedRoute, useValue:mockedActivatedRoute  },
+        ServerDatabase,
+        ServerManagementService,
+        ElectronService,
+        MatBottomSheet,
+        Router,
+        ChildProcessService,
+        ChangeDetectorRef
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(ServersComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
   });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/servers/servers.component.ts b/src/app/components/servers/servers.component.ts
index 75d7d279..f372e32e 100644
--- a/src/app/components/servers/servers.component.ts
+++ b/src/app/components/servers/servers.component.ts
@@ -36,7 +36,7 @@ export class ServersComponent implements OnInit, OnDestroy {
     private bottomSheet: MatBottomSheet,
     private route: ActivatedRoute,
     private router: Router
-  ) {}
+  ) { }
 
   getServers() {
     const runningServersNames = this.serverManagement.getRunningServers();
@@ -57,7 +57,7 @@ export class ServersComponent implements OnInit, OnDestroy {
               if (!this.serverDatabase.find(server.name)) this.serverDatabase.addServer(server);
             }
           },
-          (error) => {}
+          (error) => { }
         );
       });
     });
@@ -66,13 +66,15 @@ export class ServersComponent implements OnInit, OnDestroy {
   ngOnInit() {
     this.isElectronApp = this.electronService.isElectronApp;
 
-    if (this.serverService.isServiceInitialized) this.getServers();
+    if (this.serverService && this.serverService.isServiceInitialized) this.getServers();
 
-    this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
-      if (value) {
-        this.getServers();
-      }
-    });
+    if (this.serverService && this.serverService.isServiceInitialized) {
+      this.serverService.serviceInitialized.subscribe(async (value: boolean) => {
+        if (value) {
+          this.getServers();
+        }
+      });
+    }
 
     this.dataSource = new ServerDataSource(this.serverDatabase);
 
@@ -171,5 +173,5 @@ export class ServerDataSource extends DataSource<Server> {
     );
   }
 
-  disconnect() {}
+  disconnect() { }
 }
diff --git a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.html b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.html
index 38206f0d..5618a1ab 100644
--- a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.html
+++ b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.html
@@ -5,7 +5,7 @@
     class="top-button"
     color="accent"
     (click)="onNoClick()"
-    routerLink="/server/{{ server.id }}/project/{{ project.project_id }}/snapshots"
+    routerLink="/server/{{ server?.id }}/project/{{ project?.project_id }}/snapshots"
   >
     Go to snapshots
   </button>
diff --git a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.spec.ts b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.spec.ts
index 0ed51f59..40f53a97 100644
--- a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.spec.ts
+++ b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.spec.ts
@@ -1,15 +1,45 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { MatCheckboxModule } from '@angular/material/checkbox';
+import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatIconModule } from '@angular/material/icon';
+import { MatMenuModule } from '@angular/material/menu';
+import { MatToolbarModule } from '@angular/material/toolbar';
+import { NodesDataSource } from 'app/cartography/datasources/nodes-datasource';
+import { MockedNodesDataSource } from 'app/components/project-map/project-map.component.spec';
+import { SnapshotService } from 'app/services/snapshot.service';
+import { ToasterService } from 'app/services/toaster.service';
+import { MockedToasterService } from 'app/services/toaster.service.spec';
+import { MockedSnapshotService } from '../list-of-snapshots/list-of-snaphshots.component.spec';
 import { CreateSnapshotDialogComponent } from './create-snapshot-dialog.component';
 
 describe('CreateSnapshotDialogComponent', () => {
   let component: CreateSnapshotDialogComponent;
   let fixture: ComponentFixture<CreateSnapshotDialogComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  let mockedToasterService: MockedToasterService;
+  let mockedSnapshotService: MockedSnapshotService;
+  let mockedNodesDataSource: MockedNodesDataSource
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [CreateSnapshotDialogComponent],
+      imports: [
+        MatIconModule,
+        MatToolbarModule,
+        MatMenuModule,
+        MatCheckboxModule,
+        MatDialogModule,
+        ReactiveFormsModule,
+        FormsModule
+      ],
+      providers: [
+        { provide: MatDialogRef, useValue: {} },
+        { provide: ToasterService, useValue: mockedToasterService },
+        { provide: SnapshotService, useValue: mockedSnapshotService },
+        { provide: NodesDataSource, useValue: mockedNodesDataSource },
+        { provide: MAT_DIALOG_DATA, useValue: {} },
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(CreateSnapshotDialogComponent);
@@ -17,7 +47,7 @@ describe('CreateSnapshotDialogComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.ts b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.ts
index ee54a0f7..f5b99a8e 100644
--- a/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.ts
+++ b/src/app/components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component.ts
@@ -37,17 +37,21 @@ export class CreateSnapshotDialogComponent {
       snapshotName: new FormControl('', Validators.required),
     });
 
-    this.snapshotService.list(this.server, this.project.project_id).subscribe((snapshots: Snapshot[]) => {
-      snapshots.forEach((snapshot: Snapshot) => {
-        this.snapshots.push(snapshot.name);
+    if (this.project && this.project.project_id) {
+      this.snapshotService.list(this.server, this.project.project_id).subscribe((snapshots: Snapshot[]) => {
+        snapshots.forEach((snapshot: Snapshot) => {
+          this.snapshots.push(snapshot.name);
+        });
       });
-    });
+    }
 
-    this.nodesDataSource.getItems().forEach((node: Node) => {
-      if (node.status !== 'stopped' && !this.isAlwaysRunningNode(node.node_type)) {
-        this.isInRunningState = true;
-      }
-    });
+    if (this.nodesDataSource) {
+      this.nodesDataSource.getItems().forEach((node: Node) => {
+        if (node.status !== 'stopped' && !this.isAlwaysRunningNode(node.node_type)) {
+          this.isInRunningState = true;
+        }
+      });
+    }
   }
 
   isAlwaysRunningNode(nodeType: string) {
diff --git a/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.spec.ts b/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.spec.ts
index b15bc08c..1c0e8496 100644
--- a/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.spec.ts
+++ b/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.spec.ts
@@ -1,15 +1,37 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { Overlay, ScrollStrategyOptions } from '@angular/cdk/overlay';
+import { HttpClient, HttpClientModule } from '@angular/common/http';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+import { MatSnackBarModule } from '@angular/material/snack-bar';
+import { Context } from 'app/cartography/models/context';
+import { ProgressDialogService } from 'app/common/progress-dialog/progress-dialog.service';
+import { HttpServer, ServerErrorHandler } from 'app/services/http-server.service';
+import { SnapshotService } from 'app/services/snapshot.service';
+import { ToasterService } from 'app/services/toaster.service';
 import { SnapshotMenuItemComponent } from './snapshot-menu-item.component';
 
 describe('SnapshotMenuItemComponent', () => {
   let component: SnapshotMenuItemComponent;
   let fixture: ComponentFixture<SnapshotMenuItemComponent>;
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [SnapshotMenuItemComponent],
+      imports:[MatDialogModule,HttpClientModule,MatSnackBarModule],
+      providers: [
+        SnapshotService,
+        MatDialog,
+        HttpServer,
+        Overlay,
+        ScrollStrategyOptions,
+        HttpClient,
+        ServerErrorHandler,
+        ProgressDialogService,
+        Context,
+        ToasterService
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(SnapshotMenuItemComponent);
@@ -17,7 +39,7 @@ describe('SnapshotMenuItemComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.ts b/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.ts
index 65e5cb4b..2c676594 100644
--- a/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.ts
+++ b/src/app/components/snapshots/snapshot-menu-item/snapshot-menu-item.component.ts
@@ -39,7 +39,7 @@ export class SnapshotMenuItemComponent implements OnInit {
     });
 
     dialogRef.afterClosed().subscribe((snapshot) => {
-      if (snapshot) {
+      if (snapshot && this.project.project_id) {
         const creation = this.snapshotService.create(this.server, this.project.project_id, snapshot);
 
         const progress = this.progressDialogService.open();
diff --git a/src/app/components/template/template-list-dialog/template-list-dialog.component.html b/src/app/components/template/template-list-dialog/template-list-dialog.component.html
index 617ccd2e..ed73f3b5 100644
--- a/src/app/components/template/template-list-dialog/template-list-dialog.component.html
+++ b/src/app/components/template/template-list-dialog/template-list-dialog.component.html
@@ -5,7 +5,7 @@
     class="top-button"
     color="accent"
     (click)="onNoClick()"
-    routerLink="/server/{{ server.id }}/preferences"
+    routerLink="/server/{{ server?.id }}/preferences"
   >
     Go to template preferences
   </button>
diff --git a/src/app/components/template/template-list-dialog/template-list-dialog.component.spec.ts b/src/app/components/template/template-list-dialog/template-list-dialog.component.spec.ts
index 75725aae..aa0ee0c4 100644
--- a/src/app/components/template/template-list-dialog/template-list-dialog.component.spec.ts
+++ b/src/app/components/template/template-list-dialog/template-list-dialog.component.spec.ts
@@ -1,15 +1,31 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { RouterTestingModule } from '@angular/router/testing';
+import { TemplateService } from 'app/services/template.service';
+import { ToasterService } from 'app/services/toaster.service';
+import { MockedToasterService } from 'app/services/toaster.service.spec';
+import { NonNegativeValidator } from 'app/validators/non-negative-validator';
 import { TemplateListDialogComponent } from './template-list-dialog.component';
 
 describe('TemplateListDialogComponent', () => {
   let component: TemplateListDialogComponent;
   let fixture: ComponentFixture<TemplateListDialogComponent>;
+  let mockedToasterService :MockedToasterService
 
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [TemplateListDialogComponent],
+      imports: [ReactiveFormsModule, FormsModule,RouterTestingModule],
+      providers: [
+        { provide: TemplateService, useValue: {} },
+        { provide: ToasterService, useValue: mockedToasterService },
+        { provide: MatDialogRef, useValue: {} },
+        { provide: MAT_DIALOG_DATA, useValue: {} },
+        { provide: NonNegativeValidator, useValue: {} },
+      ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(TemplateListDialogComponent);
@@ -17,7 +33,7 @@ describe('TemplateListDialogComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
 });
diff --git a/src/app/components/template/template-list-dialog/template-list-dialog.component.ts b/src/app/components/template/template-list-dialog/template-list-dialog.component.ts
index ca94573a..aaf3a3f1 100644
--- a/src/app/components/template/template-list-dialog/template-list-dialog.component.ts
+++ b/src/app/components/template/template-list-dialog/template-list-dialog.component.ts
@@ -53,7 +53,7 @@ export class TemplateListDialogComponent implements OnInit {
     this.project = data['project'];
     this.configurationForm = this.formBuilder.group({
       // name: new FormControl('new node', Validators.required),
-      numberOfNodes: new FormControl(1, [Validators.required, nonNegativeValidator.get]),
+      numberOfNodes: new FormControl(1, [Validators.required, this.nonNegativeValidator.get]),
     });
     this.positionForm = this.formBuilder.group({
       top: new FormControl(0, Validators.required),
diff --git a/src/app/components/template/template.component.spec.ts b/src/app/components/template/template.component.spec.ts
index 3f972ee3..1cd618f4 100644
--- a/src/app/components/template/template.component.spec.ts
+++ b/src/app/components/template/template.component.spec.ts
@@ -1,15 +1,40 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { Overlay } from '@angular/cdk/overlay';
+import { HttpClient, HttpHandler } from '@angular/common/http';
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+import { MatMenuModule } from '@angular/material/menu';
+import { Context } from 'app/cartography/models/context';
+import { HttpServer, ServerErrorHandler } from 'app/services/http-server.service';
+import { MapScaleService } from 'app/services/mapScale.service';
+import { SymbolService } from 'app/services/symbol.service';
+import { TemplateService } from 'app/services/template.service';
+import { MockedSymbolService } from '../preferences/common/symbols/symbols.component.spec';
 import { TemplateComponent } from './template.component';
 
 describe('TemplateComponent', () => {
   let component: TemplateComponent;
   let fixture: ComponentFixture<TemplateComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
+  let mockedSymbolService: MockedSymbolService
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
       declarations: [TemplateComponent],
+      imports: [MatDialogModule,MatMenuModule],
+      providers: [
+        MatDialog,
+        Overlay,
+        TemplateService,
+        HttpServer,
+        MapScaleService,
+        HttpClient,
+        HttpHandler,
+        ServerErrorHandler,
+        Context, 
+        { provide: SymbolService, useClass: mockedSymbolService },
+      ],
+      schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
     }).compileComponents();
-  }));
+  });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(TemplateComponent);
@@ -17,7 +42,8 @@ describe('TemplateComponent', () => {
     fixture.detectChanges();
   });
 
-  // it('should create', () => {
-  //   expect(component).toBeTruthy();
-  // });
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
 });
diff --git a/src/app/services/http-server.service.ts b/src/app/services/http-server.service.ts
index 42378e7d..f46b97fe 100644
--- a/src/app/services/http-server.service.ts
+++ b/src/app/services/http-server.service.ts
@@ -214,7 +214,7 @@ export class HttpServer {
   }
 
   private getOptionsForServer<T extends HeadersOptions>(server: Server, url: string, options: T) {
-    if (server.host && server.port) {
+    if (server && server.host && server.port) {
       if (!server.protocol) {
         server.protocol = location.protocol as ServerProtocol;
       }
@@ -227,7 +227,7 @@ export class HttpServer {
       options.headers = {};
     }
 
-    if (server.authToken && !server.tokenExpired) {
+    if (server && server.authToken && !server.tokenExpired) {
       options.headers['Authorization'] = `Bearer ${server.authToken}`;
     }
 
diff --git a/src/app/services/installed-software.service.spec.ts b/src/app/services/installed-software.service.spec.ts
index 8e340ea7..f8519b7b 100644
--- a/src/app/services/installed-software.service.spec.ts
+++ b/src/app/services/installed-software.service.spec.ts
@@ -1,10 +1,13 @@
 import { TestBed } from '@angular/core/testing';
+import { InstalledSoftwareService } from './installed-software.service';
 
 describe('InstalledSoftwareService', () => {
-  beforeEach(() => TestBed.configureTestingModule({}));
+  beforeEach(() => TestBed.configureTestingModule({
+    providers: [{ provide: InstalledSoftwareService, useValue: {} }]
+  }));
 
-  // it('should be created', () => {
-  //   const service: InstalledSoftwareService = TestBed.get(InstalledSoftwareService);
-  //   expect(service).toBeTruthy();
-  // });
+  it('should be created', () => {
+    const service: InstalledSoftwareService = TestBed.get(InstalledSoftwareService);
+    expect(service).toBeTruthy();
+  });
 });
diff --git a/src/app/services/node.service.spec.ts b/src/app/services/node.service.spec.ts
index 8815a2dc..4b16e450 100644
--- a/src/app/services/node.service.spec.ts
+++ b/src/app/services/node.service.spec.ts
@@ -21,7 +21,10 @@ describe('NodeService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule, AppTestingModule],
-      providers: [HttpServer, NodeService],
+      providers: [
+        HttpServer,
+        NodeService,
+      ],
     });
 
     httpClient = TestBed.get(HttpClient);
diff --git a/src/app/services/server-management.service.spec.ts b/src/app/services/server-management.service.spec.ts
index a6422e09..98aede75 100644
--- a/src/app/services/server-management.service.spec.ts
+++ b/src/app/services/server-management.service.spec.ts
@@ -43,7 +43,10 @@ describe('ServerManagementService', () => {
 
   beforeEach(() =>
     TestBed.configureTestingModule({
-      providers: [{ provide: ElectronService, useValue: electronService }, ServerManagementService],
+      providers: [
+        ServerManagementService,
+        { provide: ElectronService, useValue: electronService },
+      ],
     })
   );
 
diff --git a/src/app/services/snapshot.service.spec.ts b/src/app/services/snapshot.service.spec.ts
index aa54af09..9df90aa9 100644
--- a/src/app/services/snapshot.service.spec.ts
+++ b/src/app/services/snapshot.service.spec.ts
@@ -18,7 +18,7 @@ describe('SnapshotService', () => {
   beforeEach(() => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule, AppTestingModule],
-      providers: [HttpServer, SnapshotService],
+      providers: [HttpServer, HttpClient,SnapshotService],
     });
 
     httpClient = TestBed.get(HttpClient);