From 24f5f958f06ad07c526daaa14261eed75edad986 Mon Sep 17 00:00:00 2001
From: ziajka <dominik@gns3.com>
Date: Thu, 2 Aug 2018 10:13:56 +0200
Subject: [PATCH] isServerAvailable check

---
 .../server-discovery.component.spec.ts        | 62 ++++++++++++++++++-
 .../server-discovery.component.ts             | 25 +++++++-
 src/app/services/version.service.spec.ts      | 11 +++-
 3 files changed, 94 insertions(+), 4 deletions(-)

diff --git a/src/app/components/servers/server-discovery/server-discovery.component.spec.ts b/src/app/components/servers/server-discovery/server-discovery.component.spec.ts
index 8ffbc81e..5379ff82 100644
--- a/src/app/components/servers/server-discovery/server-discovery.component.spec.ts
+++ b/src/app/components/servers/server-discovery/server-discovery.component.spec.ts
@@ -1,15 +1,26 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {async, ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing';
 
 import { ServerDiscoveryComponent } from './server-discovery.component';
 import { MatCardModule } from "@angular/material";
+import { VersionService } from "../../../services/version.service";
+import {MockedVersionService} from "../../../services/version.service.spec";
+import {Observable} from "rxjs/Rx";
+import {Version} from "../../../models/version";
+import {Server} from "../../../models/server";
+
 
 describe('ServerDiscoveryComponent', () => {
   let component: ServerDiscoveryComponent;
   let fixture: ComponentFixture<ServerDiscoveryComponent>;
+  let mockedVersionService: MockedVersionService;
 
   beforeEach(async(() => {
+    mockedVersionService = new MockedVersionService();
     TestBed.configureTestingModule({
       imports: [ MatCardModule ],
+      providers: [
+        { provide: VersionService, useFactory: () => mockedVersionService }
+      ],
       declarations: [ ServerDiscoveryComponent ]
     })
     .compileComponents();
@@ -24,4 +35,53 @@ describe('ServerDiscoveryComponent', () => {
   it('should create', () => {
     expect(component).toBeTruthy();
   });
+
+  // it('should discovery new server with no added yet', () => {
+  //   const server = component.discovery([]);
+  //   expect(server.ip);
+  // });
+
+  describe('isAvailable', () => {
+    it('should return version when server is available', () => {
+        const version = new Version();
+        version.version = '2.1.8';
+        const getVersionSpy = spyOn(mockedVersionService, 'get')
+          .and.returnValue(Observable.of(version));
+
+        component.isServerAvailable('127.0.0.1', 3080).subscribe((ver) => {
+          expect(ver.version).toEqual('2.1.8');
+        });
+
+        const server = new Server();
+        server.ip = '127.0.0.1';
+        server.port = 3080;
+        expect(getVersionSpy).toHaveBeenCalledWith(server);
+    });
+
+    it('should throw error once server is not available', () => {
+        const version = new Version();
+        version.version = '2.1.8';
+        const getVersionSpy = spyOn(mockedVersionService, 'get')
+          .and.returnValue(Observable.throwError(new Error("server is unavailable")));
+        let hasExecuted = false;
+
+        component.isServerAvailable('127.0.0.1', 3080).subscribe((ver) => {}, (err) => {
+          hasExecuted = true;
+          expect(err.toString()).toEqual('Error: server is unavailable');
+        });
+
+        const server = new Server();
+        server.ip = '127.0.0.1';
+        server.port = 3080;
+        expect(getVersionSpy).toHaveBeenCalledWith(server);
+        expect(hasExecuted).toBeTruthy();
+    });
+  });
+
+  describe("discovery", () => {
+      it('should discovery single server', () => {
+        // component.discovery([]).
+      });
+  });
+
 });
diff --git a/src/app/components/servers/server-discovery/server-discovery.component.ts b/src/app/components/servers/server-discovery/server-discovery.component.ts
index 16b23936..3e434b97 100644
--- a/src/app/components/servers/server-discovery/server-discovery.component.ts
+++ b/src/app/components/servers/server-discovery/server-discovery.component.ts
@@ -1,4 +1,8 @@
 import { Component, OnInit } from '@angular/core';
+import { Server } from "../../../models/server";
+import { VersionService } from "../../../services/version.service";
+import {Version} from "../../../models/version";
+import {Observable} from "rxjs/Rx";
 
 @Component({
   selector: 'app-server-discovery',
@@ -6,10 +10,29 @@ import { Component, OnInit } from '@angular/core';
   styleUrls: ['./server-discovery.component.scss']
 })
 export class ServerDiscoveryComponent implements OnInit {
+  private defaultServers = [{
+      ip: '127.0.0.1',
+      port: 3080
+    }
+  ];
 
-  constructor() { }
+  constructor(
+    private versionService: VersionService
+  ) {}
 
   ngOnInit() {
+
   }
 
+  discovery(servers: Server[]): Observable<Server> {
+    // this.defaultServers.forEach(());
+    return Observable.of(new Server());
+  }
+
+  isServerAvailable(ip: string, port: number): Observable<Version> {
+    const server = new Server();
+    server.ip = ip;
+    server.port = port;
+    return this.versionService.get(server);
+  }
 }
diff --git a/src/app/services/version.service.spec.ts b/src/app/services/version.service.spec.ts
index 50799f7c..f70727bc 100644
--- a/src/app/services/version.service.spec.ts
+++ b/src/app/services/version.service.spec.ts
@@ -4,11 +4,18 @@ import { HttpClient } from '@angular/common/http';
 import { HttpTestingController, HttpClientTestingModule } from '@angular/common/http/testing';
 import { HttpServer } from './http-server.service';
 import { Server } from '../models/server';
-import { Node } from '../cartography/models/node';
-import { Port } from '../models/port';
 import { getTestServer } from './testing';
 import { VersionService } from './version.service';
 import { AppTestingModule } from "../testing/app-testing/app-testing.module";
+import {Observable} from "rxjs/Rx";
+
+export class MockedVersionService {
+  public response: Observable<any>;
+
+  public get(server: Server) {
+    return this.response;
+  }
+}
 
 
 describe('VersionService', () => {