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 { async, ComponentFixture, TestBed, fakeAsync, tick, inject } from '@angular/core/testing';
 import { RouterTestingModule } from "@angular/router/testing";
+import { BaseRequestOptions, Response, ResponseOptions, Http } from '@angular/http';
+import { MockBackend, MockConnection } from '@angular/http/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';
+import 'rxjs/add/observable/of';
 
 import { NavigationComponent } from './navigation.component';
 import { EmitterService } from '../../services/emitter.service';
     beforeEach(async(() => {
         TestBed.configureTestingModule({
             declarations: [NavigationComponent],
-            imports: [RouterTestingModule.withRoutes([]),FormsModule, RouterTestingModule, HttpModule, NgbModule.forRoot()],
-            providers: []
+            imports: [RouterTestingModule.withRoutes([])],
+            providers: [EmitterService, MockBackend, BaseRequestOptions, {
+                    provide: Http,
+                    useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
+                        return new Http(backend, defaultOptions);
+                    },
+                    deps: [MockBackend, BaseRequestOptions],
+                }]
         })
             .compileComponents();
     }));
         component.ngOnInit();
     });
 
-    it('should validate on ngOnChanges', () => {
-        let spy = spyOn(EmitterService, 'get').and.callFake( ({}) => {
-            return Observable.empty();
+    describe('Should test ngOnChanges', () => {
+        it('should validate on ngOnChanges subscribe return', () => {
+            let spy = spyOn(EmitterService, 'get').and.returnValue(Observable.of('you object'));
+            component.id = 'userLogin';
+
+            component.ngOnChanges();
+
+            expect(spy).toHaveBeenCalled();
         });
-        component.id = 'userLogin';
 
-        component.ngOnChanges();
+        it('should validate on ngOnChanges if subscribe return null or undefined', inject([Router],(router: Router) => {
+            let spy = spyOn(EmitterService, 'get').and.returnValue(Observable.of(''));
+            let spy1 = spyOn(component, 'logout');
+            component.id = 'userLogin';
+            component.ngOnChanges();
 
-        expect(spy).toHaveBeenCalled();
+            expect(spy).toHaveBeenCalled();
+            
+            expect(spy1).toHaveBeenCalled()
+        }));
     });
 
     it('should go to /vnfs/list if url = vnfs and userId is not null or undefined', inject([Router],(router: Router) => {
 
         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();
-    });
 });
 
 ============LICENSE_END============================================
 */
 
-import { async, ComponentFixture, TestBed,inject } from '@angular/core/testing';
+import { async, ComponentFixture, TestBed, inject } from '@angular/core/testing';
 import { By } from '@angular/platform-browser';
 import { DebugElement } from '@angular/core';
 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 { Http, Headers, HttpModule, BaseRequestOptions, Response, ResponseOptions } from '@angular/http';
+import { MockBackend, MockConnection } from '@angular/http/testing';
 import { Observable } from 'rxjs/Observable';
 import { Subscription } from 'rxjs/Subscription';
 import 'rxjs/add/observable/from';
 import { NgProgress } from 'ngx-progressbar';
 import { NgProgressModule } from 'ngx-progressbar';
 
-class MockService {
-    doStuff() {
-        return this;
-    }
-}
-
-describe( 'TestComponent', () => {
+describe('TestComponent', () => {
     let component: TestComponent;
     let fixture: ComponentFixture<TestComponent>;
-    let http = new MockService();
 
     beforeEach(async(() => {
         TestBed.configureTestingModule({
             declarations: [TestComponent],
             imports: [
-            FormsModule,
-            RouterTestingModule,
-            SimpleNotificationsModule,
-            HttpModule,
-            NgProgressModule
+                FormsModule,
+                RouterTestingModule,
+                SimpleNotificationsModule,
+                HttpModule,
+                NgProgressModule
             ],
             providers: [
-            NotificationService, 
-            ParamShareService,
-            MappingEditorService,
-            HttpUtilService,
-            UtilityService,
-            NgProgress,
-            {provide: Http, useValue: http}
+                NotificationService,
+                ParamShareService,
+                MappingEditorService,
+                HttpUtilService,
+                UtilityService,
+                NgProgress, MockBackend, BaseRequestOptions,
+                {
+                    provide: Http,
+                    useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
+                        return new Http(backend, defaultOptions);
+                    },
+                    deps: [MockBackend, BaseRequestOptions],
+                }
             ]
         })
-        .compileComponents();
+            .compileComponents();
     }));
 
     beforeEach(() => {
         fixture.detectChanges(); // onInit()
 
         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) => {
+        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.action = 'ConfigModify';
             component.actionIdentifiers['vnf-id'] = 'testVnf';
             let fileName = 'test_' + component.action + '_' + component.actionIdentifiers['vnf-id'] + '_request';
-            let theJSON = component.apiRequest; 
+            let theJSON = component.apiRequest;
             var blob = new Blob([theJSON], {
                 type: 'text/json'
             });
         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.action = 'ConfigModify';
             component.actionIdentifiers['vnf-id'] = 'testvnf';
             let fileName = 'test_' + component.action + '_' + component.actionIdentifiers['vnf-id'] + '_response';
             let theJSON = component.apiRequest;
         });
 
         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');
+            let file = new File(["testing"], "foo.XLS", {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
+            let fileExtension = 'XLS';
+            let event = { isTrusted: true, type: "change", target: {files: [file]} }
 
             component.upload(event);
 
             expect(reader instanceof FileReader).toBeTruthy();
-            expect(reader.onload).toHaveBeenCalled();
-            expect(component.enableTestButton).toBeTruthy();
-            console.log('aaa',component.enableTestButton, component.uploadFileName);
+            expect(component.pollCounter).toBe(0)
         });
 
         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');
+            let reader = new FileReader();
+            let file = new File(["testing"], "foo.doc", {type: ""})
+            let fileExtension = 'doc';
+            let event = { isTrusted: true, type: "change", target: {files: [file]} }
+            
+            component.upload(event);
+
+            expect(reader instanceof FileReader).toBeTruthy();
+            expect(component.flag).toBe(1)
+        });
+
+        it('Should return an error is files length is not equal to 1', () => {
+            
         });
     });
 
     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"}
+                { "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);
 
     // Test uploadedFileResult Method
     describe('Test uploadedFileResult', () => {
-        it('should return success message', inject([SimpleNotificationsModule],(service: SimpleNotificationsModule) => {
-            component.action  = 'ConfigModify';
+        it('should return success message', inject([SimpleNotificationsModule], (service: SimpleNotificationsModule) => {
+            component.action = 'ConfigModify';
             component.actionIdentifiers['vnf-id'] = 'testvnf';
 
             component.uploadedFileResult();
         }));
 
         it('should return error message', inject([SimpleNotificationsModule], (service: SimpleNotificationsModule) => {
-            component.action  = '';
+            component.action = '';
             component.actionIdentifiers['vnf-id'] = '';
 
             component.uploadedFileResult();
 
         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(typeof (component.vmJson)).toEqual('object');
+            expect(typeof (component.vnfcJson)).toEqual('object');
             expect(component.vmJson['vnfc-type']).toBe('testvnfc');
             expect(component.flag).toBe(0);
         });
             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 response on success', inject([MockBackend], (mockBackend: MockBackend) => {
+           let mockData = 'testing';
+               let response = new ResponseOptions({
+                   body: JSON.stringify(mockData)
+               });
+               const baseResponse = new Response(response);
+               mockBackend.connections.subscribe(
+                   (c: MockConnection) => { 
+                       c.mockRespond(baseResponse)
+                   }
+               );
+
+               component.action  = 'ConfigModify';
+                       
+                       component.testVnf();
         }));
 
         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();
-        }));
+                       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';
-            
+            let spy = spyOn(ngProgress, 'done');
+            component.action = 'ConfigModify';
+
             component.testVnf();
-            
+
         }));
     });
 
             expect(component.pollTestStatus).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 call fake server', inject([MockBackend], (mockBackend: MockBackend) => {
