2 ============LICENSE_START==========================================
 
   3 ===================================================================
 
   4 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
 
   6 Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
 
   7 ===================================================================
 
   9 Unless otherwise specified, all software contained herein is licensed
 
  10 under the Apache License, Version 2.0 (the License);
 
  11 you may not use this software except in compliance with the License.
 
  12 You may obtain a copy of the License at
 
  14     http://www.apache.org/licenses/LICENSE-2.0
 
  16 Unless required by applicable law or agreed to in writing, software
 
  17 distributed under the License is distributed on an "AS IS" BASIS,
 
  18 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  19 See the License for the specific language governing permissions and
 
  20 limitations under the License.
 
  22 ============LICENSE_END============================================
 
  25 /* tslint:disable:no-unused-variable */
 
  26 import { async, ComponentFixture, TestBed, inject } from '@angular/core/testing';
 
  27 import { By, BrowserModule } from '@angular/platform-browser';
 
  28 import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
 
  29 import { Component, OnInit, ViewChild, Input } from '@angular/core';
 
  30 import { NgxSpinnerService } from 'ngx-spinner';
 
  31 import { HttpUtilService } from '../../../../shared/services/httpUtil/http-util.service';
 
  32 import { MappingEditorService } from '../../../../shared/services/mapping-editor.service';
 
  33 import { ArtifactRequest } from '../../../../shared/models/index';
 
  34 import { ActivatedRoute, Router } from "@angular/router";
 
  35 import { saveAs } from "file-saver";
 
  36 import { NotificationService } from '../../../../shared/services/notification.service';
 
  37 import { NotificationsService } from "angular2-notifications"
 
  38 import { ParamShareService } from '../../../../shared/services/paramShare.service';
 
  39 import { DialogService } from "ng2-bootstrap-modal";
 
  40 import { ConfirmComponent } from '../../../../shared/confirmModal/confirm.component';
 
  41 import { BuildDesignComponent } from '../../build-artifacts.component';
 
  42 import { environment } from '../../../../../environments/environment';
 
  43 import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal'
 
  44 import { FormsModule } from '@angular/forms';
 
  45 import { RouterTestingModule } from '@angular/router/testing';
 
  46 import { HomeComponent } from '../../../../home/home/home.component';
 
  47 import { LogoutComponent } from '../../../../shared/components/logout/logout.component';
 
  48 import { HelpComponent } from '../../../../shared/components/help/help/help.component';
 
  49 import { AboutUsComponent } from '../../../../about-us/aboutus.component';
 
  50 import { TestComponent } from '../../../../test/test.component';
 
  51 import { HttpModule } from '@angular/http';
 
  52 import { AceEditorComponent } from 'ng2-ace-editor';
 
  53 import { Ng2Bs3ModalModule } from 'ng2-bs3-modal/ng2-bs3-modal';
 
  54 import { SimpleNotificationsModule } from 'angular2-notifications';
 
  55 import { GoldenConfigurationComponent } from './template-configuration.component';
 
  56 import { NgProgress } from 'ngx-progressbar';
 
  57 import { BaseRequestOptions, Response, ResponseOptions, Http } from '@angular/http';
 
  58 import { MockBackend, MockConnection } from '@angular/http/testing';
 
  59 import { UtilityService } from '../../../../shared/services/utilityService/utility.service';
 
  61 describe('GoldenConfigurationComponent', () => {
 
  62   let component: GoldenConfigurationComponent;
 
  63   let fixture: ComponentFixture<GoldenConfigurationComponent>;
 
  64   let buildDesignComponent: BuildDesignComponent;
 
  65   let paramShareService: ParamShareService;
 
  66   let dialogService: DialogService;
 
  67   let notificationService: NotificationService;
 
  68   let httpUtil: HttpUtilService;
 
  69   let mappingEditorService: MappingEditorService;
 
  70   let activeRoutes: ActivatedRoute;
 
  72   let nService: NotificationsService
 
  76       component: HomeComponent
 
  79       loadChildren: '../../../../vnfs/vnfs.module#VnfsModule'
 
  82       component: TestComponent
 
  86       component: HelpComponent
 
  89       component: AboutUsComponent
 
  92       component: LogoutComponent
 
 101     TestBed.configureTestingModule({
 
 102       imports: [FormsModule, BrowserModule, RouterTestingModule.withRoutes(routes), HttpModule, Ng2Bs3ModalModule, SimpleNotificationsModule.forRoot()],
 
 103       declarations: [GoldenConfigurationComponent, HomeComponent, TestComponent, HelpComponent, AboutUsComponent, LogoutComponent, AceEditorComponent],
 
 104       providers: [BuildDesignComponent, NgProgress, ParamShareService, DialogService, NotificationService, NgxSpinnerService, MockBackend,
 
 105         BaseRequestOptions, UtilityService,
 
 108           useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
 
 109             return new Http(backend, defaultOptions);
 
 111           deps: [MockBackend, BaseRequestOptions],
 
 114         HttpUtilService, MappingEditorService, NotificationsService],
 
 115       schemas: [NO_ERRORS_SCHEMA],
 
 120   beforeEach(async(() => {
 
 121     TestBed.compileComponents()
 
 126   it('validate if uploaded file should be xml or json', () => {
 
 127     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 128     component = fixture.componentInstance;
 
 129     expect(component.validateUploadedFile('xls')).toBe(false);
 
 130     expect(component.validateUploadedFile('json')).toBe(true);
 
 131     expect(component.validateUploadedFile('xml')).toBe(true);
 
 135   it('validate initialisation of variables in ngOnit() function', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 136     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 137     component = fixture.componentInstance;
 
 138     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" }
 
 140     expect(component.ngOnInit());
 
 141     expect(component.ngAfterViewInit());
 
 142     expect(component.action).toEqual('Configure');
 
 143     expect(component.vnfType).toEqual('testVnf');
 
 144     expect(component.vnfcType).toEqual('');
 
 145     expect(component.protocol).toEqual('CHEF');
 
 147     expect(component.artifactName).toEqual('template_Configure_test_0.0.1V.json');
 
 149     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "testVnfc" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" }
 
 150     expect(component.ngOnInit());
 
 151     expect(component.vnfcType).toEqual('testVnfc');
 
 156   it('check if variables are empty when reference data object is empty', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 157     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 158     component = fixture.componentInstance;
 
 159     mappingEditorService.latestAction = undefined;
 
 160     expect(component.ngAfterViewInit());
 
 161     expect(component.action).toEqual('');
 
 162     expect(component.vnfType).toEqual('');
 
 163     expect(component.vnfcType).toEqual('');
 
 164     expect(component.protocol).toEqual('');
 
 165     expect(component.artifactName).toEqual('');
 
 169   it('check if correct notification is fired while initialising if reference data object is undefined', () => {
 
 170     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 171     component = fixture.componentInstance;
 
 172     expect(component.ngAfterViewInit());
 
 173     expect(component.Actions.length).toBe(0)
 
 174     expect(component.enableBrowse).toBe(false)
 
 177   it('test sync template when template data, param data and pd data are available', inject([MappingEditorService, ParamShareService], (mappingEditorService: MappingEditorService, paramShareService: ParamShareService) => {
 
 178     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 179     component = fixture.componentInstance;
 
 180     mappingEditorService.fromScreen === 'MappingScreen'
 
 181     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n            <version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n           </groups>\n    </configuration>"
 
 182     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 184     var pdData = [{ "name": "sync_auto-pop_name1", "type": null, "description": null, "required": null, "default": null, "source": "A&AI", "rule-type": "vnfc-oam-ipv4-address-list", "request-keys": [{ "key-name": null, "key-value": null }, { "key-name": null, "key-value": null }, { "key-name": null, "key-value": null }], "response-keys": [{ "key-name": "unique-key-name", "key-value": "parent-name" }, { "key-name": "unique-key-value", "key-value": "vnfc" }, { "key-name": "field-key-name", "key-value": "ipaddress-v4-oam-vip" }, { "key-name": null, "key-value": "vm-number" }, { "key-name": null, "key-value": "test" }], "ruleTypeValues": [null, "vnf-name", "vm-name-list", "vnfc-name-list", "vnf-oam-ipv4-address", "vnfc-oam-ipv4-address-list"], "showFilterFields": true, "enableFilterByValue": true }, { "name": "sync_auto-pop_address1", "type": null, "description": null, "required": null, "default": null, "source": "A&AI", "rule-type": "vm-name-list", "request-keys": [{ "key-name": null, "key-value": null }, { "key-name": null, "key-value": null }, { "key-name": null, "key-value": null }], "response-keys": [{ "key-name": "unique-key-name", "key-value": "parent-name" }, { "key-name": "unique-key-value", "key-value": "vserver" }, { "key-name": "field-key-name", "key-value": "vserver-name" }, { "key-name": null, "key-value": "vnfc-function-code" }, { "key-name": null, "key-value": null }], "ruleTypeValues": [null, "vnf-name", "vm-name-list", "vnfc-name-list", "vnf-oam-ipv4-address", "vnfc-oam-ipv4-address-list"], "showFilterFields": true, "enableFilterByValue": true }, { "name": "node0_tacplus_server_name2", "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] }];
 
 185     paramShareService.setSessionParamData([pdData]);
 
 186     localStorage["paramsContent"] = {
 
 187       "sync_auto-pop_name1": "10.0.1.34",
 
 188       "sync_auto-pop_address1": "",
 
 189       "node0_tacplus_server_name2": "192.34.45.5"
 
 191     expect(component.syncTemplate());
 
 196   it('test sync template when template data, param data and pd data are not available', inject([MappingEditorService, ParamShareService], (mappingEditorService: MappingEditorService, paramShareService: ParamShareService) => {
 
 197     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 198     component = fixture.componentInstance;
 
 199     mappingEditorService.fromScreen === 'MappingScreen'
 
 200     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n            <version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n           </groups>\n    </configuration>"
 
 201     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 204     paramShareService.setSessionParamData([pdData]);
 
 205     localStorage["paramsContent"] = {};
 
 206     expect(component.syncTemplate());
 
 211   it('test whether proper param data and template data are getting set in the appDataObject', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 212     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 213     component = fixture.componentInstance;
 
 214     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 215     component.ngOnInit();
 
 216     component.ngAfterViewInit();
 
 217     component.appDataObject = { reference: {}, template: { templateData: {}, nameValueData: {} }, pd: {} };
 
 218     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n            <version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n           </groups>\n    </configuration>"
 
 219     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 220     localStorage["paramsContent"] = JSON.stringify({ "sync_auto-pop_name1": "10.0.1.34", "sync_auto-pop_address1": "", "node0_tacplus_server_name2": "192.34.45.5" });
 
 222     component.userId = "sj108s";
 
 223     component.apiToken = "87264736473";
 
 224     mappingEditorService.identifier = "id1";
 
 225     component.prepareAppData();
 
 226     var paramData = { "input": ({ "design-request": ({ "request-id": '87264736473', "action": 'uploadArtifact', "payload": '{"userID":"sj108s","vnf-type":"testVnf","action":"Configure","artifact-name":"param_Configure_testVnf_0.0.1V.json","artifact-type":"APPC-CONFIG","artifact-version":"0.0.1","artifact-contents":"[{\"sync_auto-pop_name1\":\"10.0.1.34\",\"sync_auto-pop_address1\":\"\",\"node0_tacplus_server_name2\":\"192.34.45.5\"}]"}' }) }) };
 
 227     var templateData = { input: ({ "design-request": ({ "request-id": '87264736473', "action": 'uploadArtifact', "payload": '{"userID":"sj108s","vnf-type":"testVnf","action":"Configure","artifact-name":"template_Configure_test_0.0.1V.json","artifact-type":"APPC-CONFIG","artifact-version":"0.0.1","artifact-contents":"<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n<version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n              </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n          <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n   </groups>\n    </configuration>"}' }) }) };
 
 228     expect(component.appDataObject.template.nameValueData["payload"]).toBe(JSON.stringify(paramData["payload"]));
 
 229     expect(component.appDataObject.template.templateData["payload"]).toBe(JSON.stringify(templateData["payload"]));
 
 233   it('test whether proper param data is getting set in the downloadDataObject', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 234     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 235     component = fixture.componentInstance;
 
 236     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 237     component.ngOnInit();
 
 238     component.ngAfterViewInit();
 
 239     component.downloadDataObject = {
 
 241       template: { templateData: {}, nameValueData: {}, templateFileName: '', nameValueFileName: '' },
 
 242       pd: { pdData: '', pdFileName: '' }
 
 244     localStorage["paramsContent"] = JSON.stringify({ "sync_auto-pop_name1": "10.0.1.34", "sync_auto-pop_address1": "", "node0_tacplus_server_name2": "192.34.45.5" });
 
 246     component.onDownloadParameter();
 
 247     var nameValueData = {
 
 248       "sync_auto-pop_name1": "10.0.1.34",
 
 249       "sync_auto-pop_address1": "",
 
 250       "node0_tacplus_server_name2": "192.34.45.5"
 
 252     expect(component.downloadDataObject.template.nameValueData).toBe(JSON.stringify(nameValueData, null, "\t"));
 
 253     expect(component.downloadDataObject.template.nameValueFileName).toBe("param_Configure_testVnf_0.0.1V.json");
 
 256   it('test whether proper template data is getting set in the downloadDataObject', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 257     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 258     component = fixture.componentInstance;
 
 259     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 260     component.ngOnInit();
 
 261     component.ngAfterViewInit();
 
 262     component.downloadDataObject = {
 
 264       template: { templateData: {}, nameValueData: {}, templateFileName: '', nameValueFileName: '' },
 
 265       pd: { pdData: '', pdFileName: '' }
 
 267     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n            <version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n           </groups>\n    </configuration>"
 
 268     component.fileType = "text/xml"
 
 269     component.onDownloadTemplate('Template');
 
 271     component.fileType = "text/plain"
 
 272     component.onDownloadTemplate('Template');
 
 273     component.fileType = "text/json"
 
 274     component.onDownloadTemplate('Template');
 
 275     component.tempretrieveFlag = true;
 
 276     component.fileNameForTempSave = "Configure_testVnf_0.0.1V.json"
 
 277     component.onDownloadTemplate('Template');
 
 278     expect(component.downloadDataObject.template.templateData).toBe(component.configMappingEditorContent.replace(/\(([^()]|(R))*\)=\(/g, '').replace(/\)}/g, '}'));
 
 282   it('test merge status for golden config template and uploaded parameter data', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 283     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 284     component = fixture.componentInstance;
 
 285     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 286     component.ngOnInit();
 
 287     component.ngAfterViewInit();
 
 288     component.downloadDataObject = {
 
 290       template: { templateData: {}, nameValueData: {}, templateFileName: '', nameValueFileName: '' },
 
 291       pd: { pdData: '', pdFileName: '' }
 
 293     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \r\n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\r\n            <version>15.1X49-D50.3</version>\r\n            <groups>\r\n                <name>node0</name>\r\n                <system>\r\n                   <tacplus-server>\r\n                        <name>199.37.184.211</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                    <tacplus-server>\r\n                        <name>199.37.184.242</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                </system>         \r\n            </groups>\r\n     </configuration>";
 
 294     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 295     localStorage["paramsContent"] = JSON.stringify({
 
 296       "node0_tacplus_server_name1": "199.37.184.211",
 
 297       "node0_tacplus_server_source_address1": "135.144.3.125",
 
 298       "node0_tacplus_server_name2": "199.37.184.242"
 
 300     component.mergeParams();
 
 301     expect(component.mergeStatus).toBe(true);
 
 303     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\n            <version>15.1X49-D50.3</version>\n            <groups>\n                <name>node0</name>\n                <system>\n                   <tacplus-server>\n                        <name>${sync_auto-pop_name1}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                    <tacplus-server>\n                        <name>${node0_tacplus_server_name2}</name>\n                        <source-address>${sync_auto-pop_address1}</source-address>\n                    </tacplus-server>\n                </system>         \n           </groups>\n    </configuration>"
 
 304     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 305     component.mergeParams();
 
 306     expect(component.mergeStatus).toBe(false);
 
 310   it('test handleAnnotation method', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 311     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 312     component = fixture.componentInstance;
 
 313     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 314     component.ngOnInit();
 
 315     component.ngAfterViewInit();
 
 317     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \r\n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\r\n            <version>15.1X49-D50.3</version>\r\n            <groups>\r\n                <name>node0</name>\r\n                <system>\r\n                   <tacplus-server>\r\n                        <name>199.37.184.211</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                    <tacplus-server>\r\n                        <name>199.37.184.242</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                </system>         \r\n            </groups>\r\n     </configuration>";
 
 318     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 319     component.selectedWord = "node0";
 
 320     expect(component.handleAnnotation(component.modal));
 
 323   it('test handleAnnotation method', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 324     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 325     component = fixture.componentInstance;
 
 326     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" };
 
 327     component.ngOnInit();
 
 328     component.ngAfterViewInit();
 
 330     component.configMappingEditorContent = "<configuration xmlns=\"http://xml.juniper.net/xnm/1.1/xnm\" \r\n    xmlns:a=\"http://xml.juniper.net/junos/15.1X49/junos\" >\r\n            <version>15.1X49-D50.3</version>\r\n            <groups>\r\n                <name>node0</name>\r\n                <system>\r\n                   <tacplus-server>\r\n                        <name>{(node1)=(name1)}</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                    <tacplus-server>\r\n                        <name>199.37.184.242</name>\r\n                        <source-address>135.144.3.125</source-address>\r\n                    </tacplus-server>\r\n                </system>         \r\n            </groups>\r\n     </configuration>";
 
 331     mappingEditorService.initialise(component.templateeditor.getEditor(), component.configMappingEditorContent, component.modal);
 
 332     component.selectedWord = "node0";
 
 333     component.tempName = "name0";
 
 334     component.submitNameValues()
 
 335     expect(component.replaceWord).toContain("{(node0)=(name0)}");
 
 336     component.selectedWord = "{(node1)=(name1)}";
 
 337     component.submitNameValues();
 
 338     component.tempName = false;
 
 339     component.submitNameValues();
 
 342   it('retrieveTemplateFromAppc function should return response on success and set the configMappingEditorContent object', inject([HttpUtilService, NgProgress, MappingEditorService, MockBackend], (httpUtilService: HttpUtilService, mappingEditorService: MappingEditorService, ngProgress: NgProgress, mockBackend: MockBackend) => {
 
 343     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 344     component = fixture.componentInstance;
 
 348           "block": "{\"userID\":null,\"designInfo\":null,\"statusInfo\":null,\"artifactInfo\":[{\"artifact-content\":\"   <configuration xmlns=\\\"http://xml.juniper.net/xnm/1.1/xnm\\\" \\n    xmlns:a=\\\"http://xml.juniper.net/junos/15.1X49/junos\\\" >\\n            <version>15.1X49-D50.3</version>\\n            <groups>\\n                <name>node0</name>\\n                <system>\\n                   <tacplus-server>\\n                        <name>${sync_auto-pop_name1}</name>\\n                        <source-address>${sync_auto-pop_address1}</source-address>\\n                    </tacplus-server>\\n                    <tacplus-server>\\n                        <name>${node0_tacplus_server_name2}</name>\\n                        <source-address>${sync_auto-pop_address1}</source-address>\\n                    </tacplus-server>\\n                </system>         \\n           </groups>\\n    </configuration>\"}]}",
 
 349           "requestId": "497085412083"
 
 357     let response = new ResponseOptions({
 
 358       body: JSON.stringify(mockData)
 
 360     const baseResponse = new Response(response);
 
 361     mockBackend.connections.subscribe(
 
 362       (c: MockConnection) => c.mockRespond(baseResponse)
 
 365     mappingEditorService.latestAction = { "action": "Configure", "action-level": "vnf", "scope": { "vnf-type": "testVnf", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_Configure_test_0.0.1V.json", "artifact-type": "config_template" }, { "artifact-name": "pd_Configure_test_0.0.1V.yaml", "artifact-type": "parameter_definitions" }], "scopeType": "vnf-type" }
 
 367     mappingEditorService.fromScreen = 'MappingScreen';
 
 368     component.action = 'Configure';
 
 369     component.refObj = mappingEditorService.latestAction;
 
 370     component.scopeName = "testVnf";
 
 371     component.vnfType = "testVnf";
 
 372     component.userId = "abc";
 
 373     component.item.action = "Configure";
 
 374     component.retrieveTemplateFromAppc();
 
 375     expect(component.configMappingEditorContent).not.toBe(null);
 
 380   it('Should validatte fileChange method if file type is xml', async(() => {
 
 381     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 382     component = fixture.componentInstance;
 
 383     let reader = new FileReader();
 
 384     let file = new File(["testing"], "foo.xml", { type: "text/xml" });
 
 385     let input = { files: [file] };
 
 386     component.refObj = true;
 
 388     component.fileChange(input);
 
 390     component.readFile(input.files[0], reader, (res) => {
 
 391       expect(component.selectedUploadType).toEqual('Generated Template');
 
 392       expect(component.configMappingEditorContent).toEqual(res);
 
 393       expect(component.artifactRequest.templateContent).toEqual(res);
 
 397   it('Should validatte fileChange method if file type is json', async(() => {
 
 398     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 399     component = fixture.componentInstance;
 
 400     let reader = new FileReader();
 
 401     let file = new File(["testing"], "foo.json", { type: "text/json" });
 
 402     let input = { files: [file] };
 
 403     component.refObj = true;
 
 405     component.fileChange(input);
 
 407     component.readFile(input.files[0], reader, (res) => {
 
 408       expect(component.selectedUploadType).toEqual('Generated Template');
 
 409       expect(component.configMappingEditorContent).toEqual(res);
 
 410       expect(component.artifactRequest.templateContent).toEqual(res);
 
 414   it('Should validatte fileChange method if file type is none ', async(() => {
 
 415     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 416     component = fixture.componentInstance;
 
 417     let reader = new FileReader();
 
 418     let file = new File(["testing"], "foo", { type: "" });
 
 419     let input = { files: [file] };
 
 420     component.refObj = true;
 
 422     component.fileChange(input);
 
 424     component.readFile(input.files[0], reader, (res) => {
 
 425       expect(typeof sessionStorage.getItem('fileType')).toEqual('string')
 
 426       expect(component.selectedUploadType).toEqual('Generated Template');
 
 427       expect(component.configMappingEditorContent).toEqual(res);
 
 428       expect(component.artifactRequest.templateContent).toEqual(res);
 
 432   it('Should validate if files is false', () => {
 
 433    fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 434    component = fixture.componentInstance;
 
 435     let spy = spyOn(NotificationsService.prototype, 'error');
 
 436     let reader = new FileReader();
 
 437     let input = { files: [] };
 
 438     component.refObj = true;
 
 440     component.fileChange(input);
 
 442     expect(spy).toHaveBeenCalled();
 
 445   it('Should validate if refObj is undefined', () => {
 
 446     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 447     component = fixture.componentInstance;
 
 448     let spy = spyOn(NotificationsService.prototype, 'error');
 
 449     let reader = new FileReader();
 
 450     let input = { files: [] };
 
 451     component.refObj = undefined;
 
 453     component.fileChange(input);
 
 455     expect(spy).toHaveBeenCalled();
 
 458   // End fileChange method
 
 460   it('should give the correct template artifact name when multiple template identifiers are provided from reference page', inject([MappingEditorService], (mappingEditorService: MappingEditorService) => {
 
 461     fixture = TestBed.createComponent(GoldenConfigurationComponent);
 
 462     component = fixture.componentInstance;
 
 463     mappingEditorService.identifier = "id1";
 
 464     mappingEditorService.latestAction = { "action": "ConfigScaleOut", "action-level": "vnf", "scope": { "vnf-type": "test", "vnfc-type": "" }, "template": "Y", "vm": [], "device-protocol": "CHEF", "user-name": "", "port-number": "", "artifact-list": [{ "artifact-name": "template_ConfigScaleOut_test_0.0.1V_id1.json", "artifact-type": "config_template" }, { "artifact-name": "pd_ConfigScaleOut_test_0.0.1V_id1.yaml", "artifact-type": "parameter_definitions" }, { "artifact-name": "template_ConfigScaleOut_test_0.0.1V_id2.json", "artifact-type": "config_template" }, { "artifact-name": "pd_ConfigScaleOut_test_0.0.1V_id2.yaml", "artifact-type": "parameter_definitions" }], "template-id-list": ["id1", "id2"], "scopeType": "vnf-type" };
 
 465     component.ngAfterViewInit();
 
 466     expect(component.artifactName).toBe("template_ConfigScaleOut_test_0.0.1V_id1.json");