// - // ========================LICENSE_START================================= // O-RAN-SC // %% // Copyright (C) 2021: Nordix Foundation // %% // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ========================LICENSE_END=================================== // import { HarnessLoader } from '@angular/cdk/testing'; import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; import { Component, ViewChild, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormBuilder, FormGroup } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatButtonHarness } from '@angular/material/button/testing'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatInputHarness } from '@angular/material/input/testing'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NoTypePolicyEditorComponent } from './no-type-policy-editor.component'; describe('NoTypePolicyEditorComponent', () => { let formGroup: FormGroup = new FormGroup({}); let component: TestNoTypePolicyEditorComponentHostComponent; let fixture: ComponentFixture; let loader: HarnessLoader; beforeEach(async () => { TestBed.configureTestingModule({ imports: [ BrowserModule, BrowserAnimationsModule, MatButtonModule, MatFormFieldModule, MatInputModule ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ], declarations: [ NoTypePolicyEditorComponent, TestNoTypePolicyEditorComponentHostComponent ], providers: [ FormBuilder ] }) .compileComponents(); fixture = TestBed.createComponent(TestNoTypePolicyEditorComponentHostComponent); component = fixture.componentInstance; fixture.detectChanges(); loader = TestbedHarnessEnvironment.loader(fixture); }); it('should create', () => { expect(component).toBeTruthy(); }); it('should be added to form group with required validator', async () => { let textArea: MatInputHarness = await loader.getHarness(MatInputHarness.with({ selector: '#policyJsonTextArea' })); expect(formGroup.get('policyJsonTextArea')).toBeTruthy(); expect(await textArea.isRequired()).toBeTruthy(); }); it('should contain provided policy json and enabled Format button', async () => { let textArea: MatInputHarness = await loader.getHarness(MatInputHarness.with({ selector: '#policyJsonTextArea' })); expect(await textArea.getValue()).toEqual('{"A":"A"}'); console.log('Validity:',formGroup.valid); let formatButton: MatButtonHarness = await loader.getHarness(MatButtonHarness.with({ selector: '#formatButton' })); expect(await formatButton.isDisabled()).toBeFalsy(); }); it('Format button should be disabled when json not valid', async () => { const ele = formGroup.get('policyJsonTextArea'); ele.setValue('{'); let formatButton: MatButtonHarness = await loader.getHarness(MatButtonHarness.with({ selector: '#formatButton' })); expect(await formatButton.isDisabled()).toBeTruthy(); }); it('should format unformatted json', async () => { const textArea = formGroup.get('policyJsonTextArea'); textArea.setValue('{"A":"A"}'); component.noTypePolicyEditorComponent.formatJsonInput(); expect(component.noTypePolicyEditorComponent.policyJson).toEqual('{\n "A": "A"\n}'); }); @Component({ selector: `no-type-policy-editor-host-component`, template: `` }) class TestNoTypePolicyEditorComponentHostComponent { @ViewChild(NoTypePolicyEditorComponent) noTypePolicyEditorComponent: NoTypePolicyEditorComponent; instanceForm: FormGroup = formGroup; policyJson: string = '{"A":"A"}'; } });