From 44dea7b8b8d759a720f8a723c06c587385f86c1f Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 6 Jun 2019 09:05:57 -0700 Subject: [PATCH] SHIBUI-1267 unit tests --- .../metadata-configuration.component.spec.ts | 60 +++++++++++++++++ .../metadata-configuration.component.ts | 6 -- .../container/configuration.component.spec.ts | 64 +++++++++++++++++++ .../container/configuration.component.ts | 3 - .../reducer/configuration.reducer.spec.ts | 51 +++++++++++++++ .../configuration/reducer/index.spec.ts | 19 ++++++ .../domain/model/metadata-resolver.ts | 2 + 7 files changed, 196 insertions(+), 9 deletions(-) create mode 100644 ui/src/app/metadata/configuration/reducer/configuration.reducer.spec.ts create mode 100644 ui/src/app/metadata/configuration/reducer/index.spec.ts diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts index e69de29bb..f26c8d65c 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts @@ -0,0 +1,60 @@ +import { Component, ViewChild, Input } from '@angular/core'; +import { TestBed, async, ComponentFixture } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MetadataConfigurationComponent } from './metadata-configuration.component'; + +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { MetadataConfiguration } from '../model/metadata-configuration'; +import { Property } from '../../domain/model/property'; +import { MockI18nModule } from '../../../../testing/i18n.stub'; + +@Component({ + selector: 'object-property', + template: `` +}) +class ObjectPropertyComponent { + @Input() property: Property; +} + +@Component({ + template: ` + + ` +}) +class TestHostComponent { + @ViewChild(MetadataConfigurationComponent) + public componentUnderTest: MetadataConfigurationComponent; + + configuration: MetadataConfiguration = {sections: []}; +} + +describe('Metadata Configuration Component', () => { + + let fixture: ComponentFixture; + let instance: TestHostComponent; + let app: MetadataConfigurationComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + NgbDropdownModule, + MockI18nModule, + RouterTestingModule + ], + declarations: [ + MetadataConfigurationComponent, + ObjectPropertyComponent, + TestHostComponent + ], + }).compileComponents(); + + fixture = TestBed.createComponent(TestHostComponent); + instance = fixture.componentInstance; + app = instance.componentUnderTest; + fixture.detectChanges(); + })); + + it('should accept a configuration input', async(() => { + expect(app).toBeTruthy(); + })); +}); diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts index 6b3089f78..732b920d3 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts @@ -1,7 +1,5 @@ import { Component, ChangeDetectionStrategy, Input } from '@angular/core'; import { MetadataConfiguration } from '../model/metadata-configuration'; -import { Property } from '../../domain/model/property'; -import Section from '../model/section'; @Component({ selector: 'metadata-configuration', @@ -13,8 +11,4 @@ export class MetadataConfigurationComponent { @Input() configuration: MetadataConfiguration; constructor() { } - - edit(section: Section): void { - console.log(section); - } } diff --git a/ui/src/app/metadata/configuration/container/configuration.component.spec.ts b/ui/src/app/metadata/configuration/container/configuration.component.spec.ts index e69de29bb..a61db7b7c 100644 --- a/ui/src/app/metadata/configuration/container/configuration.component.spec.ts +++ b/ui/src/app/metadata/configuration/container/configuration.component.spec.ts @@ -0,0 +1,64 @@ +import { Component, ViewChild, Input } from '@angular/core'; +import { TestBed, async, ComponentFixture } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { StoreModule, combineReducers } from '@ngrx/store'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; + +import { MetadataConfiguration } from '../model/metadata-configuration'; +import { ConfigurationComponent } from './configuration.component'; +import * as fromConfiguration from '../reducer'; +import { MockI18nModule } from '../../../../testing/i18n.stub'; + +@Component({ + selector: 'metadata-configuration', + template: `` +}) +class MetadataConfigurationComponent { + @Input() configuration: MetadataConfiguration; +} + +@Component({ + template: ` + + ` +}) +class TestHostComponent { + @ViewChild(ConfigurationComponent) + public componentUnderTest: ConfigurationComponent; + + configuration: MetadataConfiguration = { sections: [] }; +} + +describe('Metadata Configuration Page Component', () => { + + let fixture: ComponentFixture; + let instance: TestHostComponent; + let app: ConfigurationComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + NgbDropdownModule, + StoreModule.forRoot({ + 'metadata-configuration': combineReducers(fromConfiguration.reducers), + }), + MockI18nModule, + RouterTestingModule + ], + declarations: [ + ConfigurationComponent, + MetadataConfigurationComponent, + TestHostComponent + ], + }).compileComponents(); + + fixture = TestBed.createComponent(TestHostComponent); + instance = fixture.componentInstance; + app = instance.componentUnderTest; + fixture.detectChanges(); + })); + + it('should load metadata objects', async(() => { + expect(app).toBeTruthy(); + })); +}); diff --git a/ui/src/app/metadata/configuration/container/configuration.component.ts b/ui/src/app/metadata/configuration/container/configuration.component.ts index eb52f60ba..e22f23861 100644 --- a/ui/src/app/metadata/configuration/container/configuration.component.ts +++ b/ui/src/app/metadata/configuration/container/configuration.component.ts @@ -5,7 +5,6 @@ import { ActivatedRoute } from '@angular/router'; import * as fromConfiguration from '../reducer'; import { MetadataConfiguration } from '../model/metadata-configuration'; -import { METADATA_SOURCE_EDITOR } from '../../resolver/wizard-definition'; import { takeUntil, map } from 'rxjs/operators'; import { LoadMetadataRequest, ClearConfiguration } from '../action/configuration.action'; @@ -30,8 +29,6 @@ export class ConfigurationComponent implements OnDestroy { takeUntil(this.ngUnsubscribe), map(params => new LoadMetadataRequest({id: params.id, type: params.type})) ).subscribe(store); - - this.configuration$.subscribe(c => console.log(c)); } ngOnDestroy() { diff --git a/ui/src/app/metadata/configuration/reducer/configuration.reducer.spec.ts b/ui/src/app/metadata/configuration/reducer/configuration.reducer.spec.ts new file mode 100644 index 000000000..b4d485fd0 --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/configuration.reducer.spec.ts @@ -0,0 +1,51 @@ +import { reducer } from './configuration.reducer'; +import * as fromConfig from './configuration.reducer'; +import * as actions from '../action/configuration.action'; +import { MetadataSourceEditor } from '../../domain/model/wizards/metadata-source-editor'; +import { SCHEMA } from '../../../../testing/form-schema.stub'; +import { MetadataResolver } from '../../domain/model'; + +describe('Configuration Reducer', () => { + const initialState: fromConfig.State = { ...fromConfig.initialState }; + + describe('undefined action', () => { + it('should return the default state', () => { + const result = reducer(undefined, {} as any); + + expect(result).toEqual(initialState); + }); + }); + + describe('SET_DEFINITION action', () => { + it('should set the state definition', () => { + const definition = new MetadataSourceEditor(); + const action = new actions.SetDefinition(definition); + const result = reducer(initialState, action); + + expect(result).toEqual({ ...initialState, definition }); + }); + }); + + describe('SET_SCHEMA action', () => { + it('should set the state schema', () => { + const action = new actions.SetSchema(SCHEMA); + const result = reducer(initialState, action); + + expect(result).toEqual({ ...initialState, schema: SCHEMA }); + }); + }); + + describe('SET_METADATA action', () => { + it('should set the state metadata model', () => { + const model: MetadataResolver = { + id: 'foo', + serviceProviderName: 'foo', + '@type': 'MetadataResolver' + }; + const action = new actions.SetMetadata(model as MetadataResolver); + const result = reducer(initialState, action); + + expect(result).toEqual({ ...initialState, model }); + }); + }); +}); diff --git a/ui/src/app/metadata/configuration/reducer/index.spec.ts b/ui/src/app/metadata/configuration/reducer/index.spec.ts new file mode 100644 index 000000000..5a675621c --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/index.spec.ts @@ -0,0 +1,19 @@ +import { getConfigurationSectionsFn } from './index'; +import { SCHEMA as schema } from '../../../../testing/form-schema.stub'; +import { MetadataSourceEditor } from '../../domain/model/wizards/metadata-source-editor'; + +describe('Configuration Reducer', () => { + const model = { + name: 'foo', + '@type': 'MetadataResolver' + }; + + const definition = new MetadataSourceEditor(); + + describe('getConfigurationSectionsFn', () => { + it('should parse the schema, definition, and model into a MetadataConfiguration', () => { + const config = getConfigurationSectionsFn(model, definition, schema); + expect(config.sections).toBeDefined(); + }); + }); +}); diff --git a/ui/src/app/metadata/domain/model/metadata-resolver.ts b/ui/src/app/metadata/domain/model/metadata-resolver.ts index 01505cff5..e97c08d07 100644 --- a/ui/src/app/metadata/domain/model/metadata-resolver.ts +++ b/ui/src/app/metadata/domain/model/metadata-resolver.ts @@ -25,4 +25,6 @@ export interface MetadataResolver extends MetadataBase { serviceEnabled?: boolean; relyingPartyOverrides?: RelyingPartyOverrides; attributeRelease?: string[]; + + [property: string]: unknown; }