X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy%2Fpolicy-type%2Fpolicy-type.component.spec.ts;h=b5db979ef3d450c9ca2e7a273c8395166f45738f;hb=HEAD;hp=4276ad364da05321798972ad6ca49549fe7cb2e2;hpb=41a57e4d75761207f2da883d0e4396c81159e58e;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy/policy-type/policy-type.component.spec.ts b/webapp-frontend/src/app/policy/policy-type/policy-type.component.spec.ts index 4276ad3..b5db979 100644 --- a/webapp-frontend/src/app/policy/policy-type/policy-type.component.spec.ts +++ b/webapp-frontend/src/app/policy/policy-type/policy-type.component.spec.ts @@ -18,37 +18,121 @@ * ========================LICENSE_END=================================== */ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from "@angular/core/testing"; -import { PolicyTypeComponent } from './policy-type.component'; -import { PolicyTypeDataSource } from './policy-type.datasource'; -import { PolicyTypeSchema } from '../../interfaces/policy.types'; +import { PolicyTypeComponent } from "./policy-type.component"; +import { PolicyType, PolicyTypeSchema } from "@interfaces/policy.types"; +import { PolicyService } from "@services/policy/policy.service"; +import { of } from "rxjs"; +import { MockComponent } from "ng-mocks"; +import { PolicyInstanceComponent } from "../policy-instance/policy-instance.component"; +import { By } from "@angular/platform-browser"; +import { Component, SimpleChange, ViewChild } from '@angular/core'; -describe('PolicyTypeComponent', () => { - let component: PolicyTypeComponent; - let fixture: ComponentFixture; +describe("PolicyTypeComponent", () => { + let component: TestPolicyTypeHostComponent; + let policyServiceSpy: jasmine.SpyObj; + let fixture: ComponentFixture; beforeEach(async(() => { - const policyTypeDataSourceSpy = jasmine.createSpyObj('PolicyTypeDataSource', ['getPolicyType']); - const policyTypeSchema = {"schemaObject": {"description": "Type 1 policy type"}} as PolicyTypeSchema; - policyTypeDataSourceSpy.getPolicyType.and.returnValue(policyTypeSchema); + policyServiceSpy = jasmine.createSpyObj("PolicyService", ["getPolicyType"]); + const policyTypeSchema = JSON.parse( + '{"title": "1", "description": "Type 1 policy type"}' + ); + const policyType = { policy_schema: policyTypeSchema } as PolicyType; + policyServiceSpy.getPolicyType.and.returnValue(of(policyType)); TestBed.configureTestingModule({ - declarations: [ PolicyTypeComponent ], - providers: [ - { provide: PolicyTypeDataSource, useValue: policyTypeDataSourceSpy } - ] - }) - .compileComponents(); + declarations: [ + PolicyTypeComponent, + MockComponent(PolicyInstanceComponent), + TestPolicyTypeHostComponent, + ], + providers: [{ provide: PolicyService, useValue: policyServiceSpy }], + }).compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(PolicyTypeComponent); + fixture = TestBed.createComponent(TestPolicyTypeHostComponent); component = fixture.componentInstance; fixture.detectChanges(); }); - it('should create', () => { + it("should create", () => { expect(component).toBeTruthy(); }); + + it("should not call service when no type, display correct type info and no PolicyInstanceComponent added", () => { + expect(policyServiceSpy.getPolicyType).not.toHaveBeenCalled(); + + expect(component.policyTypeComponent.policyType).toEqual("< No Type >"); + expect(component.policyTypeComponent.policyDescription).toEqual("Type with no schema"); + + const ele = fixture.debugElement.nativeElement.querySelector("nrcp-policy-instance"); + expect(ele).toBeFalsy(); +}); + + it("should call service when type, display correct type info and no PolicyInstanceComponent added", () => { + component.policyTypeComponent.policyTypeId = "type1"; + component.policyTypeComponent.loadTypeInfo(); + + expect(policyServiceSpy.getPolicyType).toHaveBeenCalledWith("type1"); + + expect(component.policyTypeComponent.policyType).toEqual("type1"); + expect(component.policyTypeComponent.policyDescription).toEqual("Type 1 policy type"); + + const ele = fixture.debugElement.nativeElement.querySelector("nrcp-policy-instance"); + expect(ele).toBeFalsy(); + }); + + it("should add PolicyInstanceComponent with correct data when toggle visible to visible", async () => { + const ele = fixture.debugElement.nativeElement.querySelector("#visible"); + expect(ele.innerText).toEqual("expand_more"); + + ele.click(); + fixture.detectChanges(); + + expect(ele.innerText).toEqual("expand_less"); + + const policyInstanceComp: PolicyInstanceComponent = fixture.debugElement.query( + By.directive(PolicyInstanceComponent) + ).componentInstance; + expect(policyInstanceComp).toBeTruthy(); + const expectedPolicyType = { + id: undefined, + name: undefined, + schemaObject: JSON.parse("{}") + } as PolicyTypeSchema; + expect(policyInstanceComp.policyTypeSchema).toEqual(expectedPolicyType); + }); + + it("should call ngOnChanges when minimiseTrigger is changed", async() => { + spyOn(component.policyTypeComponent, "ngOnChanges"); + component.minimiseTrigger = !component.minimiseTrigger; + fixture.detectChanges(); + expect(component.policyTypeComponent.ngOnChanges).toHaveBeenCalled(); + }); + + it("should close all tables when the types are refreshed", async() => { + const ele = fixture.debugElement.nativeElement.querySelector("#visible"); + ele.click(); + fixture.detectChanges(); + component.policyTypeComponent.ngOnChanges({ + minimiseTrigger: new SimpleChange(null, null, component.policyTypeComponent.minimiseTrigger) + }); + fixture.detectChanges(); + expect(ele.innerText).toEqual("expand_more"); + }); + + @Component({ + selector: `policy-type-host-component`, + template: ``, + }) + class TestPolicyTypeHostComponent { + @ViewChild(PolicyTypeComponent) + policyTypeComponent: PolicyTypeComponent; + minimiseTrigger: boolean = false; + } });