Add coverage of TypedPolicyEditorComponent
Change-Id: I0ed6260dc8cd50a79e34a5486ff8c7d753b09220
Issue-ID: NONRTRIC-494
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
diff --git a/webapp-frontend/src/app/interceptor.mock.ts b/webapp-frontend/src/app/interceptor.mock.ts
index 42e6855..7163412 100644
--- a/webapp-frontend/src/app/interceptor.mock.ts
+++ b/webapp-frontend/src/app/interceptor.mock.ts
@@ -115,6 +115,10 @@
json: "",
},
{
+ url: "/a1-policy/v2/rics?policytype_id=0",
+ json: ric1,
+ },
+ {
url: "/a1-policy/v2/rics?policytype_id=1",
json: ric1,
},
diff --git a/webapp-frontend/src/app/policy/typed-policy-editor/typed-policy-editor.component.spec.ts b/webapp-frontend/src/app/policy/typed-policy-editor/typed-policy-editor.component.spec.ts
index fc4a166..d3b8263 100644
--- a/webapp-frontend/src/app/policy/typed-policy-editor/typed-policy-editor.component.spec.ts
+++ b/webapp-frontend/src/app/policy/typed-policy-editor/typed-policy-editor.component.spec.ts
@@ -22,14 +22,15 @@
import { Component } from "@angular/core";
import { ComponentFixture, TestBed } from "@angular/core/testing";
import { MatIconModule } from "@angular/material/icon";
-import { BrowserModule } from "@angular/platform-browser";
+import { BrowserModule, By } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { TypedPolicyEditorComponent } from "./typed-policy-editor.component";
describe("TypedPolicyEditorComponent", () => {
- let component: TestTypedPolicyEditorComponentHostComponent;
- let fixture: ComponentFixture<TestTypedPolicyEditorComponentHostComponent>;
+ let hostComponent: TestTypedPolicyEditorComponentHostComponent;
+ let componentUnderTest: TypedPolicyEditorComponent;
+ let hostFixture: ComponentFixture<TestTypedPolicyEditorComponentHostComponent>;
beforeEach(async () => {
TestBed.configureTestingModule({
@@ -43,119 +44,199 @@
});
beforeEach(() => {
- fixture = TestBed.createComponent(
+ hostFixture = TestBed.createComponent(
TestTypedPolicyEditorComponentHostComponent
);
- component = fixture.componentInstance;
- fixture.detectChanges();
+ hostComponent = hostFixture.componentInstance;
+ componentUnderTest = hostFixture.debugElement.query(
+ By.directive(TypedPolicyEditorComponent)
+ ).componentInstance;
+ hostFixture.detectChanges();
});
it("should create", () => {
- expect(component).toBeTruthy();
+ expect(hostComponent).toBeTruthy();
});
it("should have JSON form visible and JSON and JSON Schema not visible", () => {
- let propertiesHeading = fixture.debugElement.nativeElement.querySelector(
+ let propertiesHeading = hostFixture.debugElement.nativeElement.querySelector(
"#propertiesHeading"
);
expect(propertiesHeading).toBeTruthy();
expect(propertiesHeading.innerText).toContain("Properties");
- let propertiesIcon = fixture.debugElement.nativeElement.querySelector(
+
+ let propertiesIcon = hostFixture.debugElement.nativeElement.querySelector(
"#propertiesIcon"
);
expect(propertiesIcon).toBeTruthy();
expect(propertiesIcon.innerText).toEqual("expand_less");
- let jsonForm = fixture.debugElement.nativeElement.querySelector(
+
+ let jsonForm = hostFixture.debugElement.nativeElement.querySelector(
"json-schema-form"
);
expect(jsonForm).toBeTruthy();
- let jsonHeading = fixture.debugElement.nativeElement.querySelector(
+ let jsonHeading = hostFixture.debugElement.nativeElement.querySelector(
"#jsonHeading"
);
expect(jsonHeading).toBeTruthy();
expect(jsonHeading.innerText).toContain("JSON");
- let jsonIcon = fixture.debugElement.nativeElement.querySelector(
+
+ let jsonIcon = hostFixture.debugElement.nativeElement.querySelector(
"#jsonIcon"
);
expect(jsonIcon).toBeTruthy();
expect(jsonIcon.innerText).toEqual("expand_more");
- let jsonDiv = fixture.debugElement.nativeElement.querySelector("#jsonDiv");
+
+ let jsonDiv = hostFixture.debugElement.nativeElement.querySelector(
+ "#jsonDiv"
+ );
expect(jsonDiv).toBeFalsy();
- let schemaHeading = fixture.debugElement.nativeElement.querySelector(
+ let schemaHeading = hostFixture.debugElement.nativeElement.querySelector(
"#schemaHeading"
);
expect(schemaHeading).toBeTruthy();
expect(schemaHeading.innerText).toContain("JSON Schema");
- let schemaIcon = fixture.debugElement.nativeElement.querySelector(
+
+ let schemaIcon = hostFixture.debugElement.nativeElement.querySelector(
"#schemaIcon"
);
expect(schemaIcon).toBeTruthy();
expect(schemaIcon.innerText).toEqual("expand_more");
- let schemaDiv = fixture.debugElement.nativeElement.querySelector(
+
+ let schemaDiv = hostFixture.debugElement.nativeElement.querySelector(
"#schemaDiv"
);
expect(schemaDiv).toBeFalsy();
});
it("should hide JSON form", () => {
- let propertiesHeading = fixture.debugElement.nativeElement.querySelector(
+ let propertiesHeading = hostFixture.debugElement.nativeElement.querySelector(
"#propertiesHeading"
);
expect(propertiesHeading).toBeTruthy();
propertiesHeading.click();
- fixture.detectChanges();
+ hostFixture.detectChanges();
- let propertiesIcon = fixture.debugElement.nativeElement.querySelector(
+ let propertiesIcon = hostFixture.debugElement.nativeElement.querySelector(
"#propertiesIcon"
);
expect(propertiesIcon).toBeTruthy();
expect(propertiesIcon.innerText).toEqual("expand_more");
- let propertiesDiv = fixture.debugElement.nativeElement.querySelector(
+
+ let propertiesDiv = hostFixture.debugElement.nativeElement.querySelector(
"propertiesDiv"
);
expect(propertiesDiv).toBeFalsy();
});
- it("should show JSON with text for dark mode", () => {
- let jsonHeading = fixture.debugElement.nativeElement.querySelector(
+ it("should show JSON with text for dark mode and correct content", () => {
+ let jsonHeading = hostFixture.debugElement.nativeElement.querySelector(
"#jsonHeading"
);
expect(jsonHeading).toBeTruthy();
jsonHeading.click();
- fixture.detectChanges();
+ hostFixture.detectChanges();
- let jsonIcon = fixture.debugElement.nativeElement.querySelector(
+ let jsonIcon = hostFixture.debugElement.nativeElement.querySelector(
"#jsonIcon"
);
expect(jsonIcon).toBeTruthy();
expect(jsonIcon.innerText).toEqual("expand_less");
- let jsonDiv = fixture.debugElement.nativeElement.querySelector("#jsonDiv");
+
+ componentUnderTest.onChanges('{ "qosObjectives": "test" }');
+ hostFixture.detectChanges();
+
+ let jsonDiv = hostFixture.debugElement.nativeElement.querySelector(
+ "#jsonDiv"
+ );
expect(jsonDiv).toBeTruthy();
let jsonText = jsonDiv.querySelector("pre");
expect(jsonText.classList).toContain("text__dark");
+ expect(jsonText.innerText).toEqual('"{ \\"qosObjectives\\": \\"test\\" }"');
});
- it("should show JSON Schema with text for dark mode", () => {
- let schemaHeading = fixture.debugElement.nativeElement.querySelector(
+ it("should present error info in JSON div", () => {
+ const errors = [
+ {
+ keyword: "required",
+ dataPath: "/scope/qosObjectives",
+ schemaPath: "#/properties/scope/qosObjectives/required",
+ params: { missingProperty: "priorityLevel" },
+ message: "should have required property 'priorityLevel'",
+ },
+ ];
+ componentUnderTest.validationErrors(errors);
+ hostFixture.detectChanges();
+ componentUnderTest.prettyValidationErrors;
+ hostFixture.detectChanges();
+
+ // Show the JSON
+ let jsonHeading = hostFixture.debugElement.nativeElement.querySelector(
+ "#jsonHeading"
+ );
+ expect(jsonHeading).toBeTruthy();
+ jsonHeading.click();
+ hostFixture.detectChanges();
+
+ let jsonDiv = hostFixture.debugElement.nativeElement.querySelector(
+ "#jsonDiv"
+ );
+ expect(jsonDiv.innerText).toContain("Not valid — errors:");
+ expect(jsonDiv.innerText).toContain(
+ "scope.qosObjectives: should have required property 'priorityLevel'"
+ );
+ });
+
+ it("should show JSON Schema with text for dark mode and correct content", () => {
+ let schemaHeading = hostFixture.debugElement.nativeElement.querySelector(
"#schemaHeading"
);
expect(schemaHeading).toBeTruthy();
schemaHeading.click();
- fixture.detectChanges();
+ hostFixture.detectChanges();
- let schemaIcon = fixture.debugElement.nativeElement.querySelector(
+ let schemaIcon = hostFixture.debugElement.nativeElement.querySelector(
"#schemaIcon"
);
expect(schemaIcon).toBeTruthy();
expect(schemaIcon.innerText).toEqual("expand_less");
- let schemaDiv = fixture.debugElement.nativeElement.querySelector(
+
+ componentUnderTest.schemaAsString;
+ hostFixture.detectChanges();
+ let schemaDiv = hostFixture.debugElement.nativeElement.querySelector(
"#schemaDiv"
);
expect(schemaDiv).toBeTruthy();
+
let jsonSchemaText = schemaDiv.querySelector("pre");
expect(jsonSchemaText.classList).toContain("text__dark");
+ expect(jsonSchemaText.innerText).toContain('qosObjectives: {');
+ });
+
+ it("should send a valid json", () => {
+ let emittedValidJson: string;
+ componentUnderTest.validJson.subscribe((json: string) => {
+ emittedValidJson = json;
+ });
+
+ componentUnderTest.onChanges('{ "qosObjectives": "test" }');
+ hostFixture.detectChanges();
+ componentUnderTest.isValid(true);
+
+ expect(emittedValidJson).toEqual('"{ \\"qosObjectives\\": \\"test\\" }"');
+ });
+
+ it("should send null when invalid json", () => {
+ let emittedValidJson: string;
+ componentUnderTest.validJson.subscribe((json: string) => {
+ emittedValidJson = json;
+ });
+
+ componentUnderTest.isValid(false);
+
+ expect(emittedValidJson).toBeFalsy();
});
@Component({
@@ -167,8 +248,8 @@
></nrcp-typed-policy-editor>`,
})
class TestTypedPolicyEditorComponentHostComponent {
- policyJson: string = '{"A":"A"}';
+ policyJson: string = "{ jsonSchemaObject: 'test' }";
jsonSchemaObject: string =
- 'policy_schema": { "description": "Type 1 policy type", "title": "1", "type": "object", "properties": { "A": "string" }, "required": [ "A" ]}';
+ "{type: 'object',properties: {qosObjectives: {additionalProperties: false,type: 'object',properties: {priorityLevel: {type: 'number'}},required: ['priorityLevel']}},required: ['qosObjectives']}";
}
});