Add test coverage of PolicyInstanceCompnent
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy / policy-type / policy-type.component.spec.ts
index 4276ad3..859e1f8 100644 (file)
  * ========================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";
 
-describe('PolicyTypeComponent', () => {
+describe("PolicyTypeComponent", () => {
   let component: PolicyTypeComponent;
+  let policyServiceSpy: jasmine.SpyObj<PolicyService>;
   let fixture: ComponentFixture<PolicyTypeComponent>;
 
   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),
+      ],
+      providers: [{ provide: PolicyService, useValue: policyServiceSpy }],
+    }).compileComponents();
   }));
 
   beforeEach(() => {
@@ -48,7 +56,51 @@ describe('PolicyTypeComponent', () => {
     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.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);
+  });
 });