Add test coverage of PolicyTypeComponent
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy / policy-type / policy-type.component.ts
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2021 Nordix Foundation
6  * %%
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ========================LICENSE_END===================================
19  */
20
21 import { Component, Input, OnInit } from "@angular/core";
22 import { BehaviorSubject } from "rxjs";
23 import { PolicyType, PolicyTypeSchema } from "@interfaces/policy.types";
24 import { PolicyService } from "@app/services/policy/policy.service";
25
26 class PolicyTypeInfo {
27   constructor(public type: PolicyTypeSchema) {}
28
29   isExpanded: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
30 }
31
32 @Component({
33   selector: "nrcp-policy-type",
34   templateUrl: "./policy-type.component.html",
35   styleUrls: ["./policy-type.component.scss"],
36 })
37 export class PolicyTypeComponent implements OnInit {
38   @Input() policyTypeId: string;
39
40   isVisible: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
41
42   policyTypeInfo: PolicyTypeInfo;
43   policyType: string;
44   policyDescription: string;
45
46   constructor(private policyService: PolicyService) {}
47
48   ngOnInit(): void {
49     this.loadTypeInfo();
50     this.isVisible.next(false);
51   }
52
53   public loadTypeInfo() {
54     if (this.policyTypeId && this.policyTypeId !== "") {
55       this.policyService
56         .getPolicyType(this.policyTypeId)
57         .subscribe((policyType: PolicyType) => {
58           const policyTypeSchema = this.getSchemaObject(policyType);
59           this.policyTypeInfo = new PolicyTypeInfo(policyTypeSchema);
60           this.policyType = this.policyTypeId;
61           this.policyDescription = policyTypeSchema.schemaObject.description;
62         });
63     } else {
64       const noType = {
65         policy_schema: JSON.parse('{}'),
66       } as PolicyType;
67       const noTypeSchema = this.getSchemaObject(noType);
68       this.policyTypeInfo = new PolicyTypeInfo(noTypeSchema);
69       this.policyType = "< No Type >";
70       this.policyDescription = "Type with no schema";
71     }
72 }
73
74   private getSchemaObject(policyType: PolicyType) {
75     const policyTypeSchema = {} as PolicyTypeSchema;
76     policyTypeSchema.id = this.policyTypeId;
77     policyTypeSchema.schemaObject = policyType.policy_schema;
78     policyTypeSchema.name = policyType.policy_schema.title;
79     return policyTypeSchema;
80   }
81
82   public toggleVisible() {
83     this.isVisible.next(!this.isVisible.value);
84   }
85 }