From c15b00a6bf99b3f9178e2a1c51091803a4e3ab17 Mon Sep 17 00:00:00 2001 From: Piotr Pekala Date: Fri, 8 Feb 2019 01:59:54 -0800 Subject: [PATCH] Unit test added --- .../built-in-preferences.component.spec.ts | 44 +++++++ ...cloud-nodes-add-template.component.spec.ts | 85 +++++++++++++ .../cloud-nodes-add-template.component.ts | 13 +- ...d-nodes-template-details.component.spec.ts | 75 +++++++++++ .../cloud-nodes-templates.component.spec.ts | 57 +++++++++ .../cloud-nodes-templates.component.ts | 10 +- ...hernet-hubs-add-template.component.spec.ts | 99 +++++++++++++++ .../ethernet-hubs-add-template.component.ts | 10 +- ...et-hubs-template-details.component.spec.ts | 118 ++++++++++++++++++ .../ethernet-hubs-templates.component.spec.ts | 57 +++++++++ .../ethernet-hubs-templates.component.ts | 10 +- ...et-switches-add-template.component.spec.ts | 99 +++++++++++++++ ...thernet-switches-add-template.component.ts | 10 +- ...witches-template-details.component.spec.ts | 114 +++++++++++++++++ ...ernet-switches-templates.component.spec.ts | 57 +++++++++ .../ethernet-switches-templates.component.ts | 10 +- .../add-ios-template.component.spec.ts | 112 +++++++++++++++++ .../add-ios-template.component.ts | 2 +- .../dynamips-preferences.component.spec.ts | 61 +++++++++ .../dynamips-preferences.component.ts | 17 ++- .../ios-template-details.component.spec.ts | 76 +++++++++++ .../ios-template-details.component.ts | 2 - .../ios-templates.component.spec.ts | 57 +++++++++ .../ios-templates/ios-templates.component.ts | 10 +- .../general-preferences.component.spec.ts | 44 +++++++ .../general/general-preferences.component.ts | 4 +- ...qemu-vm-template-details.component.spec.ts | 2 +- .../vpcs-templates.component.ts | 1 - 28 files changed, 1180 insertions(+), 76 deletions(-) diff --git a/src/app/components/preferences/built-in/built-in-preferences.component.spec.ts b/src/app/components/preferences/built-in/built-in-preferences.component.spec.ts index e69de29b..b6347a72 100644 --- a/src/app/components/preferences/built-in/built-in-preferences.component.spec.ts +++ b/src/app/components/preferences/built-in/built-in-preferences.component.spec.ts @@ -0,0 +1,44 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { MatCheckboxModule, MatIconModule, MatToolbarModule, MatMenuModule } from '@angular/material'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { ActivatedRoute } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MockedActivatedRoute } from '../preferences.component.spec'; +import { BuiltInPreferencesComponent } from './built-in-preferences.component'; + +describe('BuiltInPreferencesComponent', () => { + let component: BuiltInPreferencesComponent; + let fixture: ComponentFixture; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + } + ], + declarations: [ + BuiltInPreferencesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BuiltInPreferencesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set correct server id', () => { + expect(component.serverId).toBe('1'); + }); +}); diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.spec.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.spec.ts index e69de29b..43bfa6f0 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.spec.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.spec.ts @@ -0,0 +1,85 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { CloudTemplate } from '../../../../../models/templates/cloud-template'; +import { CloudNodesAddTemplateComponent } from './cloud-nodes-add-template.component'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { TemplateMocksService } from '../../../../../services/template-mocks.service'; + +export class MockedBuiltInTemplatesService { + public addTemplate(server: Server, cloudTemplate: CloudTemplate) { + return of(cloudTemplate); + } +} + +describe('CloudNodesAddTemplateComponent', () => { + let component: CloudNodesAddTemplateComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService}, + { provide: TemplateMocksService, useClass: TemplateMocksService } + ], + declarations: [ + CloudNodesAddTemplateComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CloudNodesAddTemplateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call add template', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate)); + component.templateName = "sample name"; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).toHaveBeenCalled(); + }); + + it('should not call add template when template name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as CloudTemplate)); + spyOn(mockedToasterService, 'error'); + component.templateName = ""; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).not.toHaveBeenCalled(); + expect(mockedToasterService.error).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.ts index 91d9c851..f66ed852 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component.ts @@ -1,8 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { Server } from '../../../../../models/server'; -import { ActivatedRoute, ParamMap, Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { ServerService } from '../../../../../services/server.service'; -import { switchMap } from 'rxjs/operators'; import { ToasterService } from '../../../../../services/toaster.service'; import { v4 as uuid } from 'uuid'; import { TemplateMocksService } from '../../../../../services/template-mocks.service'; @@ -29,14 +28,8 @@ export class CloudNodesAddTemplateComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; }); } diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.spec.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.spec.ts index e69de29b..8d6578fd 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.spec.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component.spec.ts @@ -0,0 +1,75 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, MatTableModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { CloudTemplate } from '../../../../../models/templates/cloud-template'; +import { CloudNodesTemplateDetailsComponent } from './cloud-nodes-template-details.component'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ServerService } from '../../../../../services/server.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; + +export class MockedBuiltInTemplatesService { + public getTemplate(server: Server, template_id: string) { + return of({ports_mapping: []} as CloudTemplate); + } + + public saveTemplate(server: Server, cloudTemplate: CloudTemplate) { + return of(cloudTemplate); + } +} + +describe('CloudNodesTemplateDetailsComponent', () => { + let component: CloudNodesTemplateDetailsComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [FormsModule, ReactiveFormsModule, MatTableModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService} + ], + declarations: [ + CloudNodesTemplateDetailsComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CloudNodesTemplateDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call save template', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as CloudTemplate)); + + component.cloudNodeTemplate = {ports_mapping: []} as CloudTemplate; + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.spec.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.spec.ts index e69de29b..29790ee8 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.spec.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.spec.ts @@ -0,0 +1,57 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { CloudTemplate } from '../../../../../models/templates/cloud-template'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { CloudNodesTemplatesComponent } from './cloud-nodes-templates.component'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; + +export class MockedBuiltInTemplatesService { + public getTemplates(server: Server) { + return of([{} as CloudTemplate]); + } +} + +describe('CloudNodesTemplatesComponent', () => { + let component: CloudNodesTemplatesComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService } + ], + declarations: [ + CloudNodesTemplatesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CloudNodesTemplatesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.ts b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.ts index 125c036d..e3784a3f 100644 --- a/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.ts +++ b/src/app/components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component.ts @@ -23,14 +23,8 @@ export class CloudNodesTemplatesComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; this.builtInTemplatesService.getTemplates(this.server).subscribe((cloudNodesTemplates: CloudTemplate[]) => { diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.spec.ts b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.spec.ts index e69de29b..d37634e0 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.spec.ts @@ -0,0 +1,99 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { TemplateMocksService } from '../../../../../services/template-mocks.service'; +import { EthernetHubTemplate } from '../../../../../models/templates/ethernet-hub-template'; +import { EthernetHubsAddTemplateComponent } from './ethernet-hubs-add-template.component'; + +export class MockedBuiltInTemplatesService { + public addTemplate(server: Server, ethernetHubTemplate: EthernetHubTemplate) { + return of(ethernetHubTemplate); + } +} + +describe('EthernetHubsAddTemplateComponent', () => { + let component: EthernetHubsAddTemplateComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService}, + { provide: TemplateMocksService, useClass: TemplateMocksService } + ], + declarations: [ + EthernetHubsAddTemplateComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetHubsAddTemplateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call add template', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate)); + component.templateName = "sample name"; + component.numberOfPorts = 2; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).toHaveBeenCalled(); + }); + + it('should not call add template when template name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate)); + spyOn(mockedToasterService, 'error'); + component.templateName = ""; + component.numberOfPorts = 2; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).not.toHaveBeenCalled(); + expect(mockedToasterService.error).toHaveBeenCalled(); + }); + + it('should not call add template when number of ports is missing', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetHubTemplate)); + spyOn(mockedToasterService, 'error'); + component.templateName = "sample name"; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).not.toHaveBeenCalled(); + expect(mockedToasterService.error).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.ts b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.ts index 1319295a..a7de1835 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.ts +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component.ts @@ -30,14 +30,8 @@ export class EthernetHubsAddTemplateComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; }); } diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component.spec.ts b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component.spec.ts index e69de29b..ee70235d 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component.spec.ts @@ -0,0 +1,118 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, MatTableModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ServerService } from '../../../../../services/server.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { EthernetHubTemplate } from '../../../../../models/templates/ethernet-hub-template'; +import { EthernetHubsTemplateDetailsComponent } from './ethernet-hubs-template-details.component'; + +export class MockedBuiltInTemplatesService { + public getTemplate(server: Server, template_id: string) { + return of({ports_mapping: []} as EthernetHubTemplate); + } + + public saveTemplate(server: Server, cloudTemplate: EthernetHubTemplate) { + return of(cloudTemplate); + } +} + +describe('EthernetHubsTemplateDetailsComponent', () => { + let component: EthernetHubsTemplateDetailsComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [FormsModule, ReactiveFormsModule, MatTableModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService} + ], + declarations: [ + EthernetHubsTemplateDetailsComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetHubsTemplateDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call save template', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetHubTemplate)); + component.numberOfPorts = 2; + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetHubTemplate = {ports_mapping: []} as EthernetHubTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).toHaveBeenCalled(); + }); + + it('should not call save template when template name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetHubTemplate)); + component.numberOfPorts = 2; + component.inputForm.controls['templateName'].setValue(''); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetHubTemplate = {ports_mapping: []} as EthernetHubTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); + + it('should not call save template when default name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetHubTemplate)); + component.numberOfPorts = 2; + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue(''); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetHubTemplate = {ports_mapping: []} as EthernetHubTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); + + it('should call save template when symbol path is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetHubTemplate)); + component.numberOfPorts = 2; + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue(''); + component.ethernetHubTemplate = {ports_mapping: []} as EthernetHubTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.spec.ts b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.spec.ts index e69de29b..b2eecec3 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.spec.ts @@ -0,0 +1,57 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { EthernetHubTemplate } from '../../../../../models/templates/ethernet-hub-template'; +import { EthernetHubsTemplatesComponent } from './ethernet-hubs-templates.component'; + +export class MockedBuiltInTemplatesService { + public getTemplates(server: Server) { + return of([{} as EthernetHubTemplate]); + } +} + +describe('EthernetHubsTemplatesComponent', () => { + let component: EthernetHubsTemplatesComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService } + ], + declarations: [ + EthernetHubsTemplatesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetHubsTemplatesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.ts b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.ts index 162edd5c..cf5a0a09 100644 --- a/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.ts +++ b/src/app/components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component.ts @@ -23,14 +23,8 @@ export class EthernetHubsTemplatesComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; this.builtInTemplatesService.getTemplates(this.server).subscribe((ethernetHubsTemplates: EthernetHubTemplate[]) => { diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.spec.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.spec.ts index e69de29b..4b1fcee6 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.spec.ts @@ -0,0 +1,99 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { TemplateMocksService } from '../../../../../services/template-mocks.service'; +import { EthernetSwitchTemplate } from '../../../../../models/templates/ethernet-switch-template'; +import { EthernetSwitchesAddTemplateComponent } from './ethernet-switches-add-template.component'; + +export class MockedBuiltInTemplatesService { + public addTemplate(server: Server, ethernetHubTemplate: EthernetSwitchTemplate) { + return of(ethernetHubTemplate); + } +} + +describe('EthernetSwitchesAddTemplateComponent', () => { + let component: EthernetSwitchesAddTemplateComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService}, + { provide: TemplateMocksService, useClass: TemplateMocksService } + ], + declarations: [ + EthernetSwitchesAddTemplateComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetSwitchesAddTemplateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call add template', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + component.templateName = "sample name"; + component.numberOfPorts = 2; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).toHaveBeenCalled(); + }); + + it('should not call add template when template name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + spyOn(mockedToasterService, 'error'); + component.templateName = ""; + component.numberOfPorts = 2; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).not.toHaveBeenCalled(); + expect(mockedToasterService.error).toHaveBeenCalled(); + }); + + it('should not call add template when number of ports is missing', () => { + spyOn(mockedBuiltInTemplatesService, 'addTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + spyOn(mockedToasterService, 'error'); + component.templateName = "sample name"; + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedBuiltInTemplatesService.addTemplate).not.toHaveBeenCalled(); + expect(mockedToasterService.error).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.ts index 718182a2..7e3bffd9 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component.ts @@ -30,14 +30,8 @@ export class EthernetSwitchesAddTemplateComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; }); } diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.spec.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.spec.ts index e69de29b..0518ab9f 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component.spec.ts @@ -0,0 +1,114 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, MatTableModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedToasterService } from '../../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ServerService } from '../../../../../services/server.service'; +import { ToasterService } from '../../../../../services/toaster.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { EthernetSwitchTemplate } from '../../../../../models/templates/ethernet-switch-template'; +import { EthernetSwitchesTemplateDetailsComponent } from './ethernet-switches-template-details.component'; + +export class MockedBuiltInTemplatesService { + public getTemplate(server: Server, template_id: string) { + return of({ports_mapping: []} as EthernetSwitchTemplate); + } + + public saveTemplate(server: Server, cloudTemplate: EthernetSwitchTemplate) { + return of(cloudTemplate); + } +} + +describe('EthernetSwitchesTemplateDetailsComponent', () => { + let component: EthernetSwitchesTemplateDetailsComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [FormsModule, ReactiveFormsModule, MatTableModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService }, + { provide: ToasterService, useValue: mockedToasterService} + ], + declarations: [ + EthernetSwitchesTemplateDetailsComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetSwitchesTemplateDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call save template', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetSwitchTemplate = {ports_mapping: []} as EthernetSwitchTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).toHaveBeenCalled(); + }); + + it('should not call save template when template name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + component.inputForm.controls['templateName'].setValue(''); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetSwitchTemplate = {ports_mapping: []} as EthernetSwitchTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); + + it('should not call save template when default name is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue(''); + component.inputForm.controls['symbol'].setValue('symbol'); + component.ethernetSwitchTemplate = {ports_mapping: []} as EthernetSwitchTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); + + it('should call save template when symbol path is empty', () => { + spyOn(mockedBuiltInTemplatesService, 'saveTemplate').and.returnValue(of({} as EthernetSwitchTemplate)); + component.inputForm.controls['templateName'].setValue('template name'); + component.inputForm.controls['defaultName'].setValue('default name'); + component.inputForm.controls['symbol'].setValue(''); + component.ethernetSwitchTemplate = {ports_mapping: []} as EthernetSwitchTemplate; + + component.onSave(); + + expect(mockedBuiltInTemplatesService.saveTemplate).not.toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.spec.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.spec.ts index e69de29b..17210e71 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.spec.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.spec.ts @@ -0,0 +1,57 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { Server } from '../../../../../models/server'; +import { MockedServerService } from '../../../../../services/server.service.spec'; +import { MockedActivatedRoute } from '../../../preferences.component.spec'; +import { ServerService } from '../../../../../services/server.service'; +import { BuiltInTemplatesService } from '../../../../../services/built-in-templates.service'; +import { EthernetSwitchesTemplatesComponent } from './ethernet-switches-templates.component'; +import { EthernetSwitchTemplate } from '../../../../../models/templates/ethernet-switch-template'; + +export class MockedBuiltInTemplatesService { + public getTemplates(server: Server) { + return of([{} as EthernetSwitchTemplate]); + } +} + +describe('EthernetSwitchesTemplatesComponent', () => { + let component: EthernetSwitchesTemplatesComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedBuiltInTemplatesService = new MockedBuiltInTemplatesService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: BuiltInTemplatesService, useValue: mockedBuiltInTemplatesService } + ], + declarations: [ + EthernetSwitchesTemplatesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(EthernetSwitchesTemplatesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.ts b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.ts index 3c9ed470..7cec46ef 100644 --- a/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.ts +++ b/src/app/components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component.ts @@ -23,14 +23,8 @@ export class EthernetSwitchesTemplatesComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; this.builtInTemplatesService.getTemplates(this.server).subscribe((ethernetSwitchesTemplates: EthernetSwitchTemplate[]) => { diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.spec.ts b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.spec.ts index e69de29b..226ebd85 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.spec.ts +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.spec.ts @@ -0,0 +1,112 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatInputModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, MatSelectModule, MatFormFieldModule, MatAutocompleteModule, MatTableModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { MockedServerService } from '../../../../services/server.service.spec'; +import { ServerService } from '../../../../services/server.service'; +import { Server } from '../../../../models/server'; +import { ToasterService } from '../../../../services/toaster.service'; +import { TemplateMocksService } from '../../../../services/template-mocks.service'; +import { MockedToasterService } from '../../../../services/toaster.service.spec'; +import { MockedActivatedRoute } from '../../preferences.component.spec'; +import { IosTemplate } from '../../../../models/templates/ios-template'; +import { AddIosTemplateComponent } from './add-ios-template.component'; +import { IosService } from '../../../../services/ios.service'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { IosConfigurationService } from '../../../../services/ios-configuration.service'; + +export class MockedIosService { + public addTemplate(server: Server, iosTemplate: IosTemplate) { + return of(iosTemplate); + } +} + +describe('AddIosTemplateComponent', () => { + let component: AddIosTemplateComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedIosService = new MockedIosService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ FormsModule, MatTableModule, MatAutocompleteModule, MatFormFieldModule, MatInputModule, ReactiveFormsModule, MatSelectModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: IosService, useValue: mockedIosService }, + { provide: ToasterService, useValue: mockedToasterService}, + { provide: TemplateMocksService, useClass: TemplateMocksService }, + { provide: IosConfigurationService, useClass: IosConfigurationService } + ], + declarations: [ + AddIosTemplateComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AddIosTemplateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call add template', () => { + spyOn(mockedIosService, 'addTemplate').and.returnValue(of({} as IosTemplate)); + component.iosImageForm.controls['imageName'].setValue('image name'); + component.iosNameForm.controls['templateName'].setValue('template name'); + component.iosMemoryForm.controls['memory'].setValue(0); + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedIosService.addTemplate).toHaveBeenCalled(); + }); + + it('should not call add template when template name is not defined', () => { + spyOn(mockedIosService, 'addTemplate').and.returnValue(of({} as IosTemplate)); + component.iosImageForm.controls['imageName'].setValue('image name'); + component.iosNameForm.controls['templateName'].setValue(''); + component.iosMemoryForm.controls['memory'].setValue(0); + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedIosService.addTemplate).not.toHaveBeenCalled(); + }); + + it('should not call add template when image name is not defined', () => { + spyOn(mockedIosService, 'addTemplate').and.returnValue(of({} as IosTemplate)); + component.iosNameForm.controls['templateName'].setValue('template name'); + component.iosMemoryForm.controls['memory'].setValue(0); + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedIosService.addTemplate).not.toHaveBeenCalled(); + }); + + it('should not call add template when memory is not defined', () => { + spyOn(mockedIosService, 'addTemplate').and.returnValue(of({} as IosTemplate)); + component.iosImageForm.controls['imageName'].setValue('image name'); + component.iosNameForm.controls['templateName'].setValue('template name'); + component.server = {id: 1} as Server; + + component.addTemplate(); + + expect(mockedIosService.addTemplate).not.toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts index a2e6a246..ac20e76b 100644 --- a/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts +++ b/src/app/components/preferences/dynamips/add-ios-template/add-ios-template.component.ts @@ -86,7 +86,7 @@ export class AddIosTemplateComponent implements OnInit { } addTemplate() { - if (!this.iosImageForm.invalid) { + if (!this.iosImageForm.invalid && !this.iosNameForm.invalid && !this.iosMemoryForm.invalid) { this.iosTemplate.template_id = uuid(); if (this.isEtherSwitchRouter) { diff --git a/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.spec.ts b/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.spec.ts index e69de29b..741b3e02 100644 --- a/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.spec.ts +++ b/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.spec.ts @@ -0,0 +1,61 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { MockedServerService } from '../../../../services/server.service.spec'; +import { ServerService } from '../../../../services/server.service'; +import { MockedActivatedRoute } from '../../preferences.component.spec'; +import { ServerSettingsService } from '../../../../services/server-settings.service'; +import { HttpClientModule } from '@angular/common/http'; +import { MockedServerSettingsService } from '../../../../services/server-settings.service.spec'; +import { MockedToasterService } from '../../../../services/toaster.service.spec'; +import { ToasterService } from '../../../../services/toaster.service'; +import { DynamipsPreferencesComponent } from './dynamips-preferences.component'; + +describe('DynamipsPreferencesComponent', () => { + let component: DynamipsPreferencesComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let activatedRoute = new MockedActivatedRoute().get(); + let mockedServerSettingsService = new MockedServerSettingsService(); + let mockedToasterService = new MockedToasterService(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [HttpClientModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: ServerSettingsService, useValue: mockedServerSettingsService }, + { provide: ToasterService, useValue: mockedToasterService } + ], + declarations: [ + DynamipsPreferencesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DynamipsPreferencesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should clear path when restore defaults called', () => { + component.dynamipsPath = 'Non empty'; + component.restoreDefaults(); + + expect(component.dynamipsPath).toBe(''); + }); +}); diff --git a/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.ts b/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.ts index 8efac89d..b6c92fdb 100644 --- a/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.ts +++ b/src/app/components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component.ts @@ -1,8 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { ServerSettingsService } from '../../../../services/server-settings.service'; -import { ActivatedRoute, ParamMap } from '@angular/router'; +import { ActivatedRoute } from '@angular/router'; import { Server } from '../../../../models/server'; -import { switchMap } from 'rxjs/operators'; import { ServerService } from '../../../../services/server.service'; @@ -22,15 +21,13 @@ export class DynamipsPreferencesComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; }); } + + restoreDefaults() { + this.dynamipsPath = ''; + } } diff --git a/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.spec.ts b/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.spec.ts index e69de29b..e46e6c8c 100644 --- a/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.spec.ts +++ b/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.spec.ts @@ -0,0 +1,76 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { MockedServerService } from '../../../../services/server.service.spec'; +import { ServerService } from '../../../../services/server.service'; +import { Server } from '../../../../models/server'; +import { MockedToasterService } from '../../../../services/toaster.service.spec'; +import { ToasterService } from '../../../../services/toaster.service'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MockedActivatedRoute } from '../../preferences.component.spec'; +import { IosTemplate } from '../../../../models/templates/ios-template'; +import { IosTemplateDetailsComponent } from './ios-template-details.component'; +import { IosService } from '../../../../services/ios.service'; +import { IosConfigurationService } from '../../../../services/ios-configuration.service'; + +export class MockedIosService { + public getTemplate(server: Server, template_id: string) { + return of({} as IosTemplate); + } + + public saveTemplate(server: Server, iosTemplate: IosTemplate) { + return of(iosTemplate); + } +} + +describe('IosTemplateDetailsComponent', () => { + let component: IosTemplateDetailsComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedIosService = new MockedIosService; + let mockedToasterService = new MockedToasterService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [FormsModule, ReactiveFormsModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: IosService, useValue: mockedIosService }, + { provide: ToasterService, useValue: mockedToasterService }, + { provide: IosConfigurationService, useClass: IosConfigurationService } + ], + declarations: [ + IosTemplateDetailsComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(IosTemplateDetailsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call save template', () => { + spyOn(mockedIosService, 'saveTemplate').and.returnValue(of({} as IosTemplate)); + + component.onSave(); + + expect(mockedIosService.saveTemplate).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.ts b/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.ts index 49b8f42f..48b290b2 100644 --- a/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.ts +++ b/src/app/components/preferences/dynamips/ios-template-details/ios-template-details.component.ts @@ -58,8 +58,6 @@ export class IosTemplateDetailsComponent implements OnInit { this.chassis = this.iosConfigurationService.getChassis(); this.defaultRam = this.iosConfigurationService.getDefaultRamSettings(); this.fillAdaptersData(); - - console.log(this.iosTemplate.slot3); }); }); } diff --git a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.spec.ts b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.spec.ts index e69de29b..57d7bc44 100644 --- a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.spec.ts +++ b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.spec.ts @@ -0,0 +1,57 @@ +import { ComponentFixture, async, TestBed } from '@angular/core/testing'; +import { MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { of } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { MockedServerService } from '../../../../services/server.service.spec'; +import { ServerService } from '../../../../services/server.service'; +import { Server } from '../../../../models/server'; +import { MockedActivatedRoute } from '../../preferences.component.spec'; +import { IosTemplate } from '../../../../models/templates/ios-template'; +import { IosTemplatesComponent } from './ios-templates.component'; +import { IosService } from '../../../../services/ios.service'; + +export class MockedIosService { + public getTemplates(server: Server) { + return of([{} as IosTemplate]); + } +} + +describe('IosTemplatesComponent', () => { + let component: IosTemplatesComponent; + let fixture: ComponentFixture; + + let mockedServerService = new MockedServerService; + let mockedIosService = new MockedIosService; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + }, + { provide: ServerService, useValue: mockedServerService }, + { provide: IosService, useValue: mockedIosService } + ], + declarations: [ + IosTemplatesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(IosTemplatesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.ts b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.ts index 16ba6b98..8adba014 100644 --- a/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.ts +++ b/src/app/components/preferences/dynamips/ios-templates/ios-templates.component.ts @@ -23,14 +23,8 @@ export class IosTemplatesComponent implements OnInit { ) {} ngOnInit() { - this.route.paramMap - .pipe( - switchMap((params: ParamMap) => { - const server_id = params.get('server_id'); - return this.serverService.get(parseInt(server_id, 10)); - }) - ) - .subscribe((server: Server) => { + const server_id = this.route.snapshot.paramMap.get("server_id"); + this.serverService.get(parseInt(server_id, 10)).then((server: Server) => { this.server = server; this.iosService.getTemplates(this.server).subscribe((templates: IosTemplate[]) => { diff --git a/src/app/components/preferences/general/general-preferences.component.spec.ts b/src/app/components/preferences/general/general-preferences.component.spec.ts index e69de29b..69e4bb74 100644 --- a/src/app/components/preferences/general/general-preferences.component.spec.ts +++ b/src/app/components/preferences/general/general-preferences.component.spec.ts @@ -0,0 +1,44 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { MatCheckboxModule, MatIconModule, MatToolbarModule, MatMenuModule } from '@angular/material'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { ActivatedRoute } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { RouterTestingModule } from '@angular/router/testing'; +import { GeneralPreferencesComponent } from './general-preferences.component'; +import { MockedActivatedRoute } from '../preferences.component.spec'; + +describe('GeneralPreferencesComponent', () => { + let component: GeneralPreferencesComponent; + let fixture: ComponentFixture; + let activatedRoute = new MockedActivatedRoute().get(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + providers: [ + { + provide: ActivatedRoute, useValue: activatedRoute + } + ], + declarations: [ + GeneralPreferencesComponent + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(GeneralPreferencesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set correct server id', () => { + expect(component.serverId).toBe('1'); + }); +}); diff --git a/src/app/components/preferences/general/general-preferences.component.ts b/src/app/components/preferences/general/general-preferences.component.ts index 25f04415..0863e2fe 100644 --- a/src/app/components/preferences/general/general-preferences.component.ts +++ b/src/app/components/preferences/general/general-preferences.component.ts @@ -1,7 +1,5 @@ import { Component, OnInit } from "@angular/core"; -import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ServerService } from '../../../services/server.service'; -import { switchMap } from 'rxjs/operators'; +import { ActivatedRoute } from '@angular/router'; @Component({ diff --git a/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.spec.ts b/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.spec.ts index d5cb2788..32a1b91b 100644 --- a/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.spec.ts +++ b/src/app/components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component.spec.ts @@ -46,7 +46,7 @@ describe('QemuVmTemplateDetailsComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - imports: [FormsModule, ReactiveFormsModule, MatTableModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], + imports: [FormsModule, ReactiveFormsModule, MatTableModule, MatIconModule, MatToolbarModule, MatMenuModule, MatCheckboxModule, CommonModule, NoopAnimationsModule, RouterTestingModule.withRoutes([])], providers: [ { provide: ActivatedRoute, useValue: activatedRoute diff --git a/src/app/components/preferences/vpcs/vpcs-templates/vpcs-templates.component.ts b/src/app/components/preferences/vpcs/vpcs-templates/vpcs-templates.component.ts index 9ddd5fea..898aef37 100644 --- a/src/app/components/preferences/vpcs/vpcs-templates/vpcs-templates.component.ts +++ b/src/app/components/preferences/vpcs/vpcs-templates/vpcs-templates.component.ts @@ -2,7 +2,6 @@ import { Component, OnInit } from "@angular/core"; import { Server } from '../../../../models/server'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { ServerService } from '../../../../services/server.service'; -import { switchMap } from 'rxjs/operators'; import { VpcsService } from '../../../../services/vpcs.service'; import { VpcsTemplate } from '../../../../models/templates/vpcs-template';