diff --git a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts index 09e549f4f..6049e344b 100644 --- a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts +++ b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.spec.ts @@ -1,14 +1,44 @@ import { TestBed, ComponentFixture } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { ViewChild, Component } from '@angular/core'; +import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; +import { Observable, of } from 'rxjs'; import { ProviderValueEmitter, ProviderStatusEmitter } from '../../../domain/service/provider-change-emitter.service'; import { AdvancedInfoFormComponent } from './advanced-info-form.component'; -import { NgbPopoverModule, NgbPopoverConfig } from '@ng-bootstrap/ng-bootstrap/popover/popover.module'; import * as stubs from '../../../../../testing/resolver.stub'; +import { FileBackedHttpMetadataResolver } from '../../entity'; + +@Component({ + template: `` +}) +class TestHostComponent { + + ids$: Observable = of(['foo']); + resolver = new FileBackedHttpMetadataResolver({ + ...stubs.resolver, + serviceProviderSsoDescriptor: { + protocolSupportEnum: 'foo', + nameIdFormats: [] + } + }); + + @ViewChild(AdvancedInfoFormComponent) + public formUnderTest: AdvancedInfoFormComponent; + + changeProvider(opts: any): void { + this.resolver = Object.assign({}, this.resolver, opts); + } + + addFormat(value: string): void { + this.resolver.serviceProviderSsoDescriptor.nameIdFormats.push(value); + } +} + describe('Advanced Info Form Component', () => { - let fixture: ComponentFixture; - let instance: AdvancedInfoFormComponent; + let fixture: ComponentFixture; + let instance: TestHostComponent; beforeEach(() => { TestBed.configureTestingModule({ @@ -23,11 +53,12 @@ describe('Advanced Info Form Component', () => { NgbPopoverModule ], declarations: [ - AdvancedInfoFormComponent + AdvancedInfoFormComponent, + TestHostComponent ], }); - fixture = TestBed.createComponent(AdvancedInfoFormComponent); + fixture = TestBed.createComponent(TestHostComponent); instance = fixture.componentInstance; fixture.detectChanges(); }); @@ -38,37 +69,34 @@ describe('Advanced Info Form Component', () => { describe('ngOnChanges method', () => { it('should set properties on the resolver', () => { - instance.resolver = stubs.resolver; + instance.changeProvider(stubs.resolver); fixture.detectChanges(); - instance.ngOnChanges(); - expect(instance.resolver.organization).toEqual({}); - expect(instance.resolver.contacts).toEqual([]); + expect(instance.formUnderTest.resolver.organization).toEqual({}); + expect(instance.formUnderTest.resolver.contacts).toEqual([]); }); }); describe('removeContact method', () => { it('should remove the contact at the given index', () => { - instance.resolver = { + instance.changeProvider({ ...stubs.resolver, contacts: [stubs.contact] - }; + }); fixture.detectChanges(); - instance.ngOnChanges(); - instance.removeContact(0); - expect(instance.contacts.length).toBe(0); + instance.formUnderTest.removeContact(0); + expect(instance.formUnderTest.contacts.length).toBe(0); }); }); describe('addContact method', () => { it('should remove the contact at the given index', () => { - instance.resolver = { + instance.changeProvider({ ...stubs.resolver, contacts: [stubs.contact] - }; + }); fixture.detectChanges(); - instance.ngOnChanges(); - instance.addContact(); - expect(instance.contacts.length).toBe(2); + instance.formUnderTest.addContact(); + expect(instance.formUnderTest.contacts.length).toBe(2); }); }); }); diff --git a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts index e5a1039a5..d0ce28c2c 100644 --- a/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts +++ b/ui/src/app/metadata/domain/component/forms/advanced-info-form.component.ts @@ -15,6 +15,7 @@ import { EntityValidators } from '../../../domain/service/entity-validators.serv }) export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent implements OnInit, OnChanges, OnDestroy { @Input() resolver: MetadataResolver; + @Input() ids: Observable; contactTypes: string[] = [ 'support', @@ -27,7 +28,6 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp hasValue$: Observable; totalValue$: Observable; - ids$: Observable = of([]); private validationSubscription: Subscription; @@ -37,17 +37,6 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp protected valueEmitter: ProviderValueEmitter ) { super(fb, statusEmitter, valueEmitter); - - /* - this.ids$ = this.store - .select(fromCollection.getAllEntityIds) - .pipe( - takeUntil(this.ngUnsubscribe), - combineLatest(this.store.select(fromCollection.getSelectedProvider), (ids: string[], provider: MetadataResolver) => { - return ids.filter(id => provider.entityId !== id); - }) - ); - */ } createForm(): void { @@ -82,7 +71,7 @@ export class AdvancedInfoFormComponent extends ProviderFormFragmentComponent imp this.form .get('entityId') .setAsyncValidators( - EntityValidators.createUniqueIdValidator(this.ids$) + EntityValidators.createUniqueIdValidator(this.ids) ); } diff --git a/ui/src/app/metadata/resolver/container/editor.component.html b/ui/src/app/metadata/resolver/container/editor.component.html index 3049b01b5..422a1cbc2 100644 --- a/ui/src/app/metadata/resolver/container/editor.component.html +++ b/ui/src/app/metadata/resolver/container/editor.component.html @@ -83,7 +83,7 @@
- + diff --git a/ui/src/app/metadata/resolver/container/editor.component.ts b/ui/src/app/metadata/resolver/container/editor.component.ts index 62f32058e..6aa252abe 100644 --- a/ui/src/app/metadata/resolver/container/editor.component.ts +++ b/ui/src/app/metadata/resolver/container/editor.component.ts @@ -43,6 +43,8 @@ export class EditorComponent implements OnInit, OnDestroy { latest: MetadataResolver; latest$: Observable; + ids$: Observable; + resolver$: Observable; providerName$: Observable; resolver: MetadataResolver; @@ -84,6 +86,15 @@ export class EditorComponent implements OnInit, OnDestroy { this.wizardIsValid$ = this.store.select(fromResolver.getEditorIsValid); this.wizardIsInvalid$ = this.wizardIsValid$.pipe(map(valid => !valid)); + + this.ids$ = this.store + .select(fromResolver.getAllEntityIds) + .pipe( + takeUntil(this.ngUnsubscribe), + combineLatest(this.store.select(fromResolver.getSelectedResolver), (ids: string[], provider: MetadataResolver) => { + return ids.filter(id => provider.entityId !== id); + }) + ); } save(): void {