X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fpolicy%2Fpolicy-instance-dialog%2Fpolicy-instance-dialog.component.spec.ts;h=e9b4c58aebbdb2681933096b88d3dbb5ddfc371b;hb=a2a4491f5e44b5979f0d84a3065bcf76f3b01b93;hp=e8038edb14601e7d74266c1da2efd96c005f6801;hpb=ffb56b1ee4e3c4d95cd574c29159181b726db38b;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/policy/policy-instance-dialog/policy-instance-dialog.component.spec.ts b/webapp-frontend/src/app/policy/policy-instance-dialog/policy-instance-dialog.component.spec.ts index e8038ed..e9b4c58 100644 --- a/webapp-frontend/src/app/policy/policy-instance-dialog/policy-instance-dialog.component.spec.ts +++ b/webapp-frontend/src/app/policy/policy-instance-dialog/policy-instance-dialog.component.spec.ts @@ -42,26 +42,17 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, + Input, } from "@angular/core"; import { TypedPolicyEditorComponent } from "../typed-policy-editor/typed-policy-editor.component"; import { RicSelectorComponent } from "../ric-selector/ric-selector.component"; import { NoTypePolicyEditorComponent } from "../no-type-policy-editor/no-type-policy-editor.component"; -import { PolicyTypeSchema } from "../../interfaces/policy.types"; +import { By } from "@angular/platform-browser"; describe("PolicyInstanceDialogComponent", () => { const untypedSchema = "{}"; - const untypedSchemaObject = { - id: "", - name: "", - schemaObject: untypedSchema, - } as PolicyTypeSchema; const typedSchema = - '{ "description": "Type 1 policy type", "title": "1", "type": "object", "properties": { "priorityLevel": "number" }, "required": [ "priorityLevel" ]}'; - const typedSchemaObject = { - id: "Type 1", - name: "Type 1", - schemaObject: typedSchema, - } as PolicyTypeSchema; + '{ "description": "Type 1 policy type", "title": "1", "type": "object", "properties": { "priorityLevel": "number" }}'; let component: PolicyInstanceDialogComponent; let fixture: ComponentFixture; @@ -106,7 +97,7 @@ describe("PolicyInstanceDialogComponent", () => { describe("content when creating policy without type", () => { beforeEach(async () => { const policyData = { - createSchema: untypedSchemaObject, + createSchema: untypedSchema, }; TestBed.overrideProvider(MAT_DIALOG_DATA, { useValue: policyData }); // Should be provided with a policy ({ fixture, component, loader } = compileAndGetComponents( @@ -129,21 +120,23 @@ describe("PolicyInstanceDialogComponent", () => { expect(ele).toBeFalsy(); }); - it("should contain ric select", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-ric-selector" - ); - expect(ele).toBeTruthy(); + it("should contain ric select with no policy type", async () => { + const ricSelector: RicSelectorComponent = fixture.debugElement.query( + By.directive(RicSelectorComponent) + ).componentInstance; + expect(ricSelector).toBeTruthy(); + expect(ricSelector.policyTypeName).toBeFalsy(); }); - it("should contain json editor", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-no-type-policy-editor" - ); - expect(ele).toBeTruthy(); + it("should contain json editor with empty JSON", async () => { + const noTypePolicyEditor: NoTypePolicyEditorComponent = fixture.debugElement.query( + By.directive(NoTypePolicyEditorComponent) + ).componentInstance; + expect(noTypePolicyEditor).toBeTruthy(); + expect(noTypePolicyEditor.policyJson).toEqual("{}"); }); - it("should contain enabled Close button and disabled Submit button", async () => { + it("should contain enabled Close button and Submit button", async () => { component.ngOnInit(); let closeButton: MatButtonHarness = await loader.getHarness( @@ -155,7 +148,6 @@ describe("PolicyInstanceDialogComponent", () => { let submitButton: MatButtonHarness = await loader.getHarness( MatButtonHarness.with({ selector: "#submitButton" }) ); - // expect(await submitButton.isDisabled()).toBeTruthy(); expect(await submitButton.getText()).toEqual("Submit"); }); }); @@ -164,7 +156,7 @@ describe("PolicyInstanceDialogComponent", () => { beforeEach(async () => { const policyData = { name: "Type 1", - createSchema: typedSchemaObject, + createSchema: typedSchema, }; TestBed.overrideProvider(MAT_DIALOG_DATA, { useValue: policyData }); // Should be provided with a policy ({ fixture, component, loader } = compileAndGetComponents( @@ -187,21 +179,25 @@ describe("PolicyInstanceDialogComponent", () => { expect(ele).toBeFalsy(); }); - it("should contain ric select", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-ric-selector" - ); - expect(ele).toBeTruthy(); + it("should contain ric select with provided policy type", async () => { + const ricSelector: RicSelectorComponent = fixture.debugElement.query( + By.directive(RicSelectorComponent) + ).componentInstance; + expect(ricSelector).toBeTruthy(); + expect(ricSelector.policyTypeName).toEqual("Type 1"); }); - it("should contain typed json editor", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-typed-policy-editor" - ); - expect(ele).toBeTruthy(); + it("should contain typed json editor with empty JSON, schema and dark mode true", async () => { + const typedPolicyEditor: TypedPolicyEditorComponent = fixture.debugElement.query( + By.directive(TypedPolicyEditorComponent) + ).componentInstance; + expect(typedPolicyEditor).toBeTruthy(); + expect(typedPolicyEditor.jsonObject).toBeFalsy(); + expect(typedPolicyEditor.jsonSchemaObject).toEqual(typedSchema); + expect(typedPolicyEditor.darkMode).toBeTruthy(); }); - it("should contain enabled Close button and disabled Submit button", async () => { + it("should contain enabled Close button and Submit button", async () => { component.ngOnInit(); let closeButton: MatButtonHarness = await loader.getHarness( @@ -213,17 +209,17 @@ describe("PolicyInstanceDialogComponent", () => { let submitButton: MatButtonHarness = await loader.getHarness( MatButtonHarness.with({ selector: "#submitButton" }) ); - // expect(await submitButton.isDisabled()).toBeTruthy(); expect(await submitButton.getText()).toEqual("Submit"); }); }); describe("content when editing policy without type", () => { + const instanceJson = '{"qosObjectives": {"priorityLevel": 3100}}'; beforeEach(async () => { const policyData = { - createSchema: untypedSchemaObject, + createSchema: untypedSchema, instanceId: "instanceId", - instanceJson: '{"qosObjectives": {"priorityLevel": 3100}}', + instanceJson: instanceJson, name: "Type 1", ric: "ric1", }; @@ -248,20 +244,23 @@ describe("PolicyInstanceDialogComponent", () => { }); it("should not contain ric select", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-ric-selector" + const ricSelector = fixture.debugElement.query( + By.directive(RicSelectorComponent) ); - expect(ele).toBeFalsy(); + expect(ricSelector).toBeFalsy(); }); - it("should contain json editor", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-no-type-policy-editor" + it("should contain json editor with json data", async () => { + const noTypePolicyEditor: NoTypePolicyEditorComponent = fixture.debugElement.query( + By.directive(NoTypePolicyEditorComponent) + ).componentInstance; + expect(noTypePolicyEditor).toBeTruthy(); + expect(unescapeQuotes(noTypePolicyEditor.policyJson)).toEqual( + '"' + instanceJson + '"' ); - expect(ele).toBeTruthy(); }); - it("should contain enabled Close and Submit buttons", async () => { + it("should contain enabled Close and Submit buttons when all inputs are valid", async () => { let closeButton: MatButtonHarness = await loader.getHarness( MatButtonHarness.with({ selector: "#closeButton" }) ); @@ -277,11 +276,12 @@ describe("PolicyInstanceDialogComponent", () => { }); describe("content when editing policy with type", () => { + const instanceJson = '{"qosObjectives": {"priorityLevel": 3100}}'; beforeEach(async () => { const policyData = { - createSchema: typedSchemaObject, + createSchema: typedSchema, instanceId: "instanceId", - instanceJson: '{"qosObjectives": {"priorityLevel": 3100}}', + instanceJson: instanceJson, name: "name", ric: "ric1", }; @@ -306,20 +306,25 @@ describe("PolicyInstanceDialogComponent", () => { }); it("should not contain ric select", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-ric-selector" + const ricSelector = fixture.debugElement.query( + By.directive(RicSelectorComponent) ); - expect(ele).toBeFalsy(); + expect(ricSelector).toBeFalsy(); }); - it("should contain typed json editor", async () => { - const ele = fixture.debugElement.nativeElement.querySelector( - "nrcp-typed-policy-editor" + it("should contain typed json editor with instance JSON, schema and dark mode true", async () => { + const typedPolicyEditor: TypedPolicyEditorComponent = fixture.debugElement.query( + By.directive(TypedPolicyEditorComponent) + ).componentInstance; + expect(typedPolicyEditor).toBeTruthy(); + expect(unescapeQuotes(typedPolicyEditor.jsonObject)).toEqual( + instanceJson ); - expect(ele).toBeTruthy(); + expect(typedPolicyEditor.jsonSchemaObject).toEqual(typedSchema); + expect(typedPolicyEditor.darkMode).toBeTruthy(); }); - it("should contain enabled Close and Submit buttons", async () => { + it("should contain enabled Close and Submit buttons when all inputs are valid", async () => { let closeButton: MatButtonHarness = await loader.getHarness( MatButtonHarness.with({ selector: "#closeButton" }) ); @@ -349,14 +354,23 @@ function compileAndGetComponents( return { fixture, component, loader }; } +function unescapeQuotes(string: string): string { + return string.replace(/\\"/g, '"'); +} + @Component({ - selector: "nrcp-ric-selecor", + selector: "nrcp-ric-selector", template: "", providers: [ - { provide: RicSelectorComponent, useClass: RicSelectorStubComponent }, + { + provide: RicSelectorComponent, + useClass: RicSelectorStubComponent, + }, ], }) class RicSelectorStubComponent { + @Input() policyTypeName: string = ""; + get selectedRic(): string { return "ric1"; } @@ -373,6 +387,8 @@ class RicSelectorStubComponent { ], }) class NoTypePolicyEditorStubComponent { + @Input() policyJson: string; + get policyJsonTextArea(): AbstractControl { const textArea = { value: "{}" } as AbstractControl; return textArea; @@ -390,6 +406,11 @@ class NoTypePolicyEditorStubComponent { ], }) class TypedPolicyEditorStubComponent { + @Input() jsonSchemaObject: any = {}; + @Input() jsonObject: any = {}; + @Input() darkMode: boolean; + + prettyLiveFormData = '"A": "string"'; get formIsValid(): boolean { return true; }