Add test coverage to NoTypePolicyInstanceDialog
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy-control / no-type-policy-instance-dialog.component.ts
index 8c2a114..1d525c2 100644 (file)
  */
 import { Component, Inject, OnInit } from '@angular/core';
 import { FormControl, FormGroup, Validators, ValidatorFn, AbstractControl } from '@angular/forms';
-import { MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
 import { PolicyService } from '../services/policy/policy.service';
 import { NotificationService } from '../services/ui/notification.service';
 import { UiService } from '../services/ui/ui.service';
 import { HttpErrorResponse } from '@angular/common/http';
 import { ErrorDialogService } from '../services/ui/error-dialog.service';
 import * as uuid from 'uuid';
+import { Rics } from '../interfaces/ric';
+import { CreatePolicyInstance } from '../interfaces/policy.types';
 
 @Component({
-  selector: 'rd-no-type-policy-instance-dialog',
+  selector: 'nrcp-no-type-policy-instance-dialog',
   templateUrl: './no-type-policy-instance-dialog.component.html',
   styleUrls: ['./no-type-policy-instance-dialog.component.scss']
 })
@@ -39,9 +41,10 @@ export class NoTypePolicyInstanceDialogComponent implements OnInit {
   policyJson: string;
   darkMode: boolean;
   ric: string;
-  allRics: string[];
+  allRicIds: string[] = [];
 
   constructor(
+    public dialogRef: MatDialogRef<NoTypePolicyInstanceDialogComponent>,
     private policySvc: PolicyService,
     private errorService: ErrorDialogService,
     private notificationService: NotificationService,
@@ -66,7 +69,7 @@ export class NoTypePolicyInstanceDialogComponent implements OnInit {
       ])
     });
     if (!this.policyInstanceId) {
-      this.fetchRics();
+      this.getRicIds();
     }
   }
 
@@ -76,13 +79,15 @@ export class NoTypePolicyInstanceDialogComponent implements OnInit {
 
   onSubmit() {
     if (this.policyInstanceId == null) {
-        this.policyInstanceId = uuid.v4();
+      this.policyInstanceId = uuid.v4();
     }
     const self: NoTypePolicyInstanceDialogComponent = this;
-    this.policySvc.putPolicy('', this.policyInstanceId, this.policyJsonTextArea.value, this.ric).subscribe(
+    let createPolicyInstance: CreatePolicyInstance = this.createPolicyInstance(this.policyJsonTextArea.value);
+    this.policySvc.putPolicy(createPolicyInstance).subscribe(
       {
         next(_) {
           self.notificationService.success('Policy without type:' + self.policyInstanceId + ' submitted');
+          self.dialogRef.close();
         },
         error(error: HttpErrorResponse) {
           self.errorService.displayError('Submit failed: ' + error.error);
@@ -91,28 +96,35 @@ export class NoTypePolicyInstanceDialogComponent implements OnInit {
       });
   }
 
-  private fetchRics() {
+  private createPolicyInstance(policyJson: string): CreatePolicyInstance {
+    let createPolicyInstance = {} as CreatePolicyInstance;
+    createPolicyInstance.policy_data = JSON.parse(policyJson);
+    createPolicyInstance.policy_id = this.policyInstanceId;
+    createPolicyInstance.policytype_id = '';
+    createPolicyInstance.ric_id = (!this.ricSelector.value.ric_id) ? this.ric : this.ricSelector.value.ric_id;
+    createPolicyInstance.service_id = 'controlpanel';
+    return createPolicyInstance;
+  }
+
+  getRicIds() {
     const self: NoTypePolicyInstanceDialogComponent = this;
     this.policySvc.getRics('').subscribe(
       {
-        next(value) {
-          self.allRics = value;
-          console.log(value);
-        },
-        error(error: HttpErrorResponse) {
-          self.errorService.displayError('Fetching of rics failed: ' + error.message);
-        },
-        complete() { }
+        next(value: Rics) {
+          value.rics.forEach(ric => {
+            self.allRicIds.push(ric.ric_id);
+          });
+        }
       });
   }
 
private formatJsonString(jsonToFormat: string) {
-   return JSON.stringify(JSON.parse(jsonToFormat), null, 2);
- }
 private formatJsonString(jsonToFormat: any): string {
+    return JSON.stringify(jsonToFormat, null, 2);
 }
 
- formatJsonInput() {
-   this.policyJson = this.formatJsonString(this.policyJsonTextArea.value);
- }
 formatJsonInput() {
+    this.policyJson = this.formatJsonString(JSON.parse(this.policyJsonTextArea.value));
 }
 }
 
 export function jsonValidator(): ValidatorFn {
@@ -122,11 +134,13 @@ export function jsonValidator(): ValidatorFn {
   };
 }
 
-export function isJsonValid(json: string) {
+export function isJsonValid(json: string): boolean {
   try {
     if (json != null) {
       JSON.parse(json);
       return true;
+    } else {
+      return false;
     }
   } catch (jsonError) {
     return false;