X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy%2Fpolicy-control.component.spec.ts;h=f03336105a0ab60e5d852a11772e233ccb2f433a;hb=HEAD;hp=198305da2b5161e555fbc87afc927125ed1bbafb;hpb=9c2b058b9696bf34c1b2d6fd20bf1fe9cfb1f7b0;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy/policy-control.component.spec.ts b/webapp-frontend/src/app/policy/policy-control.component.spec.ts index 198305d..f033361 100644 --- a/webapp-frontend/src/app/policy/policy-control.component.spec.ts +++ b/webapp-frontend/src/app/policy/policy-control.component.spec.ts @@ -19,60 +19,133 @@ */ import { async, ComponentFixture, TestBed } from "@angular/core/testing"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; -import { MatDialog } from "@angular/material/dialog"; +import { By } from "@angular/platform-browser"; import { MatIconModule } from "@angular/material/icon"; import { MatTableModule } from "@angular/material/table"; -import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { CUSTOM_ELEMENTS_SCHEMA, DebugElement } from "@angular/core"; import { of } from "rxjs"; -import { NotificationService } from "@services/ui/notification.service"; import { PolicyControlComponent } from "./policy-control.component"; -import { PolicyTypeDataSource } from "@policy/policy-type/policy-type.datasource"; -import { UiService } from "@services/ui/ui.service"; -import { PolicyTypeSchema } from "@interfaces/policy.types"; -import { PolicyService } from '../services/policy/policy.service'; +import { PolicyTypes } from "@interfaces/policy.types"; +import { PolicyService } from "@services/policy/policy.service"; +import { MockComponent } from "ng-mocks"; +import { PolicyTypeComponent } from "./policy-type/policy-type.component"; +import { MatButtonHarness } from '@angular/material/button/testing'; +import { MatButtonModule } from '@angular/material/button'; +import { HarnessLoader } from '@angular/cdk/testing'; +import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; describe("PolicyControlComponent", () => { - let component: PolicyControlComponent; - let fixture: ComponentFixture; + let hostComponent: PolicyControlComponent; + let hostFixture: ComponentFixture; + let loader: HarnessLoader; + let policyServiceSpy: jasmine.SpyObj; + let el: DebugElement; beforeEach(async(() => { - const policyTypeDataSourceSpy = jasmine.createSpyObj( - "PolicyTypeDataSource", - ["connect", "getPolicyTypes", "disconnect"] - ); - const policyServiceSpy = jasmine.createSpyObj('PolicyService', ['getPolicyTypes']); - var policyTypeSchema = {} as PolicyTypeSchema; - policyTypeSchema.name = ""; - policyTypeSchema.schemaObject = ""; - policyTypeDataSourceSpy.connect.and.returnValue(of([policyTypeSchema])); - policyTypeDataSourceSpy.disconnect(); - policyServiceSpy.getPolicyTypes.and.returnValue(of(["type1"])); - - let matDialogStub: Partial; - let notificationServiceStub: Partial; + policyServiceSpy = jasmine.createSpyObj("PolicyService", [ + "getPolicyTypes", + ]); TestBed.configureTestingModule({ - imports: [MatIconModule, MatTableModule, BrowserAnimationsModule], + imports: [ + MatIconModule, + MatTableModule, + BrowserAnimationsModule, + MatButtonModule, + ], schemas: [CUSTOM_ELEMENTS_SCHEMA], - declarations: [PolicyControlComponent], + declarations: [ + PolicyControlComponent, + MockComponent(PolicyTypeComponent), + ], providers: [ - { provide : PolicyService, useValue: policyServiceSpy}, - { provide: PolicyTypeDataSource, useValue: policyTypeDataSourceSpy }, - { provide: MatDialog, useValue: matDialogStub }, - { provide: NotificationService, useValue: notificationServiceStub }, - UiService, + { provide: PolicyService, useValue: policyServiceSpy } ], - }).compileComponents(); + }); })); - beforeEach(() => { - fixture = TestBed.createComponent(PolicyControlComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + describe("normally functioning", () => { + beforeEach(() => { + const policyTypes = { policytype_ids: ["type1", "type2"] } as PolicyTypes; + policyServiceSpy.getPolicyTypes.and.returnValue(of(policyTypes)); + + compileAndGetComponents(); + }); + + it("should create", () => { + expect(hostComponent).toBeTruthy(); + }); + + it("should contain two PolicyType components instantiated with the correct type", () => { + const typeComponents: PolicyTypeComponent[] = hostFixture.debugElement + .queryAll(By.directive(PolicyTypeComponent)) + .map((component) => component.componentInstance); + + expect(typeComponents.length).toEqual(2); + expect(typeComponents[0].policyTypeId).toEqual("type1"); + expect(typeComponents[1].policyTypeId).toEqual("type2"); + }); + + it("should call the refresh button when clicking on it", async () => { + let refreshButton: MatButtonHarness = await loader.getHarness( + MatButtonHarness.with({ selector: "#refreshButton" }) + ); + spyOn(hostComponent, "refreshTables"); + await refreshButton.click(); + expect(hostComponent.refreshTables).toHaveBeenCalled(); + }) - it("should create", () => { - expect(component).toBeTruthy(); + it("should close instance tables when clicking on refresh button", async () => { + let refreshButton: MatButtonHarness = await loader.getHarness( + MatButtonHarness.with({ selector: "#refreshButton" }) + ); + const policyTypeComponent: PolicyTypeComponent = hostFixture.debugElement.query( + By.directive(PolicyTypeComponent) + ).componentInstance; + let booleanTrigger = policyTypeComponent.minimiseTrigger + await refreshButton.click(); + expect(policyTypeComponent.minimiseTrigger).not.toEqual(booleanTrigger); + }) + + it("should render the types sorted when clicking on refresh button", async () => { + const typeComponents: PolicyTypeComponent[] = hostFixture.debugElement + .queryAll(By.directive(PolicyTypeComponent)) + .map((component) => component.componentInstance); + + for(var i= 0; i < typeComponents.length-1; i++){ + expect(typeComponents[i].policyTypeId { + beforeEach(() => { + policyServiceSpy.getPolicyTypes.and.returnValue( + of({ + policytype_ids: [], + } as PolicyTypes) + ); + + compileAndGetComponents(); + }); + + it("should display message of no types", async () => { + expect(policyServiceSpy.getPolicyTypes.length).toEqual(0); + const content = el.query(By.css('#noInstance')).nativeElement; + expect(content.innerText).toBe("There are no policy types to display."); + }); }); + + function compileAndGetComponents() { + TestBed.compileComponents(); + console.log(TestBed); + + hostFixture = TestBed.createComponent(PolicyControlComponent); + hostComponent = hostFixture.componentInstance; + el = hostFixture.debugElement; + hostFixture.detectChanges(); + loader = TestbedHarnessEnvironment.loader(hostFixture); + return { hostFixture, hostComponent, loader }; + } });