Add test coverage of PolicyTypeComponent 44/5844/2
authorelinuxhenrik <henrik.b.andersson@est.tech>
Wed, 31 Mar 2021 12:14:47 +0000 (14:14 +0200)
committerelinuxhenrik <henrik.b.andersson@est.tech>
Wed, 31 Mar 2021 12:47:12 +0000 (14:47 +0200)
Change-Id: Ie8b62cc8db279d4c3cb5fbc0301258576b4b095c
Issue-ID: NONRTRIC-471
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
webapp-frontend/src/app/policy/policy-type/policy-type.component.html
webapp-frontend/src/app/policy/policy-type/policy-type.component.spec.ts
webapp-frontend/src/app/policy/policy-type/policy-type.component.ts

index a94a3e9..ee8b2d0 100644 (file)
@@ -19,7 +19,7 @@
   -->
 
 <div fxLayout="row" fxLayoutGap="10px">
-  <div class="default-cursor" (click)="toggleVisible()">
+  <div id="visible" class="default-cursor" (click)="toggleVisible()">
     <mat-icon matTooltip="Properties">{{isVisible.value? 'expand_less' : 'expand_more'}}</mat-icon>
   </div>
   <div>
index d02f1b2..28e99b0 100644 (file)
 import { async, ComponentFixture, TestBed } from "@angular/core/testing";
 
 import { PolicyTypeComponent } from "./policy-type.component";
-import { PolicyType } from "@interfaces/policy.types";
+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";
 
 describe("PolicyTypeComponent", () => {
   let component: PolicyTypeComponent;
@@ -33,13 +36,16 @@ describe("PolicyTypeComponent", () => {
   beforeEach(async(() => {
     policyServiceSpy = jasmine.createSpyObj("PolicyService", ["getPolicyType"]);
     const policyTypeSchema = JSON.parse(
-      '{"schemaObject": {"description": "Type 1 policy type"}}'
+      '{"title": "1", "description": "Type 1 policy type"}'
     );
     const policyType = { policy_schema: policyTypeSchema } as PolicyType;
     policyServiceSpy.getPolicyType.and.returnValue(of(policyType));
 
     TestBed.configureTestingModule({
-      declarations: [PolicyTypeComponent],
+      declarations: [
+        PolicyTypeComponent,
+        MockComponent(PolicyInstanceComponent),
+      ],
       providers: [{ provide: PolicyService, useValue: policyServiceSpy }],
     }).compileComponents();
   }));
@@ -53,4 +59,49 @@ describe("PolicyTypeComponent", () => {
   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.policyType).toEqual("< No Type >");
+    expect(component.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();
+
+    expect(policyServiceSpy.getPolicyType).toHaveBeenCalledWith("type1");
+
+    expect(component.policyType).toEqual("type1");
+    expect(component.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);
+    expect(policyInstanceComp.expanded).toBeTruthy();
+  });
 });
index 7d82cb4..cfc0eb5 100644 (file)
@@ -46,7 +46,12 @@ export class PolicyTypeComponent implements OnInit {
   constructor(private policyService: PolicyService) {}
 
   ngOnInit(): void {
-    if (this.policyTypeId !== "") {
+    this.loadTypeInfo();
+    this.isVisible.next(false);
+  }
+
+  public loadTypeInfo() {
+    if (this.policyTypeId && this.policyTypeId !== "") {
       this.policyService
         .getPolicyType(this.policyTypeId)
         .subscribe((policyType: PolicyType) => {
@@ -57,15 +62,14 @@ export class PolicyTypeComponent implements OnInit {
         });
     } else {
       const noType = {
-        policy_schema: JSON.parse('{"schemaObject": "{}"}'),
+        policy_schema: JSON.parse('{}'),
       } as PolicyType;
       const noTypeSchema = this.getSchemaObject(noType);
       this.policyTypeInfo = new PolicyTypeInfo(noTypeSchema);
       this.policyType = "< No Type >";
       this.policyDescription = "Type with no schema";
     }
-    this.isVisible.next(false);
-  }
+}
 
   private getSchemaObject(policyType: PolicyType) {
     const policyTypeSchema = {} as PolicyTypeSchema;
@@ -75,10 +79,6 @@ export class PolicyTypeComponent implements OnInit {
     return policyTypeSchema;
   }
 
-  public setIsVisible(status: boolean) {
-    this.isVisible.next(status);
-  }
-
   public toggleVisible() {
     this.isVisible.next(!this.isVisible.value);
   }