diff options
Diffstat (limited to 'portal-FE-os')
10 files changed, 212 insertions, 25 deletions
diff --git a/portal-FE-os/package.json b/portal-FE-os/package.json index 265cab72..77cef690 100644 --- a/portal-FE-os/package.json +++ b/portal-FE-os/package.json @@ -5,9 +5,10 @@ "ng": "ng", "start": "ng serve --host www.portal.onap.org --port 8989 --open", "build": "ng build --prod --aot=false --build-optimizer=false", - "test": "ng test", + "test": "ng test --watch=false --code-coverage --browsers=ChromeHeadless", "lint": "ng lint", - "e2e": "ng e2e" + "e2e": "ng e2e", + "sonar": "sonar-scanner" }, "private": true, "dependencies": { @@ -65,6 +66,7 @@ "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.4.0", + "sonar-scanner": "^3.1.0", "ts-node": "~7.0.0", "tslint": "~5.11.0", "typescript": "~3.1.6" diff --git a/portal-FE-os/pom.xml b/portal-FE-os/pom.xml index 626addb4..21bdd508 100644 --- a/portal-FE-os/pom.xml +++ b/portal-FE-os/pom.xml @@ -10,6 +10,14 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <skipnode>false</skipnode> <skipcopy>false</skipcopy> + <sonar.typescript.lcov.reportPaths>coverage/lcov.info</sonar.typescript.lcov.reportPaths> + <sonar.sources>src</sonar.sources> + <sonar.projectKey>portal-FE-os</sonar.projectKey> + <sonar.projectName>portal-FE-os</sonar.projectName> + <sonar.exclusions>**/node_modules/**,**/*.spec.ts,**/*.module.ts,**/environment.prod.ts,**/*.js,**/main.ts,**/header-interceptor.ts,**/dynamic-widget.component.ts</sonar.exclusions> + <sonar.test.inclusions>**/*.spec.ts</sonar.test.inclusions> + <sonar.tests>src</sonar.tests> + <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding> </properties> <build> @@ -97,6 +105,19 @@ <arguments>install</arguments> </configuration> </execution> + + <execution> + <id>npm run test</id> + <goals> + <goal>npm</goal> + </goals> + + <phase>generate-resources</phase> + + <configuration> + <arguments>run-script test</arguments> + </configuration> + </execution> <execution> <id>npm build</id> diff --git a/portal-FE-os/src/app/app.component.spec.ts b/portal-FE-os/src/app/app.component.spec.ts index afc476fd..cd96a77d 100644 --- a/portal-FE-os/src/app/app.component.spec.ts +++ b/portal-FE-os/src/app/app.component.spec.ts @@ -34,7 +34,7 @@ * ============LICENSE_END============================================ * * - */s + */ import { TestBed, async } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { AppComponent } from './app.component'; @@ -56,17 +56,4 @@ describe('AppComponent', () => { const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); }); - - it(`should have as title 'portal-FE-os'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('portal-FE-os'); - }); - - it('should render title in a h1 tag', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector('h1').textContent).toContain('Welcome to portal-FE-os!'); - }); }); diff --git a/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.spec.ts b/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.spec.ts index 0ea27629..629e5fa6 100644 --- a/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.spec.ts +++ b/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.spec.ts @@ -39,25 +39,94 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ApplicationDetailsDialogComponent } from './application-details-dialog.component'; +import { NgMaterialModule } from 'src/app/ng-material-module'; +import { FormsModule } from '@angular/forms'; +import { NgbActiveModal, NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { IApplications } from 'src/app/shared/model/applications-onboarding/applications'; +import { InformationModalComponent } from 'src/app/modals/information-modal/information-modal.component'; +import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; +import { NgbModalBackdrop } from '@ng-bootstrap/ng-bootstrap/modal/modal-backdrop'; +import { ConfirmationModalComponent } from 'src/app/modals/confirmation-modal/confirmation-modal.component'; + describe('ApplicationDetailsDialogComponent', () => { let component: ApplicationDetailsDialogComponent; let fixture: ComponentFixture<ApplicationDetailsDialogComponent>; + const applicationObj: IApplications = {"id":"testID"}; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ ApplicationDetailsDialogComponent ] - }) + declarations: [ ApplicationDetailsDialogComponent,InformationModalComponent,ConfirmationModalComponent], + imports: [NgMaterialModule,FormsModule,HttpClientTestingModule,NgbModule.forRoot()], + providers: [NgbActiveModal] + }).overrideModule(BrowserDynamicTestingModule, { set: { entryComponents: [InformationModalComponent,ConfirmationModalComponent] } }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(ApplicationDetailsDialogComponent); component = fixture.componentInstance; + component.applicationObj = applicationObj; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + it('removeImage should return stubbed value', () => { + spyOn(component, 'removeImage').and.callThrough(); + component.removeImage(); + expect(component.removeImage).toHaveBeenCalledWith(); + }); + it('saveChanges should return stubbed value', () => { + component.applicationObj.isCentralAuth = true; + component.applicationObj.isEnabled = false; + spyOn(component, 'saveChanges').and.callThrough(); + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + component.applicationObj.isEnabled = true; + component.applicationObj.url = 'www.test.com' + component.applicationObj.restrictedApp =true; + + //spyOn(component, 'saveChanges').and.callThrough(); + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + component.applicationObj.isCentralAuth = false; + component.applicationObj.url = 'test' + component.applicationObj.restrictedApp =false; + component.applicationObj.isOpen = true; + component.isEditMode =true; + //spyOn(component, 'saveChanges').and.callThrough(); + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + }); + it('saveChanges Central Auth is disabled', () => { + component.applicationObj.isCentralAuth = false; + component.applicationObj.isEnabled = false; + spyOn(component, 'saveChanges').and.callThrough(); + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + component.applicationObj.isEnabled = true; + component.applicationObj.restrictedApp = true; + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + + }); + + it('saveChanges URL validation changes', () => { + component.applicationObj.isCentralAuth = true; + component.applicationObj.isEnabled = true; + component.applicationObj.name ='test'; + component.applicationObj.url = 'https://www.test.com' + component.applicationObj.username ='test' + component.applicationObj.nameSpace ='ONAP' + spyOn(component, 'saveChanges').and.callThrough(); + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + component.applicationObj.restrictedApp = false; + component.isEditMode = true; + component.saveChanges(); + expect(component.saveChanges).toHaveBeenCalledWith(); + }); }); diff --git a/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.ts b/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.ts index 60654461..39d2ffde 100644 --- a/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.ts +++ b/portal-FE-os/src/app/pages/application-onboarding/application-details-dialog/application-details-dialog.component.ts @@ -36,12 +36,13 @@ * */ -import { Component, OnInit, Input, Output, EventEmitter} from '@angular/core'; +import { Component, OnInit, Input, Output, EventEmitter, PLATFORM_ID, Inject, Injector} from '@angular/core'; import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { IApplications } from 'src/app/shared/model/applications-onboarding/applications'; import { ApplicationsService } from 'src/app/shared/services'; import { ConfirmationModalComponent } from 'src/app/modals/confirmation-modal/confirmation-modal.component'; import { InformationModalComponent } from 'src/app/modals/information-modal/information-modal.component'; +import { isPlatformBrowser } from '@angular/common'; @Component({ selector: 'app-application-details-dialog', @@ -59,9 +60,15 @@ export class ApplicationDetailsDialogComponent implements OnInit { isSaving: boolean = false; originalImage: any; ECOMP_URL_REGEX = "/^((?:https?\:\/\/|ftp?\:\/\/)?(w{3}.)?(?:[-a-z0-9]+\.)*[-a-z0-9]+.*)[^-_.]$/i"; + private ngbModal:NgbModal; - constructor(public activeModal: NgbActiveModal, public ngbModal: NgbModal, - public applicationsService : ApplicationsService) { } + constructor(public activeModal: NgbActiveModal, + public applicationsService : ApplicationsService,@Inject(PLATFORM_ID)private platformId:Object,private injector:Injector) { + if(isPlatformBrowser(this.platformId)) + { + this.ngbModal = this.injector.get(NgbModal); + } + } @Input() applicationObj: IApplications; @Output() passEntry: EventEmitter<any> = new EventEmitter(); diff --git a/portal-FE-os/src/app/pages/application-onboarding/application-onboarding.component.spec.ts b/portal-FE-os/src/app/pages/application-onboarding/application-onboarding.component.spec.ts index 8e198387..3f750992 100644 --- a/portal-FE-os/src/app/pages/application-onboarding/application-onboarding.component.spec.ts +++ b/portal-FE-os/src/app/pages/application-onboarding/application-onboarding.component.spec.ts @@ -39,6 +39,9 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ApplicationOnboardingComponent } from './application-onboarding.component'; +import { NgMaterialModule } from 'src/app/ng-material-module'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; describe('ApplicationOnboardingComponent', () => { let component: ApplicationOnboardingComponent; @@ -46,7 +49,8 @@ describe('ApplicationOnboardingComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ ApplicationOnboardingComponent ] + declarations: [ ApplicationOnboardingComponent ], + imports: [NgMaterialModule,HttpClientTestingModule,BrowserAnimationsModule] }) .compileComponents(); })); diff --git a/portal-FE-os/src/app/pages/pages.component.spec.ts b/portal-FE-os/src/app/pages/pages.component.spec.ts index 1bef834a..25383aa3 100644 --- a/portal-FE-os/src/app/pages/pages.component.spec.ts +++ b/portal-FE-os/src/app/pages/pages.component.spec.ts @@ -38,6 +38,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { PagesComponent } from './pages.component'; +import { Component } from '@angular/core'; describe('PagesComponent', () => { let component: PagesComponent; @@ -45,7 +46,7 @@ describe('PagesComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ PagesComponent ] + declarations: [ PagesComponent,RouterOutletStubComponent ] }) .compileComponents(); })); @@ -60,3 +61,6 @@ describe('PagesComponent', () => { expect(component).toBeTruthy(); }); }); + +@Component({selector: 'router-outlet', template: ''}) +class RouterOutletStubComponent { } diff --git a/portal-FE-os/src/app/pages/users/new-user-modal/new-user-modal.component.spec.ts b/portal-FE-os/src/app/pages/users/new-user-modal/new-user-modal.component.spec.ts index beb998cf..85a2d9e8 100644 --- a/portal-FE-os/src/app/pages/users/new-user-modal/new-user-modal.component.spec.ts +++ b/portal-FE-os/src/app/pages/users/new-user-modal/new-user-modal.component.spec.ts @@ -38,6 +38,13 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { NewUserModalComponent } from './new-user-modal.component'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { NgMaterialModule } from 'src/app/ng-material-module'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { Component, Input } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { MatRadioChange } from '@angular/material'; describe('NewUserModalComponent', () => { let component: NewUserModalComponent; @@ -45,7 +52,9 @@ describe('NewUserModalComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ NewUserModalComponent ] + declarations: [ NewUserModalComponent,AppSearchUsersStubComponent,AppUserdetailsFormStubComponent ], + imports:[HttpClientTestingModule,FormsModule,NgMaterialModule,BrowserAnimationsModule], + providers:[NgbActiveModal] }) .compileComponents(); })); @@ -59,4 +68,67 @@ describe('NewUserModalComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('addNewUser should return stubbed value', () => { + spyOn(component, 'addNewUser').and.callThrough(); + component.addNewUser(true); + expect(component.addNewUser).toHaveBeenCalledWith(true); + }); + + it('changeSelectedUser should return stubbed value', () => { + spyOn(component, 'changeSelectedUser').and.callThrough(); + let user = {}; + component.changeSelectedUser(user); + expect(component.changeSelectedUser).toHaveBeenCalledWith(user); + user = {"firstName":"FirstTestName","lastName":"LastTestName","orgUserId":"TestOrgId"}; + component.changeSelectedUser(user); + expect(component.changeSelectedUser).toHaveBeenCalledWith(user); + + }); + + // it('searchUserRadioChange should return stubbed value', () => { + // spyOn(component, 'searchUserRadioChange').and.callThrough(); + // MatRadio = {"value":""}; + // component.searchUserRadioChange(eventCheck); + // expect(component.searchUserRadioChange).toHaveBeenCalledWith(event); + // event = {"value":"System"}; + // component.searchUserRadioChange(event); + // expect(component.searchUserRadioChange).toHaveBeenCalledWith(event); + + // }); + + it('navigateBack should return stubbed value', () => { + spyOn(component, 'navigateBack').and.callThrough(); + component.navigateBack(); + expect(component.navigateBack).toHaveBeenCalledWith(); + }); + + it('roleSelectChange should return stubbed value', () => { + spyOn(component, 'roleSelectChange').and.callThrough(); + let element = {"id":2}; + component.roleSelectChange(element); + expect(component.roleSelectChange).toHaveBeenCalledWith(element); + }); + + it('getUserAppsRoles should return stubbed value', () => { + spyOn(component, 'getUserAppsRoles').and.callThrough(); + component.changedSelectedUser = 'Test'; + component.getUserAppsRoles(); + expect(component.getUserAppsRoles).toHaveBeenCalledWith(); + }); + + + }); + +@Component({selector: 'app-search-users', template: ''}) +class AppSearchUsersStubComponent { + @Input() searchTitle:any; + @Input() isSystemUser:any; + @Input() placeHolder:any; +} + +@Component({selector: 'app-user-details-form', template: ''}) +class AppUserdetailsFormStubComponent { + +} diff --git a/portal-FE-os/src/app/pages/users/user-details-form/user-details-form.component.spec.ts b/portal-FE-os/src/app/pages/users/user-details-form/user-details-form.component.spec.ts index 3262174f..b687cd5e 100644 --- a/portal-FE-os/src/app/pages/users/user-details-form/user-details-form.component.spec.ts +++ b/portal-FE-os/src/app/pages/users/user-details-form/user-details-form.component.spec.ts @@ -1,6 +1,11 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { UserDetailsFormComponent } from './user-details-form.component'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { NgMaterialModule } from 'src/app/ng-material-module'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; describe('UserDetailsFormComponent', () => { let component: UserDetailsFormComponent; @@ -8,7 +13,9 @@ describe('UserDetailsFormComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ UserDetailsFormComponent ] + declarations: [ UserDetailsFormComponent ], + imports:[HttpClientTestingModule,FormsModule,ReactiveFormsModule,NgMaterialModule,BrowserAnimationsModule], + providers:[NgbActiveModal] }) .compileComponents(); })); diff --git a/portal-FE-os/src/testing/router-link-directive-stub.ts b/portal-FE-os/src/testing/router-link-directive-stub.ts new file mode 100644 index 00000000..73e75cbe --- /dev/null +++ b/portal-FE-os/src/testing/router-link-directive-stub.ts @@ -0,0 +1,14 @@ +import { Directive, Input, HostListener } from "@angular/core"; + +@Directive({ + selector: '[routerLink]' + }) + export class RouterLinkDirectiveStub { + @Input('routerLink') linkParams: any; + navigatedTo: any = null; + + @HostListener('click') + onClick() { + this.navigatedTo = this.linkParams; + } + }
\ No newline at end of file |