+            component.requestId = new Date().getTime().toString();
+                       component.actionIdentifiers['vnf-id'] = 123456;
+                       let mockData = { "output": { "common-header": { "originator-id": "CDT", "sub-request-id": "653018029941", "timestamp": "2018-02-12T07:27:21.448Z", "api-ver": "2.00", "request-id": "653018029941", "flags": { "force": "TRUE", "mode": "NORMAL", "ttl": 3600 } }, "payload": "{\"status-reason\":\"FAILED\",\"status\":\"FAILED\"}", "status": { "message": "SUCCESS - request has been processed successfully", "code": 400 } } } ;
+               let response = new ResponseOptions({
+                   body: JSON.stringify(mockData)
+               });
+               const baseResponse = new Response(response);
+               mockBackend.connections.subscribe(
+                   (c: MockConnection) => c.mockRespond(baseResponse)
+               );
+                       
+                       component.pollTestStatus();
         }));
 
-        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();
-        }));
+        it('should call fake server if status is success', inject([MockBackend], (mockBackend: MockBackend) => {
+                       component.requestId = new Date().getTime().toString();
+                       component.actionIdentifiers['vnf-id'] = 123456;
+                       let mockData = { "output": { "common-header": { "originator-id": "CDT", "sub-request-id": "653018029941", "timestamp": "2018-02-12T07:27:21.448Z", "api-ver": "2.00", "request-id": "653018029941", "flags": { "force": "TRUE", "mode": "NORMAL", "ttl": 3600 } }, "payload": "{\"status-reason\":\"SUCCESS\",\"status\":\"SUCCESS\"}", "status": { "message": "SUCCESS - request has been processed successfully", "code": 400 } } } ;
+               let response = new ResponseOptions({
+                   body: JSON.stringify(mockData)
+               });
+               const baseResponse = new Response(response);
+               mockBackend.connections.subscribe(
+                   (c: MockConnection) => c.mockRespond(baseResponse)
+               );
+                       
+                       component.pollTestStatus();
+               }));
+
+               it('should execute else part if timeStamp && status && statusReason are false', inject([MockBackend], (mockBackend: MockBackend) => {
+                       component.requestId = new Date().getTime().toString();
+                       component.actionIdentifiers['vnf-id'] = 123456;
+                       let mockData = { "output": { "common-header": { "originator-id": "CDT", "sub-request-id": "653018029941", "timestamp": "2018-02-12T07:27:21.448Z", "api-ver": "2.00", "request-id": "653018029941", "flags": { "force": "TRUE", "mode": "NORMAL", "ttl": 3600 } }, "payload": "{\"status-reason\":\"FAILED\",\"status\":\"\"}", "status": { "message": "SUCCESS - request has been processed successfully", "code": 400 } } } ;
+               let response = new ResponseOptions({
+                   body: JSON.stringify(mockData)
+               });
+               const baseResponse = new Response(response);
+               mockBackend.connections.subscribe(
+                   (c: MockConnection) => c.mockRespond(baseResponse)
+               );
+                       
+                       component.pollTestStatus();
+               }));
+
+               it('should return an error if fails', inject([MockBackend], (mockBackend: MockBackend) => {
+                       let error = 'Error Connecting to APPC server';
+                       component.requestId = new Date().getTime().toString();
+                       component.actionIdentifiers['vnf-id'] = 123456;
+               let mockData = '';
+               let response = new ResponseOptions({
+                   body: JSON.stringify(mockData)
+               });
+               const baseResponse = new Response(response);
+               mockBackend.connections.subscribe(
+                   (c: MockConnection) => c.mockError(new Error(error))
+               );
+
+                       component.pollTestStatus();
+               }));
     });
-    
+
     // Test getUrlEndPoint Method
     describe('Test getUrlEndPoint Method', () => {
         it('Should have getUrlEndPoint method', () => {