From f1e61ce405cf11ea77fe98abd5e10f7ed2d72611 Mon Sep 17 00:00:00 2001 From: sj108s Date: Tue, 13 Mar 2018 20:29:58 +0530 Subject: Fixed defects in test screen & updated test cases Fixed few defects raised by ST in test screen and also updated test cases to improve coverage. Also,changed code to match onap standards, and rectfied grep code violations. Issue-ID: APPC-730 Change-Id: I0286c38eb4f76dc8c0253a4ccab721b3ccfeff9d Signed-off-by: sj108s --- .gitignore | 1 + src/app/about-us/aboutus.component.html | 2 +- src/app/about-us/aboutus.component.spec.ts | 56 +++- src/app/about-us/aboutus.component.ts | 4 +- src/app/about-us/appVersion.json | 2 +- src/app/about-us/versionLog.txt | 73 +++-- src/app/app.component.spec.ts | 8 +- .../navigation/navigation.component.spec.ts | 91 +++++- .../shared/directives/collapse.component.spec.ts | 31 ++ .../directives/drop-down-toggle.directive.spec.ts | 22 +- src/app/shared/directives/dropdown.spec.ts | 15 +- .../directives/dropdownnotclosablezone.spec.ts | 52 ++++ src/app/shared/directives/dropdownopen.spec.ts | 51 +++ .../modules/tidy-table/order-by.pipe.spec.ts | 36 ++- .../modules/tidy-table/table-filter.pipe.spec.ts | 11 + src/app/shared/pipes/vm-filtering.pipe.spec.ts | 49 +++ src/app/shared/pipes/vm-filtering.pipe.ts | 42 +++ src/app/shared/services/emitter.service.spec.ts | 9 +- src/app/shared/services/mapping-editor.service.ts | 105 +------ .../utilityService/utility.service.spec.ts | 12 +- src/app/test/test.component.html | 25 +- src/app/test/test.component.spec.ts | 345 +++++++++++++++++---- src/app/test/test.component.ts | 186 +++++------ .../parameter-definition.service.spec.ts | 40 ++- .../parameter-definitions/parameter.component.html | 24 +- .../parameter.component.spec.ts | 15 - .../param-name-value.component.html | 24 +- .../param-name-value.component.spec.ts | 242 +++++++++++++++ .../param-name-value/param-name-value.component.ts | 291 +---------------- .../template-configuration.component.html | 13 +- .../template-configuration.component.spec.ts | 239 ++++++++++++-- .../template-configuration.component.ts | 264 ++-------------- src/environments/environment.dev3.ts | 4 - src/environments/environment.dev4.ts | 4 - src/environments/environment.prod.ts | 4 - src/environments/environment.ts | 29 +- 36 files changed, 1412 insertions(+), 1009 deletions(-) create mode 100644 src/app/shared/directives/collapse.component.spec.ts create mode 100644 src/app/shared/directives/dropdownnotclosablezone.spec.ts create mode 100644 src/app/shared/directives/dropdownopen.spec.ts create mode 100644 src/app/shared/pipes/vm-filtering.pipe.spec.ts create mode 100644 src/app/shared/pipes/vm-filtering.pipe.ts create mode 100644 src/app/vnfs/build-artifacts/template-holder/param-name-value/param-name-value.component.spec.ts diff --git a/.gitignore b/.gitignore index 226efa3..067819b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ node_modules/ dist/ target/ .settings/ +coverage/ diff --git a/src/app/about-us/aboutus.component.html b/src/app/about-us/aboutus.component.html index bfc6f9a..1d8134b 100644 --- a/src/app/about-us/aboutus.component.html +++ b/src/app/about-us/aboutus.component.html @@ -28,7 +28,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
CONTACT DETAILS
diff --git a/src/app/about-us/aboutus.component.spec.ts b/src/app/about-us/aboutus.component.spec.ts index e5541eb..175f8d1 100644 --- a/src/app/about-us/aboutus.component.spec.ts +++ b/src/app/about-us/aboutus.component.spec.ts @@ -20,19 +20,42 @@ limitations under the License. ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ +import { async, ComponentFixture, TestBed, inject, tick, fakeAsync } from '@angular/core/testing'; +import { Http, HttpModule, ConnectionBackend, BaseRequestOptions, Response, ResponseOptions } from '@angular/http'; +import { MockBackend } from '@angular/http/testing'; +import { ModalDismissReasons, NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/from'; +import 'rxjs/add/observable/empty'; +import 'rxjs/add/observable/of'; -/* tslint:disable:no-unused-variable */ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { AboutUsComponent } from './aboutus.component'; -import {AboutUsComponent} from './aboutus.component'; +class MockService { + doStuff() { + return this; + } +} describe('ContacUsComponent', () => { let component: AboutUsComponent; let fixture: ComponentFixture; - + beforeEach(async(() => { + let http = new MockService(); + TestBed.configureTestingModule({ - declarations: [AboutUsComponent] + declarations: [AboutUsComponent], + imports: [HttpModule, NgbModule.forRoot()], + providers: [NgbModule, { + provide: Http, useFactory: (backend: ConnectionBackend, defaultOptions: BaseRequestOptions) => { + return new Http(backend, defaultOptions); + }, deps: [MockBackend, BaseRequestOptions] + }, + { provide: MockBackend, useClass: MockBackend }, + { provide: BaseRequestOptions, useClass: BaseRequestOptions }, + {provide: Http, useValue: http}] + }) .compileComponents(); })); @@ -46,4 +69,27 @@ describe('ContacUsComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('test', inject([Http], (http: Http) => { + let spy = spyOn(http, 'get').and.returnValue(Observable.of('some value')) + + component.versionLogFile(); + + expect(http).toBeTruthy(); + expect(spy).toHaveBeenCalled() + + })); + + it('should open modal', inject([NgbModule],(ngbModule: NgbModule) => { + let content = 'test'; + component.open(content); + })); + + it('should download log file', () => { + var blob = new Blob(['test'], { + type: 'text/plain;charset=utf-8' + }); + + component.downloadLogFile(); + }); }); diff --git a/src/app/about-us/aboutus.component.ts b/src/app/about-us/aboutus.component.ts index 360855e..1c237e8 100644 --- a/src/app/about-us/aboutus.component.ts +++ b/src/app/about-us/aboutus.component.ts @@ -49,10 +49,8 @@ export class AboutUsComponent implements OnInit { } versionLogFile() { - this.http.get('app/shared/components/about-us/versionLog.txt') + this.http.get('app/about-us/versionLog.txt') .subscribe(res => this.data = res.text()); - console.log('json data ', this.data); - } open(content) { diff --git a/src/app/about-us/appVersion.json b/src/app/about-us/appVersion.json index d4fc816..5972822 100644 --- a/src/app/about-us/appVersion.json +++ b/src/app/about-us/appVersion.json @@ -1,4 +1,4 @@ { - "versionNo": "2.0.6", + "versionNo": "2.0.7", "releaseName": "1806" } \ No newline at end of file diff --git a/src/app/about-us/versionLog.txt b/src/app/about-us/versionLog.txt index fea7248..af9808a 100644 --- a/src/app/about-us/versionLog.txt +++ b/src/app/about-us/versionLog.txt @@ -1,94 +1,99 @@ +Version 2.0.7 +=========================================================== +1. Fixed issues raised by ST in test screen. +2. Added few test cases to increase code coverage. + Version 2.0.6 =========================================================== -1. Fixed issues raised by ST in test screen. (sj108s) -2. Added test spec file (sj108s) +1. Fixed issues raised by ST in test screen. +2. Added test spec file Version 2.0.5 =========================================================== -1. Changed the location of Assign new Template Identifier.(Author-ug0221) -2. Fixed an issue with retaining the selected value in the dropdown for Template Id's.(Author-ug0221) -3. Added Artifact Name to the Filter box.(Author-ug0221) -4. Added empty value validations on create new VNF pop up box.(Author-ug0221) +1. Changed the location of Assign new Template Identifier. +2. Fixed an issue with retaining the selected value in the dropdown for Template Id's. +3. Added Artifact Name to the Filter box. +4. Added empty value validations on create new VNF pop up box. Version 2.0.4 =========================================================== -1. Added test cases to golden configuration spec file(sj108s) -2. Fixed defect in test screen regarding request id while polling using getTestResponse() method (sj108s) -3. Added validation to template configuration tab for accepting only xml and json files (sj108s) -4. Added validation to param values tab to accept only json files (sj108s) +1. Added test cases to golden configuration spec file +2. Fixed defect in test screen regarding request id while polling using getTestResponse method +3. Added validation to template configuration tab for accepting only xml and json files +4. Added validation to param values tab to accept only json files Version 2.0.3 =========================================================== 1. Fixed E2E defect 430809 in 1802 : Space is not getting ignored in param configure artifact - generated by CDT tool if VNF name / vnfc - type has spaces (sj108s) + generated by CDT tool if VNF name / vnfc - type has spaces Version 2.0.2 =========================================================== -1. Added Licence Info to Reference Data Screen.(ug0221) -2. Added Config ScaleOut Action and Template Identifiers to the Reference screen.(ug0221) -3. resolved a defect where the configscale out file uploaded doesnt populate the template is dropdown.(ug0221) +1. Added Licence Info to Reference Data Screen. +2. Added Config ScaleOut Action and Template Identifiers to the Reference screen. +3. resolved a defect where the configscale out file uploaded doesnt populate the template is dropdown. Version 2.0.1 =========================================================== -1. Added Licence Info to golden config/ My VNF and other modules for ONAP- Only Reference Page remaining.(sj108s) -2. Added Test screen to the main menu.(sj108s) -3. Created HTML for Test Screen and integrated ts code.(sj108s) +1. Added Licence Info to golden config/ My VNF and other modules for ONAP- Only Reference Page remaining. +2. Added Test screen to the main menu. +3. Created HTML for Test Screen and integrated ts code. Version 2.0.0 =========================================================== -1. 18/06 Major release.(ak583p) +1. 18/06 Major release. Version 1.1.1 =========================================================== -1. Defect 416768 Block Name should not be merged. Do not allow a merge with a value that double quotes around it, possibly a space and a colon at the end.(Author-ma926a) -2. Populating PD using name/value pairs when Uploading key file.(Author-ma926a) +1. Defect 416768 Block Name should not be merged. Do not allow a merge with a value that double quotes around it, possibly a space and a colon at the end. +2. Populating PD using name/value pairs when Uploading key file. Version 1.1.0 =========================================================== -1. Added functionality for entering names in template through modal.(Author-sj108s) -2. Enabled test screen and added basic test functionality.(Author-sj108s) +1. Added functionality for entering names in template through modal. +2. Enabled test screen and added basic test functionality. Version 1.0.9 =========================================================== -1. Allow user to upload of Key Data Files multiple times.(Author-ma926a) +1. Allow user to upload of Key Data Files multiple times. 2. Removing INSTAR and its properties using key file. Version 1.0.8 =========================================================== -1. Changed the color code for merge successful/ unsuccessful messages.(Author sj108s) +1. Changed the color code for merge successful/ unsuccessful messages. Version 1.0.7 =========================================================== -1. Fixed defect in reference screen where previous vm actions where not getting replaced on uploading the new ones.(Author sj108s) +1. Fixed defect in reference screen where previous vm actions where not getting replaced on uploading the new ones. Version 1.0.6 =========================================================== -1. Fixed defect 396019- Added functionality for syncing template from parameters.(Author sj108s) +1. Fixed defect 396019- Added functionality for syncing template from parameters. Version 1.0.5 =========================================================== -1. Fixed protocol field while uploading reference artifact file for OpenStack Actions.(Author sj108s) +1. Fixed protocol field while uploading reference artifact file for OpenStack Actions. Version 1.0.4 =========================================================== -1. Fixed defect: Changed artifact-list to [] and vnfc-type to null in case of reference artifact generated for OpenStack Actions.(Author sj108s) +1. Fixed defect: Changed artifact-list to [] and vnfc-type to null in case of reference artifact generated for OpenStack Actions. Version 1.0.3 =========================================================== -1. Fix for Defect#399542 Merge from Params should not Merge the commented section of the base template ( CDT Version : 1.2.1). (Author-ma926a) -2. Fix for Defect#402786 While changing back to Manual from other sources, other fields is not return to previous. (Author-ma926a) -3. With some minor ST issues on PD source, ruletype manipulation. (Author-ma926a) +1. Fix for Defect#399542 Merge from Params should not Merge the commented section of the base template ( CDT Version : 1.2.1). +2. Fix for Defect#402786 While changing back to Manual from other sources, other fields is not return to previous. +3. With some minor ST issues on PD source, ruletype manipulation. Version 1.0.2 =========================================================== -1. Added functionality for hiding template and PD tabs on selection of OpenStack Actions in reference screen(Author sj108s) +1. Added functionality for hiding template and PD tabs on selection of OpenStack Actions in reference screen 2. Fixed ST defect raised by Ed, wherein the user autoretrieves refrence data with multiple actions from myvnfs, comes to reference screen, and navigates to template and pd pages and comes back to reference page, the data for the - multiple actions are saving and retrieving correctly now.(Author sj108s) + multiple actions are saving and retrieving correctly now. Version 1.0.1 =========================================================== -Story#330094 - Fixed the defects and left over tasks from this story.(Author-ma926a) +Story#330094 - Fixed the defects and left over tasks from this story. 1. Source Manual/INSTAR/A&AI selection handled properly. 2. Disabling INSTAR to avoid manual selection of INSTAR. 3. "" empty quates in PD file when we select empty value in dropdowns. diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 9eedbcb..378ab8e 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -9,7 +9,7 @@ under the Apache License, Version 2.0 (the License); you may not use this software except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -21,8 +21,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ -/* tslint:disable:no-unused-variable */ - import {async, TestBed} from '@angular/core/testing'; import {AppComponent} from './app.component'; import {NO_ERRORS_SCHEMA} from '@angular/core'; @@ -54,8 +52,10 @@ describe('AppComponent', () => { it(`should have as title 'app works!'`, async(() => { const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; + const app = fixture.componentInstance; + app.ngOnInit(); expect(app.title).toEqual('app works!'); + app.ngOnDestroy(); })); }); diff --git a/src/app/shared/components/navigation/navigation.component.spec.ts b/src/app/shared/components/navigation/navigation.component.spec.ts index c5a436b..9516e3d 100644 --- a/src/app/shared/components/navigation/navigation.component.spec.ts +++ b/src/app/shared/components/navigation/navigation.component.spec.ts @@ -21,11 +21,27 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ +import { async, ComponentFixture, TestBed, fakeAsync, tick, inject } from '@angular/core/testing'; +import { RouterTestingModule } from "@angular/router/testing"; +import { Router, ActivatedRoute } from "@angular/router"; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/empty'; +import {DialogService} from 'ng2-bootstrap-modal'; +import {FormsModule} from '@angular/forms'; +import {HttpModule} from '@angular/http'; +import {HttpUtilService} from '../../../shared/services/httpUtil/http-util.service'; +import {MappingEditorService} from '../../..//shared/services/mapping-editor.service'; +import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {NgModule} from '@angular/core'; +import {NgProgress} from 'ngx-progressbar'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; +import {NotificationService} from '../../../shared/services/notification.service'; +import {ParamShareService} from '../../..//shared/services/paramShare.service'; +import {SharedModule} from '../../../shared/shared.module'; +import {environment} from '../../../../environments/environment'; -/* tslint:disable:no-unused-variable */ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {NavigationComponent} from './navigation.component'; +import { NavigationComponent } from './navigation.component'; +import { EmitterService } from '../../services/emitter.service'; describe('NavigationComponent', () => { let component: NavigationComponent; @@ -33,7 +49,9 @@ describe('NavigationComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [NavigationComponent] + declarations: [NavigationComponent], + imports: [RouterTestingModule.withRoutes([]),FormsModule, RouterTestingModule, HttpModule, NgbModule.forRoot()], + providers: [] }) .compileComponents(); })); @@ -47,4 +65,67 @@ describe('NavigationComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('should set userLoggedIn on ngOnInit', () => { + component.userId = 'testingId'; + + component.ngOnInit(); + }); + + it('should validate on ngOnChanges', () => { + let spy = spyOn(EmitterService, 'get').and.callFake( ({}) => { + return Observable.empty(); + }); + component.id = 'userLogin'; + + component.ngOnChanges(); + + expect(spy).toHaveBeenCalled(); + }); + + it('should go to /vnfs/list if url = vnfs and userId is not null or undefined', inject([Router],(router: Router) => { + let navigateSpy = spyOn(router, 'navigate'); + localStorage['userId'] = 'testingId'; + let testUrl = 'vnfs'; + + component.gotoDetail(testUrl); + })); + + it('should go to /vnfs if url = vnfs and userId is null or undefined', inject([Router],(router: Router) => { + let navigateSpy = spyOn(router, 'navigate'); + localStorage['userId'] = ''; + let testUrl = 'vnfs'; + + component.gotoDetail(testUrl); + })); + + it('should go to passed url if url != vnfs', inject([Router],(router: Router) => { + let navigateSpy = spyOn(router, 'navigate'); + let testUrl = 'test'; + + component.gotoDetail(testUrl); + })); + + it('should logout', inject([Router],(router: Router) => { + let navigateSpy = spyOn(router, 'navigate'); + + component.logout(); + })); + it('should ngOnChanges', () => { + component.id="uday" + component.ngOnChanges() + expect(component.userLoggedIn).toBeFalsy(); + }); + it('should ngOnInit()', () => { + localStorage['userId']="uday" + component.ngOnInit() + expect(component.userLoggedIn).toBeTruthy(); + }); + it('should gotoDetail(url)', () => { + component.gotoDetail('vnfs') + }); + it('should logout()', () => { + component.logout() + expect(component.userLoggedIn).toBeFalsy(); + }); }); diff --git a/src/app/shared/directives/collapse.component.spec.ts b/src/app/shared/directives/collapse.component.spec.ts new file mode 100644 index 0000000..0d234d7 --- /dev/null +++ b/src/app/shared/directives/collapse.component.spec.ts @@ -0,0 +1,31 @@ +import { Collapse } from './collapse.component'; +import { ElementRef } from '@angular/core'; + + +describe('CollapseComponent', () => { + let directive; + + beforeEach(() => { + directive = new Collapse(); + }); + + it('should create an instance', () => { + expect(directive).toBeTruthy(); + }); + + describe('should toggle', () => { + it('should call hide() if isExpanded is true', () => { + directive.isExpanded = true; + + directive.toggle(); + }); + + it('should call show() if isExpanded is false', () => { + directive.isExpanded = false; + + directive.toggle(); + }); + + + }); +}); \ No newline at end of file diff --git a/src/app/shared/directives/drop-down-toggle.directive.spec.ts b/src/app/shared/directives/drop-down-toggle.directive.spec.ts index b08d334..81b08c8 100644 --- a/src/app/shared/directives/drop-down-toggle.directive.spec.ts +++ b/src/app/shared/directives/drop-down-toggle.directive.spec.ts @@ -21,16 +21,26 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ +import { TestBed } from '@angular/core/testing'; +import { DropDownToggleDirective } from './drop-down-toggle.directive'; +import { ElementRef } from '@angular/core'; -/* tslint:disable:no-unused-variable */ -import {DropDownToggleDirective} from './drop-down-toggle.directive'; -import {ElementRef} from '@angular/core'; +describe('DropDownToggleDirective', () => { + let directive; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [DropDownToggleDirective] + }); + }); + beforeEach(() => { + directive = new DropDownToggleDirective(new ElementRef('')); + }); -describe('DropDownToggleDirective', () => { it('should create an instance', () => { - const directive = new DropDownToggleDirective(new ElementRef('')); - expect(directive).toBeTruthy(); + let el: HTMLElement; + directive.type = 'dropdown'; + expect(directive).toBeTruthy(); }); }); diff --git a/src/app/shared/directives/dropdown.spec.ts b/src/app/shared/directives/dropdown.spec.ts index 2dbebd2..1aedfa5 100644 --- a/src/app/shared/directives/dropdown.spec.ts +++ b/src/app/shared/directives/dropdown.spec.ts @@ -24,15 +24,22 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. /* tslint:disable:no-unused-variable */ -import {Dropdown} from './dropdown'; -import {ElementRef} from '@angular/core'; +import { Dropdown } from './dropdown'; +import { ElementRef } from '@angular/core'; describe('DropDown', () => { + let directive; + + beforeEach(() => { + directive = new Dropdown(new ElementRef('')); + }); it('should create an instance', () => { - const directive = new Dropdown(new ElementRef('')); expect(directive).toBeTruthy(); }); - + it('should test open method', () => { + let elementRef: ElementRef; + console.log(directive); + }); }); diff --git a/src/app/shared/directives/dropdownnotclosablezone.spec.ts b/src/app/shared/directives/dropdownnotclosablezone.spec.ts new file mode 100644 index 0000000..e397f83 --- /dev/null +++ b/src/app/shared/directives/dropdownnotclosablezone.spec.ts @@ -0,0 +1,52 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ECOMP is a trademark and service mark of AT&T Intellectual Property. +============LICENSE_END============================================ +*/ + +import { TestBed } from '@angular/core/testing'; +import { DropdownNotClosableZone } from './dropdownnotclosablezone'; +import { ElementRef } from '@angular/core'; + + +describe('DropdownNotClosableZone', () => { + let directive; + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [DropdownNotClosableZone] + }); + }); + + beforeEach(() => { + directive = new DropdownNotClosableZone(new ElementRef('')); + }); + + it('should create an instance', () => { + + expect(directive).toBeTruthy(); + }); + + it('should test contain method', () => { + let el: HTMLElement; + let dropdownNotClosabledZone = false; + + + }); +}); diff --git a/src/app/shared/directives/dropdownopen.spec.ts b/src/app/shared/directives/dropdownopen.spec.ts new file mode 100644 index 0000000..b7a7aa6 --- /dev/null +++ b/src/app/shared/directives/dropdownopen.spec.ts @@ -0,0 +1,51 @@ +import { DropdownOpen } from './dropdownopen'; +import { Dropdown } from './dropdown'; +import { ElementRef, Host, HostListener } from '@angular/core'; +import { async, TestBed, inject } from '@angular/core/testing'; + + +describe('DropdownOpen', () => { + let directive; + let dropdown = new Dropdown(new ElementRef('')); + + beforeEach(() => { + directive = new DropdownOpen(dropdown, new ElementRef('')); + }); + + it('should create an instance', () => { + expect(directive).toBeTruthy(); + }); + + describe('should validate on Host click event', () => { + it('should validate openDropdown method if activateOnFocus, openedByFocus are true', () => { + let event = new Event('click'); + let dispatchEvent = window.dispatchEvent(event); + dropdown.activateOnFocus = true; + directive.openedByFocus = true; + + directive.openDropdown(); + }); + + it('should validate openDropdown method if dropdown.isOpened(), dropdown.toggleClick false', () => { + }); + }); + + it('should validate on Host keydown event', () => { + let spy = spyOn(directive, 'openDropdown') + var event = new KeyboardEvent("keydown"); + + Object.defineProperty(event, "keyCode", {"value" : 40}) + + directive.dropdownKeydown(event); + + expect(spy).toHaveBeenCalled() + }); + + it('should validate on Host focus event', () => { + + dropdown.activateOnFocus = false; + + directive.onFocus(); + + }); +}); \ No newline at end of file diff --git a/src/app/shared/modules/tidy-table/order-by.pipe.spec.ts b/src/app/shared/modules/tidy-table/order-by.pipe.spec.ts index 82c57a1..5746fe9 100644 --- a/src/app/shared/modules/tidy-table/order-by.pipe.spec.ts +++ b/src/app/shared/modules/tidy-table/order-by.pipe.spec.ts @@ -20,10 +20,6 @@ limitations under the License. ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ - - -/* tslint:disable:no-unused-variable */ - import {OrderBy} from './order-by.pipe'; describe('OrderByPipe', () => { @@ -31,4 +27,36 @@ describe('OrderByPipe', () => { const pipe = new OrderBy(); expect(pipe).toBeTruthy(); }); + + it('ascending sorting', () => { + const pipe = new OrderBy(); + + let data =[ + {'vnf-type':'vnf1','vnfc-type':'vnfc1','artifact-name':'artf1'}, + {'vnf-type':'vnf2','vnfc-type':'vnfc2','artifact-name':'artf2'} + + ] + expect(pipe.transform(data,"vnf-type",true)[0]['vnf-type']).toBe('vnf1'); + + }); + it('descending sorting', () => { + const pipe = new OrderBy(); + + let data =[ + {'vnf-type':'vnf1','vnfc-type':'vnfc1','artifact-name':'artf1'}, + {'vnf-type':'vnf2','vnfc-type':'vnfc2','artifact-name':'artf2'} + + ] + expect(pipe.transform(data,"vnf-type",false)[0]['vnf-type']).toBe('vnf2'); + }); + it('descending sorting', () => { + const pipe = new OrderBy(); + + let data =[ + {'vnf-type':undefined,'vnfc-type':'vnfc1','artifact-name':'artf1'}, + {'vnf-type':'vnf2','vnfc-type':'vnfc2','artifact-name':'artf2'} + + ] + expect(pipe.transform(data,"vnf-type",false)[0]['vnf-type']).toBe('vnf2'); + }); }); diff --git a/src/app/shared/modules/tidy-table/table-filter.pipe.spec.ts b/src/app/shared/modules/tidy-table/table-filter.pipe.spec.ts index d8fe6c7..5d73a14 100644 --- a/src/app/shared/modules/tidy-table/table-filter.pipe.spec.ts +++ b/src/app/shared/modules/tidy-table/table-filter.pipe.spec.ts @@ -31,4 +31,15 @@ describe('TableFilterPipe', () => { const pipe = new TableFilterPipe(); expect(pipe).toBeTruthy(); }); + it('filter table based on input ', () => { + const pipe = new TableFilterPipe(); + + let data =[ + {'vnf-type':'vnf1','vnfc-type':'vnfc1','artifact-name':'artf1'}, + {'vnf-type':'vnf2','vnfc-type':'vnfc2','artifact-name':'artf2'} + + ] + let filter = ['vnf-type', 'vnfc-type', 'artifact-name']; + expect(pipe.transform(data,'vnf1',filter).length).toBe(1); + }); }); diff --git a/src/app/shared/pipes/vm-filtering.pipe.spec.ts b/src/app/shared/pipes/vm-filtering.pipe.spec.ts new file mode 100644 index 0000000..523abfb --- /dev/null +++ b/src/app/shared/pipes/vm-filtering.pipe.spec.ts @@ -0,0 +1,49 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ECOMP is a trademark and service mark of AT&T Intellectual Property. +============LICENSE_END============================================ */ +import {VmFilteringPipe} from './vm-filtering.pipe'; + +describe('VmFilteringPipe', () => { + it('create an instance', () => { + const pipe = new VmFilteringPipe(); + expect(pipe).toBeTruthy(); + }); + it('should return configscaleout values if template id matches',()=>{ + const pipe = new VmFilteringPipe(); + + let objArray = [ + {action:"Configure","template-id":2,"type":"con"}, + {action:"ConfigScaleout","template-id":1,"type":"conScale"} + ] + expect(pipe.transform(objArray,"ConfigScaleOut",1)[0].type).toBe("conScale") + + }); + it('should return configure calues',()=>{ + const pipe = new VmFilteringPipe(); + + let objArray = [ + {action:"Configure","template-id":2,"type":"con"}, + {action:"ConfigScaleout","template-id":1,"type":"conScale"} + ] + expect(pipe.transform(objArray,"ConfigScaleOut",2)[0].type).toBe("con") + + }); +}); diff --git a/src/app/shared/pipes/vm-filtering.pipe.ts b/src/app/shared/pipes/vm-filtering.pipe.ts new file mode 100644 index 0000000..c20397b --- /dev/null +++ b/src/app/shared/pipes/vm-filtering.pipe.ts @@ -0,0 +1,42 @@ +/* +============LICENSE_START========================================== +=================================================================== +Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. +=================================================================== + +Unless otherwise specified, all software contained herein is licensed +under the Apache License, Version 2.0 (the License); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ECOMP is a trademark and service mark of AT&T Intellectual Property. +============LICENSE_END============================================ */ +import {Pipe, PipeTransform} from '@angular/core'; + +@Pipe({name: 'vmFiltering', pure: false}) +export class VmFilteringPipe implements PipeTransform { + + transform(value: any, action: any, templateId): any { + + if (action == 'ConfigScaleOut') { + let x = value.filter(obj => { + //return value + return obj['template-id'] == templateId; + }); + + return x; + } else { + return value; + + } + } + +} diff --git a/src/app/shared/services/emitter.service.spec.ts b/src/app/shared/services/emitter.service.spec.ts index f12154f..6521311 100644 --- a/src/app/shared/services/emitter.service.spec.ts +++ b/src/app/shared/services/emitter.service.spec.ts @@ -21,9 +21,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ - -/* tslint:disable:no-unused-variable */ - import {inject, TestBed} from '@angular/core/testing'; import {EmitterService} from './emitter.service'; @@ -37,4 +34,10 @@ describe('EmitterService', () => { it('should ...', inject([EmitterService], (service: EmitterService) => { expect(service).toBeTruthy(); })); + + it('should test static get method', () => { + let id = 'login'; + + EmitterService.get(id); + }) }); diff --git a/src/app/shared/services/mapping-editor.service.ts b/src/app/shared/services/mapping-editor.service.ts index 00ef211..fe70722 100644 --- a/src/app/shared/services/mapping-editor.service.ts +++ b/src/app/shared/services/mapping-editor.service.ts @@ -39,7 +39,6 @@ export class MappingEditorService { paramContent: string = '{}'; KEY_EXPRESSION: string = '\\${\\(.+?\\)}';//new RegExp('${.+?}'); // \${.+?} - //SYNC_KEY_EXPRESSION: string = '\\${\\)}'; KEY_START: string = '${('; KEY_MID: string = ')=('; KEY_END: string = ')}'; @@ -89,19 +88,16 @@ export class MappingEditorService { changeNav(object) { this._navItem = object; - // this._observer.next(object); this.referenceNameObjects = object; } changeNavAppData(object) { this._navItem = object; - // this._observer.next(object); this.appDataObject = object; } changeNavDownloadData(object) { this._navItem = object; - // this._observer.next(object); this.downloadDataObject = object; } @@ -127,7 +123,7 @@ export class MappingEditorService { public setParamContent(paramContent: string): void { this.paramContent = paramContent; - // localStorage["paramContent"]=paramContent; + } public initialise(editor: any, editorContent: string, modal: any): void { @@ -144,15 +140,6 @@ export class MappingEditorService { public initialiseCommands(modal): void { - /* this.editor.commands.addCommand({ - name: 'annotateCommand', - bindKey: { win: 'ENTER', mac: 'ENTER' }, - exec: (editor: any) => { - this.handleAnnotation(modal); - } - });*/ - - this.editor.commands.addCommand({ name: 'keyCompletionCommand', bindKey: {win: 'Ctrl-s', mac: 'Command-s'}, @@ -165,7 +152,7 @@ export class MappingEditorService { name: 'autoAnnotateCommand', bindKey: {win: 'Ctrl-2', mac: 'Command-2'}, exec: (editor: any) => { - this.autoAnnotateDataForParams(this.fileType); + this.autoAnnotateDataForParams(); } }); @@ -200,9 +187,8 @@ export class MappingEditorService { return toAdd; } - public autoAnnotateDataForParams(fileType: any): boolean { + public autoAnnotateDataForParams(): boolean { this.paramContent = localStorage['paramsContent']; - //console.log("Param content=="+ this.paramContent) var mergeStatus: boolean = false; if (this.paramContent) { var paramJson: JSON = JSON.parse(this.paramContent); @@ -230,51 +216,6 @@ export class MappingEditorService { return mergeStatus; } - /* syncTemplateNames() { - if (this.paramContent != '{}') { - var paramJson: JSON = JSON.parse(this.paramContent); - for (var prop in paramJson) { - let value: string = paramJson[prop] - if (value) { - var occurances = this.editor.findAll(value, { regExp: false }); - var ranges = this.editor.getSelection().getAllRanges(); - if (ranges) { - for (var r = 0; r < ranges.length; r++) { - let selectedRange: any = ranges[r]; - let selectedWord: string = this.editor.session.getTextRange(selectedRange); - let prefixSuffixselectedWord: string = this.editor.session.getTextRange(this.getStartBeforeAfterSelection(selectedRange, 1, 1)); - if (selectedWord && this.checkApplied(selectedRange)) { - let replaceWord: any = this.KEY_START + selectedWord + this.KEY_MID + prop + this.KEY_END; - this.editor.session.replace(selectedRange, replaceWord); - } - } - } - } - } - for (var prop in paramJson) { - var occurances = this.editor.findAll(prop, { regExp: false }); - var ranges = this.editor.getSelection().getAllRanges(); - if (ranges) { - for (var r = 0; r < ranges.length; r++) { - let selectedRange: any = ranges[r]; - let selectedWord: string = this.editor.session.getTextRange(selectedRange); - if (selectedWord && this.checkApplied(selectedRange)) { - let replaceWord: any = '(' + paramJson[prop] + this.KEY_MID + selectedWord + ')'; - this.editor.session.replace(selectedRange, replaceWord); - } - } - } - else { - this.replaceNamesWithBlankValues(); - } - } - } - else { - this.replaceNamesWithBlankValues() - } - }*/ - - checkComments(selectedRange: any) { var tempStartColumn = selectedRange.start.column; var result = false; @@ -394,35 +335,14 @@ export class MappingEditorService { this.refreshEditor(); } - /* public handleAnnotation(modal): void { - let selectedWord: string = this.editor.session.getTextRange(this.editor.selectionRange); - this.setSelectedWord(selectedWord); - modal.open(); - - /* let selectedWord: string = this.editor.session.getTextRange(this.editor.selectionRange); - if (selectedWord) { - if (selectedWord.startsWith('${(')) { - var replaceWord = selectedWord.substring(3, selectedWord.indexOf(')=(')); - this.editor.session.replace(this.editor.session.selection.getRange(), replaceWord); - } else { - let mappingKey = this.getKeysForValues(selectedWord); - var replaceWord = '${(' + selectedWord + ')=()}'; - this.editor.session.replace(this.editor.session.selection.getRange(), replaceWord); - } - } - this.refreshEditor(); - }*/ - public checkMethodCall(modal): void { -//this.handleAnnotation(modal) + //this.handleAnnotation(modal) } public refreshEditor(): void { if (this.editor) { - // this.replaceNamesWithBlankValues(); var occurances = this.editor.findAll(this.KEY_EXPRESSION, {regExp: true}); - //console.log("Occurances from save" + occurances) var ranges = this.editor.getSelection().getAllRanges(); if (ranges) { this.refreshParams(ranges); @@ -435,8 +355,7 @@ export class MappingEditorService { } this.refreshMarker(); } - // console.log("Param data from refresh editor=="+this.paramData) - + } replaceNamesWithBlankValues() { @@ -446,23 +365,19 @@ export class MappingEditorService { if (ranges) { for (var r = 0; r < ranges.length; r++) { let selectedRange: any = ranges[r]; - // console.log("Selected range == " + selectedRange) let selectedWord: string = this.editor.session.getTextRange(selectedRange); let specialKeys = (selectedWord.substring(2, selectedWord.length - 1)).match(this.checkSpecialCharsReg); - // console.log("Selected word == " + selectedWord.length) - //if (!selectedWord.startsWith('<') || !selectedWord.startsWith('{')) { if (selectedWord && this.checkAppliedForNamesOnly(selectedRange) && !specialKeys) { let replaceWord: any = this.KEY_START + '' + this.KEY_MID + selectedWord.substring(2, selectedWord.length - 1) + this.KEY_END; this.editor.session.replace(selectedRange, replaceWord); } - // } + } } } } public refreshParams(ranges: any): void { - // console.log("This param content==="+ this.paramContent); var paramData = []; if (this.paramContent === undefined) this.paramContent = '{}'; if (this.editor && ranges) { @@ -470,17 +385,12 @@ export class MappingEditorService { this.hasErrorCode = false; for (var r = 0; r < ranges.length; r++) { let keyValue: string = this.editor.session.getTextRange(ranges[r]); - //console.log("keyValues==="+keyValue) if (keyValue && keyValue.startsWith(this.KEY_START) && keyValue.endsWith(this.KEY_END) && keyValue.includes(this.KEY_MID)) { let key: string = keyValue.substring(keyValue.indexOf(this.KEY_MID) + this.KEY_MID_LENGTH, keyValue.indexOf(this.KEY_END)); let value: string = keyValue.substring(this.KEY_START_LENGTH, keyValue.indexOf(this.KEY_MID)); let specialKeys = key.match(this.checkSpecialCharsReg); - //console.log("Special keys=="+specialKeys) - //console.log("Keys=="+key+",values=="+value); if (specialKeys && specialKeys.length) { - // this.paramData = []; - // this.hasErrorCode = true; - // break; + } else { if (this.fromScreen === 'TemplateScreen') { if (key) { @@ -506,7 +416,6 @@ export class MappingEditorService { } } } - // console.log("Param data=="+ JSON.stringify(paramData)) this.paramData = paramData; this.paramContent = JSON.stringify(paramJson); diff --git a/src/app/shared/services/utilityService/utility.service.spec.ts b/src/app/shared/services/utilityService/utility.service.spec.ts index c11927a..85b4818 100644 --- a/src/app/shared/services/utilityService/utility.service.spec.ts +++ b/src/app/shared/services/utilityService/utility.service.spec.ts @@ -21,9 +21,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ - -/* tslint:disable:no-unused-variable */ - import {inject, TestBed} from '@angular/core/testing'; import {UtilityService} from './utility.service'; import {NotificationsService} from 'angular2-notifications'; @@ -39,11 +36,16 @@ describe('UtilityService', () => { expect(service).toBeTruthy(); })); + it('should generate random id', inject([UtilityService],(service: UtilityService) => { + let ret = service.randomId(); + + expect(ret).not.toBeNull(); + })); it('should apply slashes for a string...', inject([UtilityService], (service: UtilityService) => { - let text = {'vnf-host-ip-address': '135.21.166.36'}; + let text = {'vnf-host-ip-address': 'testidaddress'}; - expect(service.appendSlashes(JSON.stringify(text))).toEqual('{\\"vnf-host-ip-address\\":\\"135.21.166.36\\"}'); + expect(service.appendSlashes(JSON.stringify(text))).toEqual('{\\"vnf-host-ip-address\\":\\"testidaddress\\"}'); })); diff --git a/src/app/test/test.component.html b/src/app/test/test.component.html index ad6ff7f..3519007 100644 --- a/src/app/test/test.component.html +++ b/src/app/test/test.component.html @@ -32,16 +32,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. -
@@ -54,11 +44,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
@@ -113,14 +98,9 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
- - -                    - - - +
@@ -130,8 +110,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
-          - diff --git a/src/app/test/test.component.spec.ts b/src/app/test/test.component.spec.ts index 8d96554..e07ff93 100644 --- a/src/app/test/test.component.spec.ts +++ b/src/app/test/test.component.spec.ts @@ -21,9 +21,6 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. ============LICENSE_END============================================ */ -/* tslint:disable:no-unused-variable */ - -// Modules import { async, ComponentFixture, TestBed,inject } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { DebugElement } from '@angular/core'; @@ -31,23 +28,32 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterTestingModule } from '@angular/router/testing'; import { SimpleNotificationsModule } from 'angular2-notifications'; import { Http, Response, Headers, RequestOptions, HttpModule } from '@angular/http'; +import { Observable } from 'rxjs/Observable'; +import { Subscription } from 'rxjs/Subscription'; +import 'rxjs/add/observable/from'; +import 'rxjs/add/observable/empty'; +import 'rxjs/add/observable/throw'; -// Component import { TestComponent } from './test.component'; - -// Services import { NotificationService } from '../shared/services/notification.service'; import { ParamShareService } from '.././shared/services/paramShare.service'; import { MappingEditorService } from '../shared/services/mapping-editor.service'; import { HttpUtilService } from '../shared/services/httpUtil/http-util.service'; import { UtilityService } from '../shared/services/utilityService/utility.service'; +import { environment } from '../.././environments/environment'; import { NgProgress } from 'ngx-progressbar'; -import {NgProgressModule} from 'ngx-progressbar'; +import { NgProgressModule } from 'ngx-progressbar'; + +class MockService { + doStuff() { + return this; + } +} describe( 'TestComponent', () => { let component: TestComponent; let fixture: ComponentFixture; - + let http = new MockService(); beforeEach(async(() => { TestBed.configureTestingModule({ @@ -60,12 +66,13 @@ describe( 'TestComponent', () => { NgProgressModule ], providers: [ - NotificationService, + NotificationService, ParamShareService, MappingEditorService, HttpUtilService, UtilityService, - NgProgress + NgProgress, + {provide: Http, useValue: http} ] }) .compileComponents(); @@ -77,82 +84,300 @@ describe( 'TestComponent', () => { fixture.detectChanges(); }); - it( 'should create', () => { - expect(component).toBeTruthy(); - }); + it('should ...', inject([HttpUtilService], (service: HttpUtilService) => { + let spy = spyOn(service, 'post').and.returnValue(Observable.empty()); + fixture.detectChanges(); // onInit() - // it('test', () => { - // expect(2).toEqual(1) - // }); + component.pollTestStatus(); + + expect(service).toBeTruthy(); + expect(spy).toHaveBeenCalled(); + expect(spy.calls.any()).toBe(true, 'test'); + })); + + // Test download Method + describe('Test download Method', () => { + it('Should have download method', () => { + expect(component.download).toBeDefined(); + }); + + it('test if apiRequest if true', inject( [SimpleNotificationsModule], (service: SimpleNotificationsModule) => { + component.apiRequest = '{"input":{"common-header":{"timestamp":"2018-03-05T07:41:14.329Z","api-ver":"2.00","originator-id":"CDT","request-id":"1520235674330","sub-request-id":"1520235674330","flags":{"mode":"NORMAL","force":"TRUE","ttl":3600}},"action":"ConfigModify","action-identifiers":{"vnf-id":"testVnf","vserver-id":"test"},"payload":""'; + component.apiResponse = ''; + component.action = 'ConfigModify'; + component.actionIdentifiers['vnf-id'] = 'testVnf'; + let fileName = 'test_' + component.action + '_' + component.actionIdentifiers['vnf-id'] + '_request'; + let theJSON = component.apiRequest; + var blob = new Blob([theJSON], { + type: 'text/json' + }); + + component.download(); + expect(service instanceof SimpleNotificationsModule).toBeTruthy(); + expect(component.apiRequest).not.toBe(''); + expect(fileName).not.toBe(''); + expect(fileName).not.toBeNull(); + expect(fileName).toContain('test_'); + expect(fileName).toContain('_request'); + expect(typeof (blob)).toBe('object'); - // it('test preparfilename', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => { - // // fixture = TestBed.createComponent(TestComponent); - // // component = fixture.componentInstance; - // mappingEditorService.latestAction=undefined + })); - // expect(component.prepareFileName()).toBe(undefined); - // })); + it('test method if apiResponse is true', () => { + component.apiResponse = '{"input":{"common-header":{"timestamp":"2018-03-05T07:41:14.329Z","api-ver":"2.00","originator-id":"CDT","request-id":"1520235674330","sub-request-id":"1520235674330","flags":{"mode":"NORMAL","force":"TRUE","ttl":3600}},"action":"ConfigModify","action-identifiers":{"vnf-id":"testvnf","vserver-id":"test"},"payload":""'; + component.apiRequest = ''; + component.action = 'ConfigModify'; + component.actionIdentifiers['vnf-id'] = 'testvnf'; + let fileName = 'test_' + component.action + '_' + component.actionIdentifiers['vnf-id'] + '_response'; + let theJSON = component.apiRequest; + var blob = new Blob([theJSON], { + type: 'text/json' + }); + component.download(); - it('Should have download method', () => { - expect(component.download).toBeDefined(); + expect(component.apiResponse).not.toBe(''); + expect(fileName).not.toBe(''); + expect(fileName).not.toBeNull(); + expect(fileName).toContain('test_'); + expect(fileName).toContain('_response'); + expect(typeof (blob)).toBe('object'); + + }); }); // Test abortTest Method - it('Should have abortTest method', () => { - expect(component.abortTest).toBeDefined(); + describe('Test abortTest Method', () => { + it('Should have abortTest method', () => { + expect(component.abortTest).toBeDefined(); + }); + + it('Test abortTest Method', () => { + const temp = component.abortTest(); + expect(component.enableBrowse).toBeTruthy(); + expect(component.enableTestButton).toBeTruthy(); + expect(component.enablePollButton).toBeTruthy(); + }); }); - it('Test abortTest Method', () => { - const temp = component.abortTest(); - expect(component.enableBrowse).toBeTruthy(); - expect(component.enableTestButton).toBeTruthy(); + // Test excelBrowseOption Method + describe('Test excelBrowseOption Method', () => { + it('test excelBrowseOption', () => { + spyOn(component, 'excelBrowseOption'); + let button = fixture.debugElement.query(By.css('#excelInputFile ~ button.browse')); + button.nativeElement.click(); + expect(component.excelBrowseOption).toHaveBeenCalled() + }); }); - it('Should have excelBrowseOption method', () => { - expect(component.excelBrowseOption).toBeDefined(); + // Test Upload Method + describe('Test Upload Method', () => { + it('Should have upload method', () => { + expect(component.upload).toBeDefined(); + }); + + it('should execute if file extension is XLS, XLSX', () => { + let fileExtension = 'XLS'; + let event = { isTrusted: true, type: "change", target: {files: [{name:'foo.XLS', size: 500001}]} } + let reader = new FileReader(); + spyOn(reader, 'onload'); + + component.upload(event); + + expect(reader instanceof FileReader).toBeTruthy(); + expect(reader.onload).toHaveBeenCalled(); + expect(component.enableTestButton).toBeTruthy(); + console.log('aaa',component.enableTestButton, component.uploadFileName); + }); + + it('should return an error if file extension is not XLS, XLSX', () => { + spyOn(component, 'upload'); + let ele = fixture.debugElement.query(By.css('#filesparam')); + const target = { files: ['']}; + component.uploadFileName = 'test.doc'; + let fileExtension = 'DOC'; + component.upload('change'); + + expect(target.files.length).toEqual(1) + expect(fileExtension).not.toBe('XLS'); + expect(fileExtension).not.toBe('XLSX'); + }); }); - it('Should have upload method', () => { - expect(component.upload).toBeDefined(); + // Test processUploadedFile Method + describe('Test processUploadedFile Method', () => { + it('should return valid payload', () => { + let data = [ + {"TagName":"action","Value":"ConfigModify"}, + {"List Name":"action-identifiers","TagName":"vserver-id","Value":"test"}, + {"List Name":"payload","List Name_1":"request-parameters","TagName":"vnf-name","Value":"testVnf"}, + {"List Name":"payload","List Name_1":"request-parameters","List Name_2":"[vm]","List Name_3":"vnfc","TagName":"vnfc-name","Value":"testVnfcName"}, + {"List Name":"payload","List Name_1":"configuration-parameters","TagName":"testConfigParam","Value":"testConfigValue"} + ] + + let payload = component.processUploadedFile(data); + }); }); - it('Should have constructTestPayload method', () => { - expect(component.constructTestPayload).toBeDefined(); + // Test uploadedFileResult Method + describe('Test uploadedFileResult', () => { + it('should return success message', inject([SimpleNotificationsModule],(service: SimpleNotificationsModule) => { + component.action = 'ConfigModify'; + component.actionIdentifiers['vnf-id'] = 'testvnf'; + + component.uploadedFileResult(); + + expect(service instanceof SimpleNotificationsModule).toBeTruthy(); + })); + + it('should return error message', inject([SimpleNotificationsModule], (service: SimpleNotificationsModule) => { + component.action = ''; + component.actionIdentifiers['vnf-id'] = ''; + + component.uploadedFileResult(); + + expect(service instanceof SimpleNotificationsModule).toBeTruthy(); + })); }); - it('Should have constructRequest method', () => { - expect(component.constructRequest).toBeDefined(); + // Test constructTestPayload Method + describe('Test constructTestPayload Method', () => { + //3rd , 4th columnd, tag name , tag value + it('Should have constructTestPayload method', () => { + expect(component.constructTestPayload).toBeDefined(); + }); + + it('test if listName2, listName3 are undefined', () => { + let temp = component.constructTestPayload(undefined, undefined, 'vnfc-type', 'testvnfc'); + expect(component.subPayload['vnfc-type']).toEqual('testvnfc') + }); + + it('test if lastName2 is not undefined', () => { + let temp = component.constructTestPayload(['vm'], undefined, 'vnfc-type', 'testvnfc'); + expect(typeof(component.vmJson)).toEqual('object'); + expect(typeof(component.vnfcJson)).toEqual('object'); + expect(component.vmJson['vnfc-type']).toBe('testvnfc'); + expect(component.flag).toBe(0); + }); + + it('test if lastNmae2, lastName3 are not undefined', () => { + let temp = component.constructTestPayload(['vm'], 'vnfc', 'vnfc-type', 'testvnfc'); + expect(component.vnfcJson['vnfc-type']).toEqual('testvnfc'); + expect(component.vmJson['vnfc']['vnfc-type']).toEqual('testvnfc'); + expect(component.flag).toBe(1); + }) }); - it('Should have testVnf method', () => { - expect(component.testVnf).toBeDefined(); + // Test constructRequest Method + describe('Test constructRequest Method', () => { + it('Should have constructRequest method', () => { + expect(component.constructRequest).toBeDefined(); + }); + + it('test method', () => { + let temp = component.constructRequest(); + }); }); - it('Should have pollTestStatus method', () => { - expect(component.pollTestStatus).toBeDefined(); + // Test testVnf Method + describe('Test testVnf Method', () => { + it('Should have testVnf method', () => { + expect(component.testVnf).toBeDefined(); + }); + + it('should return response on success', inject([HttpUtilService, NgProgress], (httpUtilService: HttpUtilService, ngProgress: NgProgress) => { + let spy = spyOn(httpUtilService, 'post').and.callFake( ({}) => { + return Observable.empty(); + }); + component.action = 'ConfigModify'; + + component.testVnf(); + expect(component.enableBrowse).toBeFalsy() + expect(component.enableTestButton).toBeFalsy(); + expect(component.enablePollButton).toBeFalsy(); + expect(spy).toHaveBeenCalled(); + })); + + it('should return an error if fails', inject([HttpUtilService],( httpUtilService: HttpUtilService) => { + let error = 'Error in connecting to APPC Server'; + let spy = spyOn(httpUtilService, 'post').and.returnValue(Observable.throw(error)); + component.action = 'ConfigModify'; + + component.testVnf(); + + expect(spy).toHaveBeenCalled(); + expect(component.enableBrowse).toBeTruthy(); + expect(component.enableTestButton).toBeTruthy(); + expect(component.enablePollButton).toBeTruthy(); + expect(component.enableCounterDiv).toBeFalsy(); + })); + + it('test setTimeout', inject([NgProgress], (ngProgress: NgProgress) => { + let spy = spyOn(ngProgress, 'done'); + component.action = 'ConfigModify'; + + component.testVnf(); + + })); }); + // Test pollTestStatus Method + describe('Test pollTestStatus Method', () => { + it('Should have pollTestStatus method', () => { + expect(component.pollTestStatus).toBeDefined(); + }); - // Test getUrlEndPoint Method - it('Should have getUrlEndPoint method', () => { - expect(component.getUrlEndPoint).toBeDefined(); + it('test method', () => { + let temp = component.pollTestStatus(); + let requestId = new Date().getTime().toString(); + let actionIdentifiers = 123456; + }); + + it('should call fake server', inject([HttpUtilService], (httpUtilService: HttpUtilService) => { + let spy = spyOn(httpUtilService, 'post').and.callFake(({}) => { + return Observable.empty(); + }); + + component.pollTestStatus(); + + expect(spy).toHaveBeenCalled(); + })); + + it('should return an error if fails', inject([HttpUtilService], (httpUtilService: HttpUtilService) => { + let error = 'Error Connecting to APPC server'; + let spy = spyOn(httpUtilService, 'post').and.callFake( ({}) => { + return Observable.throw(error); + }); + component.requestId = null; + component.actionIdentifiers['vnf-id'] = false; + + component.pollTestStatus(); + + expect(spy).toHaveBeenCalled(); + })); }); + + // Test getUrlEndPoint Method + describe('Test getUrlEndPoint Method', () => { + it('Should have getUrlEndPoint method', () => { + expect(component.getUrlEndPoint).toBeDefined(); + }); - it('getUrlEndPoint Should return value', () => { - expect(component.getUrlEndPoint('configmodify')).toEqual('config-modify'); - expect(component.getUrlEndPoint('configbackup')).toEqual('config-backup'); - expect(component.getUrlEndPoint('configrestore')).toEqual('config-restore'); - expect(component.getUrlEndPoint('healthcheck')).toEqual('health-check'); - expect(component.getUrlEndPoint('quiescetraffic')).toEqual('quiesce-traffic'); - expect(component.getUrlEndPoint('resumetraffic')).toEqual('resume-traffic'); - expect(component.getUrlEndPoint('startapplication')).toEqual('start-application'); - expect(component.getUrlEndPoint('stopapplication')).toEqual('stop-application'); - expect(component.getUrlEndPoint('upgradebackout')).toEqual('upgrade-backout'); - expect(component.getUrlEndPoint('upgradepostcheck')).toEqual('upgrade-post-check'); - expect(component.getUrlEndPoint('upgradeprecheck')).toEqual('upgrade-pre-check'); - expect(component.getUrlEndPoint('upgradesoftware')).toEqual('upgrade-software'); - expect(component.getUrlEndPoint('DeFaultCASE')).toEqual('defaultcase'); + it('getUrlEndPoint Should return value', () => { + expect(component.getUrlEndPoint('configmodify')).toEqual('config-modify'); + expect(component.getUrlEndPoint('configbackup')).toEqual('config-backup'); + expect(component.getUrlEndPoint('configrestore')).toEqual('config-restore'); + expect(component.getUrlEndPoint('healthcheck')).toEqual('health-check'); + expect(component.getUrlEndPoint('quiescetraffic')).toEqual('quiesce-traffic'); + expect(component.getUrlEndPoint('resumetraffic')).toEqual('resume-traffic'); + expect(component.getUrlEndPoint('startapplication')).toEqual('start-application'); + expect(component.getUrlEndPoint('stopapplication')).toEqual('stop-application'); + expect(component.getUrlEndPoint('upgradebackout')).toEqual('upgrade-backout'); + expect(component.getUrlEndPoint('upgradepostcheck')).toEqual('upgrade-post-check'); + expect(component.getUrlEndPoint('upgradeprecheck')).toEqual('upgrade-pre-check'); + expect(component.getUrlEndPoint('upgradesoftware')).toEqual('upgrade-software'); + expect(component.getUrlEndPoint('DeFaultCASE')).toEqual('defaultcase'); + }); }); -}) +}) \ No newline at end of file diff --git a/src/app/test/test.component.ts b/src/app/test/test.component.ts index 1874904..411b057 100644 --- a/src/app/test/test.component.ts +++ b/src/app/test/test.component.ts @@ -101,6 +101,7 @@ export class TestComponent implements OnInit { public enablePollButton: boolean = true; public pollCounter = 0; public enableCounterDiv: boolean = false; + public enableDownload: boolean = false; constructor(private location: Location, private activeRoutes: ActivatedRoute, private notificationService: NotificationService, private nService: NotificationsService, private router: Router, private paramShareService: ParamShareService, private mappingEditorService: MappingEditorService, private httpUtil: HttpUtilService, private utiltiy: UtilityService, private ngProgress: NgProgress) { @@ -112,20 +113,6 @@ export class TestComponent implements OnInit { } - prepareFileName(): any { - let fileNameObject: any = this.mappingEditorService.latestAction; - return fileNameObject; - } - - /*public download() { - let stringData: any; - stringData = JSON.stringify(this.paramShareService.getSessionParamData()); - let paramsKeyValueFromEditor: JSON; - paramsKeyValueFromEditor = JSON.parse(stringData); - let fileName = 'param_' + this.action + '_' + this.type + '_' + "0.0.1" + 'V'; - this.JSONToCSVConvertor([paramsKeyValueFromEditor], fileName, true); - - }*/ public download() { if (this.apiRequest) { @@ -166,40 +153,6 @@ export class TestComponent implements OnInit { } - /*JSONToCSVConvertor(JSONData, fileName, ShowLabel) { - //If JSONData is not an object then JSON.parse will parse the JSON string in an Object - var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData; - - var CSV = ''; - - //This condition will generate the Label/Header - if (ShowLabel) { - var testRow = ""; - for (var index in arrData[0]) { - - CSV += arrData[0][index].name + '\t' + arrData[0][index].value + '\t' + arrData[0][index].source + '\r\n'; - } - } - - if (CSV == '') { - alert("Invalid data"); - return; - } - - //Initialize file format you want csv or xls - var uri = 'data:application/vnd.ms-excel,' + encodeURI(CSV); - - var link = document.createElement("a"); - link.href = uri; - - link.download = fileName + ".xls"; - - //this part will append the anchor tag and remove it after automatic click - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - }*/ - excelBrowseOption() { $('#excelInputFile').trigger('click'); } @@ -209,7 +162,7 @@ export class TestComponent implements OnInit { /* wire up file reader */ $('#filesparam').trigger('click'); const target: DataTransfer = (evt.target); - + this.pollCounter = 0; this.uploadFileName = evt.target.files[0].name; var fileExtension = this.uploadFileName.substr(this.uploadFileName.lastIndexOf('.') + 1); @@ -241,9 +194,9 @@ export class TestComponent implements OnInit { this.showStatusResponseDiv = false; this.errorResponse = ''; this.statusResponse = ''; - + this.enableDownload=true; let arrData = ((XLSX.utils.sheet_to_json(ws, { blankrows: false }))); - this.nService.success('Success', 'SpreadSheet uploaded successfully'); + console.log('Array data ==' + arrData[0]); @@ -254,53 +207,84 @@ export class TestComponent implements OnInit { this.payload = {}; this.oldListName1 = ''; this.actionIdentifiers = {}; - for (var i = 0; i < arrData.length; i++) { - var element = arrData[i]; - if (element['TagName'] === 'action') { - this.action = element['Value']; - } - if (element['List Name'] === 'action-identifiers') { - this.vnfId = element['Value']; - var key = element['TagName']; - var value = element['Value']; - if (key && value) { - this.actionIdentifiers[key] = value; + // Refactor + this.payload = this.processUploadedFile(arrData); + this.uploadedFileResult(); + }; - } - } + reader.readAsBinaryString(target.files[0]); + - if (element['List Name'] === 'payload') { - var listName1 = element['List Name_1']; - var listName2 = element['List Name_2']; - var listName3 = element['List Name_3']; - var key = element['TagName']; - var value = element['Value']; - if (listName1) { - if (this.oldListName1 == '' || (listName1 === this.oldListName1)) { - this.constructTestPayload(listName2, listName3, key, value); - this.payload[listName1] = this.subPayload; - } - else { - this.subPayload = {}; - this.constructTestPayload(listName2, listName3, key, value); - this.payload[listName1] = this.subPayload; - } - this.oldListName1 = listName1; - } - else { - this.payload[key] = value; - } + } + else { + this.nService.error('Error', 'Incorrect spreadsheet uploaded'); + this.flag = 1; + this.oldListName1 = ''; + this.vmJson = {}; + this.vnfcJson = {}; + this.subPayload = {}; + this.vmPayload = []; + this.payload = {}; + this.action = ''; + this.actionIdentifiers = {}; + this.apiRequest = ''; + this.apiResponse = ''; + this.enableCounterDiv = false; + this.enableAbort = false; + this.enableTestButton = false; + this.enableDownload = false; + } + } + +processUploadedFile(arrData) { + let tempPayload = {}; + for (var i = 0; i < arrData.length; i++) { + var element = arrData[i]; + if (element['TagName'] === 'action') { + this.action = element['Value']; + } + if (element['List Name'] === 'action-identifiers') { + this.vnfId = element['Value']; + var key = element['TagName']; + var value = element['Value']; + if (key && value) { + this.actionIdentifiers[key] = value; + + } + } + + if (element['List Name'] === 'payload') { + var listName1 = element['List Name_1']; + var listName2 = element['List Name_2']; + var listName3 = element['List Name_3']; + var key = element['TagName']; + var value = element['Value']; + if (listName1) { + if (this.oldListName1 == '' || (listName1 === this.oldListName1)) { + this.constructTestPayload(listName2, listName3, key, value); + tempPayload[listName1] = this.subPayload; + } + else { + this.subPayload = {}; + this.constructTestPayload(listName2, listName3, key, value); + tempPayload[listName1] = this.subPayload; } + this.oldListName1 = listName1; } + else { + tempPayload[key] = value; + } + } + } - //console.log("VM JSON===" + JSON.stringify(this.vmPayload)) - // console.log('VM payload===' + JSON.stringify(this.payload)); - }; + return tempPayload; + } - reader.readAsBinaryString(target.files[0]); + uploadedFileResult() { + if (this.action && this.actionIdentifiers['vnf-id']) { + this.nService.success('Success', 'SpreadSheet uploaded successfully'); } else { - this.nService.error('Error', 'Incorrect spreadsheet uploaded'); this.flag = 1; this.oldListName1 = ''; this.vmJson = {}; @@ -313,9 +297,15 @@ export class TestComponent implements OnInit { this.apiRequest = ''; this.apiResponse = ''; this.enableCounterDiv = false; + this.enableAbort = false; + this.enableTestButton = false; + this.enableDownload = false; + this.nService.error("Error", "Please check the contents of the file uploaded") } } + + constructTestPayload(listName2, listName3, key, value) { if (listName2 == undefined && listName3 == undefined) { this.subPayload[key] = value; @@ -373,9 +363,6 @@ export class TestComponent implements OnInit { } testVnf() { - //let payload = '{"request-parameters":{"vnf-host-ip-address":"' + this.host + '"},"configuration-parameters":"' + JSON.stringify(this.formattedNameValuePairs) + '"}"'; - //let payload = '{"request-parameters":{"host-ip-address:"' + this.host + '",port-number:"'+port+'"}}'; - this.enableBrowse = false; this.enableTestButton = false; this.enablePollButton = false; @@ -412,9 +399,7 @@ export class TestComponent implements OnInit { pollTestStatus() { if (this.requestId && this.actionIdentifiers['vnf-id']) { - // console.log("payload==" + JSON.stringify(this.payload)) let timeStamp = new Date().toISOString(); - // console.log("timestamp==" + timeStamp) let reqId = new Date().getTime().toString(); let data = { 'input': { @@ -435,20 +420,17 @@ export class TestComponent implements OnInit { 'payload': '{"request-id":' + this.requestId + '}' } }; - //this.ngProgress.start(); this.httpUtil.post( { url: environment.checkTestStatus, data: data }) .subscribe(resp => { - // console.log('Response==' + JSON.stringify(resp)); this.statusResponse = JSON.stringify(resp); var status = '' var statusReason = '' this.enableCounterDiv = true; this.pollCounter++; - //this.statusResponse=JSON.parse(this.statusResponse) if (resp.output) var timeStamp = resp.output['common-header'].timestamp; if (resp.output.payload) { var payload = resp.output.payload.replace(/\\/g, "") @@ -466,7 +448,7 @@ export class TestComponent implements OnInit { this.outputTimeStamp = timeStamp; this.status = status; this.statusReason = statusReason; - if (status.toUpperCase() === 'SUCCESS') { + if (status.toUpperCase() === 'SUCCESS' || status.toUpperCase() === 'SUCCESSFUL') { this.subscribe.unsubscribe(); this.enablePollButton = true; } @@ -479,7 +461,7 @@ export class TestComponent implements OnInit { this.showStatusResponseDiv = false; } - // this.ngProgress.done(); + }, error => { this.statusResponse = null; @@ -493,9 +475,7 @@ export class TestComponent implements OnInit { else { this.nService.error("Error", "Please enter vnf Id & request Id"); } - // setTimeout(() => { - // this.ngProgress.done(); - // }, 3500); + } getUrlEndPoint(action) { diff --git a/src/app/vnfs/build-artifacts/parameter-definitions/parameter-definition.service.spec.ts b/src/app/vnfs/build-artifacts/parameter-definitions/parameter-definition.service.spec.ts index 8a9c112..a629bcf 100644 --- a/src/app/vnfs/build-artifacts/parameter-definitions/parameter-definition.service.spec.ts +++ b/src/app/vnfs/build-artifacts/parameter-definitions/parameter-definition.service.spec.ts @@ -100,15 +100,35 @@ describe('ParameterDefinitionService', () => { })); - // it('processKeyFile...', inject([ParameterDefinitionService, ParamShareService], (service: ParameterDefinitionService, paramShareService: ParamShareService)=> { - // let keyFile = "PARAMVALUE|SOURCE|RULETYPE|KEY1|VALUE1|KEY2|VALUE2|KEY3|VALUE3\nvalue1|INSTAR|interface_ip_address|UniqueKeyName1|addressfqdn123|UniqueKeyValue|m001ssc001p1n001v001|FieldKeyName|ipaddress_v4\nvalue2|INSTAR|interface_ip_address|UniqueKeyName2|addressfqdnAsgar1|UniqueKeyValue|m001ssc001p1n001v002|FieldKeyName|ipaddress_v4"; - // let expectedPD = [{"name":"name1","type":null,"description":null,"required":null,"default":null,"source":"Manual","rule-type":null, - // "request-keys":[{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"response-keys":[{"key-name":null - // ,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"ruleTypeValues":[null]}]; - // localStorage['paramsContent'] = "{ \"name1\":\"value1\",\"name2\":\"value2\"}"; - // paramShareService.setSessionParamData(expectedPD) - // expect(service.processKeyFile("testfile.txt", keyFile)).toEqual(expectedPD); - - // })); + it('processKeyFile...', inject([ParameterDefinitionService, ParamShareService], (service: ParameterDefinitionService, paramShareService: ParamShareService)=> { + let keyFile = "PARAMVALUE|SOURCE|RULETYPE|KEY1|VALUE1|KEY2|VALUE2|KEY3|VALUE3\nvalue1|INSTAR|interface_ip_address|UniqueKeyName1|addressfqdn123|UniqueKeyValue|m001ssc001p1n001v001|FieldKeyName|ipaddress_v4\nvalue2|INSTAR|interface_ip_address|UniqueKeyName2|addressfqdnAsgar1|UniqueKeyValue|m001ssc001p1n001v002|FieldKeyName|ipaddress_v4"; + let expectedPD = [{"name":"name1","type":null,"description":null,"required":null,"default":null,"source":"Manual","rule-type":null, + "request-keys":[{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"response-keys":[{"key-name":null + ,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"ruleTypeValues":[null]}]; + localStorage['paramsContent'] = "{ \"name1\":\"value1\",\"name2\":\"value2\"}"; + paramShareService.setSessionParamData(expectedPD) + expect(service.processKeyFile("testfile.txt", keyFile)).toEqual(expectedPD); + + })); + + it('destroy...', inject([ParameterDefinitionService, ParamShareService, MappingEditorService], (service: ParameterDefinitionService, paramShareService: ParamShareService, mappingEditorService: MappingEditorService)=> { + mappingEditorService.referenceNameObjects = {"action":"Configure","action-level":"vnf","scope":{"vnf-type":"ticktack","vnfc-type":""},"template":"Y","vm":[],"device-protocol":"CHEF","user-name":"","port-number":"","artifact-list":[{"artifact-name":"template_Configure_ticktack_0.0.1V.json","artifact-type":"config_template"},{"artifact-name":"pd_Configure_ticktack_0.0.1V.yaml","artifact-type":"parameter_definitions"}],"scopeType":"vnf-type"}; + + let displayParamObjects = [{"name":"name1","type":null,"description":null,"required":null,"default":null,"source":"Manual","rule-type":null, + "request-keys":[{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"response-keys":[{"key-name":null + ,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null},{"key-name":null,"key-value":null}],"ruleTypeValues":[null]}]; + localStorage['paramsContent'] = "{ \"name1\":\"value1\",\"name2\":\"value2\"}"; + + let expectedPDdata = "---\nkind: \"Property Definition\"\nversion: V1\nvnf-parameter-list:\n- name: name1\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n"; + let expectedAppData = {"input":{"design-request":{"request-id":"115599612197","action":"uploadArtifact","payload":{"userID": "test Usr","vnf-type" : "undefined","action" : "undefined","artifact-name" : "undefined","artifact-type" : "APPC-CONFIG","artifact-version" : "0.0.1","artifact-contents" : "---\nkind: \"Property Definition\"\nversion: V1\nvnf-parameter-list:\n- name: name1\n type: null\n description: null\n required: null\n default: null\n source: Manual\n rule-type: null\n request-keys: null\n response-keys: null\n"}}}}; + service.appDataObject = {pd:""}; + service.downloadDataObject = {pd:{pdData:"", pdFileName:""}}; + service.destroy(displayParamObjects); + expect(mappingEditorService.downloadDataObject.pd.pdData).toEqual(expectedPDdata); + //expect(mappingEditorService.appDataObject.pd).toEqual(expectedAppData); + + + })); + }); diff --git a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.html b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.html index ed0fbd3..cb02db9 100644 --- a/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.html +++ b/src/app/vnfs/build-artifacts/parameter-definitions/parameter.component.html @@ -23,8 +23,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. --> - +
@@ -43,7 +42,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
- +
@@ -55,18 +54,15 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
- -
@@ -148,8 +144,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. -