CI: Migrate Sonar Scan job to GHA
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy / policy-type / policy-type.component.spec.ts
index 859e1f8..b5db979 100644 (file)
@@ -27,11 +27,12 @@ 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 component: TestPolicyTypeHostComponent;
   let policyServiceSpy: jasmine.SpyObj<PolicyService>;
-  let fixture: ComponentFixture<PolicyTypeComponent>;
+  let fixture: ComponentFixture<TestPolicyTypeHostComponent>;
 
   beforeEach(async(() => {
     policyServiceSpy = jasmine.createSpyObj("PolicyService", ["getPolicyType"]);
@@ -45,13 +46,14 @@ describe("PolicyTypeComponent", () => {
       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();
   });
@@ -63,21 +65,21 @@ describe("PolicyTypeComponent", () => {
   it("should not call service when no type, display correct type info and no PolicyInstanceComponent added", () => {
     expect(policyServiceSpy.getPolicyType).not.toHaveBeenCalled();
 
-    expect(component.policyType).toEqual("< No Type >");
-    expect(component.policyDescription).toEqual("Type with no schema");
+    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.policyTypeId = "type1";
-    component.loadTypeInfo();
+    component.policyTypeComponent.policyTypeId = "type1";
+    component.policyTypeComponent.loadTypeInfo();
 
     expect(policyServiceSpy.getPolicyType).toHaveBeenCalledWith("type1");
 
-    expect(component.policyType).toEqual("type1");
-    expect(component.policyDescription).toEqual("Type 1 policy type");
+    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();
@@ -103,4 +105,34 @@ describe("PolicyTypeComponent", () => {
     } 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: `<nrcp-policy-type
+      [minimiseTrigger]="this.minimiseTrigger"
+    ></nrcp-policy-type>`,
+  })
+  class TestPolicyTypeHostComponent {
+    @ViewChild(PolicyTypeComponent)
+    policyTypeComponent: PolicyTypeComponent;
+    minimiseTrigger: boolean = false;
+  }
 });