mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-16 06:23:03 +00:00
Added more tests and fixes
This commit is contained in:
@@ -1,13 +1,17 @@
|
|||||||
// Load the implementations that should be tested
|
// Load the implementations that should be tested
|
||||||
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
||||||
import 'rxjs/add/observable/of';
|
import { FormControl, FormGroup } from '@angular/forms';
|
||||||
|
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { SortablejsModule } from 'angular-sortablejs';
|
import { DynamicFormValidationService } from '@ng-dynamic-forms/core';
|
||||||
|
|
||||||
import { DsDatePickerComponent } from './date-picker.component';
|
import { DsDatePickerComponent } from './date-picker.component';
|
||||||
import { FormControl, FormGroup } from '@angular/forms';
|
|
||||||
import { DynamicDsDatePickerModel } from './date-picker.model';
|
import { DynamicDsDatePickerModel } from './date-picker.model';
|
||||||
|
import { FormBuilderService } from '../../../form-builder.service';
|
||||||
|
|
||||||
|
import { FormComponent } from '../../../../form.component';
|
||||||
|
import { FormService } from '../../../../form.service';
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -19,10 +23,28 @@ function createTestComponent<T>(html: string, type: { new(...args: any[]): T }):
|
|||||||
return fixture as ComponentFixture<T>;
|
return fixture as ComponentFixture<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Date Picker component', () => {
|
export const DATE_TEST_GROUP = new FormGroup({
|
||||||
|
date: new FormControl()
|
||||||
|
});
|
||||||
|
|
||||||
|
export const DATE_TEST_MODEL_CONFIG = {
|
||||||
|
disabled: false,
|
||||||
|
errorMessages: {required: 'You must enter at least the year.'},
|
||||||
|
id: 'date',
|
||||||
|
label: 'Date',
|
||||||
|
name: 'date',
|
||||||
|
placeholder: 'Date',
|
||||||
|
readOnly: false,
|
||||||
|
required: true,
|
||||||
|
toggleIcon: 'fa fa-calendar'
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('DsDatePickerComponent test suite', () => {
|
||||||
|
|
||||||
let testComp: TestComponent;
|
let testComp: TestComponent;
|
||||||
|
let dateComp: DsDatePickerComponent;
|
||||||
let testFixture: ComponentFixture<TestComponent>;
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
let dateFixture: ComponentFixture<DsDatePickerComponent>;
|
||||||
let html;
|
let html;
|
||||||
|
|
||||||
// async beforeEach
|
// async beforeEach
|
||||||
@@ -39,12 +61,17 @@ describe('Date Picker component', () => {
|
|||||||
providers: [
|
providers: [
|
||||||
ChangeDetectorRef,
|
ChangeDetectorRef,
|
||||||
DsDatePickerComponent,
|
DsDatePickerComponent,
|
||||||
|
DynamicFormValidationService,
|
||||||
|
FormBuilderService,
|
||||||
|
FormComponent,
|
||||||
|
FormService
|
||||||
],
|
],
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
});
|
});
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
// synchronous beforeEach
|
// synchronous beforeEach
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
html = `
|
html = `
|
||||||
@@ -66,6 +93,159 @@ describe('Date Picker component', () => {
|
|||||||
expect(app).toBeDefined();
|
expect(app).toBeDefined();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
describe('when init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
dateFixture = TestBed.createComponent(DsDatePickerComponent);
|
||||||
|
dateComp = dateFixture.componentInstance; // FormComponent test instance
|
||||||
|
dateComp.group = DATE_TEST_GROUP;
|
||||||
|
dateComp.model = new DynamicDsDatePickerModel(DATE_TEST_MODEL_CONFIG);
|
||||||
|
dateFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(dateComp.initialYear).toBeDefined();
|
||||||
|
expect(dateComp.initialMonth).toBeDefined();
|
||||||
|
expect(dateComp.initialDay).toBeDefined();
|
||||||
|
expect(dateComp.maxYear).toBeDefined();
|
||||||
|
expect(dateComp.disabledMonth).toBeTruthy();
|
||||||
|
expect(dateComp.disabledDay).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set year and enable month field when year field is entered', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'year',
|
||||||
|
value: '1983'
|
||||||
|
};
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).toEqual('1983');
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set month and enable day field when month field is entered', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'month',
|
||||||
|
value: '11'
|
||||||
|
};
|
||||||
|
|
||||||
|
dateComp.year = '1983';
|
||||||
|
dateComp.disabledMonth = false;
|
||||||
|
dateFixture.detectChanges();
|
||||||
|
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).toEqual('1983');
|
||||||
|
expect(dateComp.month).toEqual('11');
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should set day when day field is entered', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'day',
|
||||||
|
value: '18'
|
||||||
|
};
|
||||||
|
|
||||||
|
dateComp.year = '1983';
|
||||||
|
dateComp.month = '11';
|
||||||
|
dateComp.disabledMonth = false;
|
||||||
|
dateComp.disabledDay = false;
|
||||||
|
dateFixture.detectChanges();
|
||||||
|
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).toEqual('1983');
|
||||||
|
expect(dateComp.month).toEqual('11');
|
||||||
|
expect(dateComp.day).toEqual('18');
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit blur Event onBlur', () => {
|
||||||
|
spyOn(dateComp.blur, 'emit');
|
||||||
|
dateComp.onBlur(new Event('blur'));
|
||||||
|
expect(dateComp.blur.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit focus Event onFocus', () => {
|
||||||
|
spyOn(dateComp.focus, 'emit');
|
||||||
|
dateComp.onFocus(new Event('focus'));
|
||||||
|
expect(dateComp.focus.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
dateFixture = TestBed.createComponent(DsDatePickerComponent);
|
||||||
|
dateComp = dateFixture.componentInstance; // FormComponent test instance
|
||||||
|
dateComp.group = DATE_TEST_GROUP;
|
||||||
|
dateComp.model = new DynamicDsDatePickerModel(DATE_TEST_MODEL_CONFIG);
|
||||||
|
dateComp.model.value = '1983-11-18';
|
||||||
|
dateFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(dateComp.initialYear).toBeDefined();
|
||||||
|
expect(dateComp.initialMonth).toBeDefined();
|
||||||
|
expect(dateComp.initialDay).toBeDefined();
|
||||||
|
expect(dateComp.maxYear).toBeDefined();
|
||||||
|
expect(dateComp.year).toBe(1983);
|
||||||
|
expect(dateComp.month).toBe(11);
|
||||||
|
expect(dateComp.day).toBe(18);
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should disable month and day fields when year field is canceled', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'year',
|
||||||
|
value: null
|
||||||
|
};
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).not.toBeDefined();
|
||||||
|
expect(dateComp.month).not.toBeDefined();
|
||||||
|
expect(dateComp.day).not.toBeDefined();
|
||||||
|
expect(dateComp.disabledMonth).toBeTruthy();
|
||||||
|
expect(dateComp.disabledDay).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should disable day field when month field is canceled', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'month',
|
||||||
|
value: null
|
||||||
|
};
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).toBe(1983);
|
||||||
|
expect(dateComp.month).not.toBeDefined();
|
||||||
|
expect(dateComp.day).not.toBeDefined();
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not disable day field when day field is canceled', () => {
|
||||||
|
const event = {
|
||||||
|
field: 'day',
|
||||||
|
value: null
|
||||||
|
};
|
||||||
|
dateComp.onChange(event);
|
||||||
|
|
||||||
|
expect(dateComp.year).toBe(1983);
|
||||||
|
expect(dateComp.month).toBe(11);
|
||||||
|
expect(dateComp.day).not.toBeDefined();
|
||||||
|
expect(dateComp.disabledMonth).toBeFalsy();
|
||||||
|
expect(dateComp.disabledDay).toBeFalsy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// declare a test component
|
// declare a test component
|
||||||
@@ -75,23 +255,9 @@ describe('Date Picker component', () => {
|
|||||||
})
|
})
|
||||||
class TestComponent {
|
class TestComponent {
|
||||||
|
|
||||||
group = new FormGroup({
|
group = DATE_TEST_GROUP;
|
||||||
date: new FormControl(),
|
|
||||||
});
|
|
||||||
|
|
||||||
inputDateModelConfig = {
|
model = new DynamicDsDatePickerModel(DATE_TEST_MODEL_CONFIG);
|
||||||
disabled: false,
|
|
||||||
errorMessages: { required: 'You must enter at least the year.' },
|
|
||||||
id: 'date',
|
|
||||||
label: 'Date',
|
|
||||||
name: 'date',
|
|
||||||
placeholder: 'Date',
|
|
||||||
readOnly: false,
|
|
||||||
required: true,
|
|
||||||
toggleIcon: 'fa fa-calendar'
|
|
||||||
};
|
|
||||||
|
|
||||||
model = new DynamicDsDatePickerModel(this.inputDateModelConfig);
|
|
||||||
|
|
||||||
showErrorMessages = false;
|
showErrorMessages = false;
|
||||||
|
|
||||||
|
@@ -31,9 +31,9 @@ export class DsDatePickerComponent implements OnInit {
|
|||||||
initialMonth: number;
|
initialMonth: number;
|
||||||
initialDay: number;
|
initialDay: number;
|
||||||
|
|
||||||
year: number;
|
year: any;
|
||||||
month: number;
|
month: any;
|
||||||
day: number;
|
day: any;
|
||||||
|
|
||||||
minYear: 0;
|
minYear: 0;
|
||||||
maxYear: number;
|
maxYear: number;
|
||||||
|
@@ -3,7 +3,10 @@ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/c
|
|||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
||||||
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
|
|
||||||
|
import { DynamicFormValidationService } from '@ng-dynamic-forms/core';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
import 'rxjs/add/observable/of';
|
import 'rxjs/add/observable/of';
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
|
||||||
@@ -16,15 +19,11 @@ import { FormService } from '../../../../form.service';
|
|||||||
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
||||||
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
||||||
import { FormComponent } from '../../../../form.component';
|
import { FormComponent } from '../../../../form.component';
|
||||||
import { DynamicFormValidationService } from '@ng-dynamic-forms/core';
|
|
||||||
import { Store } from '@ngrx/store';
|
|
||||||
import { AppState } from '../../../../../../app.reducer';
|
import { AppState } from '../../../../../../app.reducer';
|
||||||
import { Observable } from 'rxjs/Observable';
|
|
||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
||||||
import { Chips } from '../../../../../chips/models/chips.model';
|
import { Chips } from '../../../../../chips/models/chips.model';
|
||||||
import { FormFieldMetadataValueObject } from '../../../models/form-field-metadata-value.model';
|
import { FormFieldMetadataValueObject } from '../../../models/form-field-metadata-value.model';
|
||||||
import { DsDynamicInputModel } from '../ds-dynamic-input.model';
|
import { DsDynamicInputModel } from '../ds-dynamic-input.model';
|
||||||
import { By } from '@angular/platform-browser';
|
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -202,7 +201,6 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
}];
|
}];
|
||||||
groupFixture.detectChanges();
|
groupFixture.detectChanges();
|
||||||
|
|
||||||
const de = groupFixture.debugElement.queryAll(By.css('button'));
|
|
||||||
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
||||||
const btnEl = buttons[0];
|
const btnEl = buttons[0];
|
||||||
btnEl.click();
|
btnEl.click();
|
||||||
@@ -219,7 +217,6 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
|
|
||||||
groupFixture.detectChanges();
|
groupFixture.detectChanges();
|
||||||
|
|
||||||
const de = groupFixture.debugElement.queryAll(By.css('button'));
|
|
||||||
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
||||||
const btnEl = buttons[2];
|
const btnEl = buttons[2];
|
||||||
btnEl.click();
|
btnEl.click();
|
||||||
@@ -231,7 +228,7 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('when init model value is not empty', () => {
|
describe('when init model value is not empty', () => {
|
||||||
beforeEach(inject([FormBuilderService], (service: FormBuilderService) => {
|
beforeEach(() => {
|
||||||
|
|
||||||
groupFixture = TestBed.createComponent(DsDynamicGroupComponent);
|
groupFixture = TestBed.createComponent(DsDynamicGroupComponent);
|
||||||
groupComp = groupFixture.componentInstance; // FormComponent test instance
|
groupComp = groupFixture.componentInstance; // FormComponent test instance
|
||||||
@@ -246,7 +243,7 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
groupComp.showErrorMessages = false;
|
groupComp.showErrorMessages = false;
|
||||||
groupFixture.detectChanges();
|
groupFixture.detectChanges();
|
||||||
|
|
||||||
}));
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
groupFixture.destroy();
|
groupFixture.destroy();
|
||||||
@@ -279,7 +276,6 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
}];
|
}];
|
||||||
groupFixture.detectChanges();
|
groupFixture.detectChanges();
|
||||||
|
|
||||||
const de = groupFixture.debugElement.queryAll(By.css('button'));
|
|
||||||
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
||||||
const btnEl = buttons[0];
|
const btnEl = buttons[0];
|
||||||
btnEl.click();
|
btnEl.click();
|
||||||
@@ -290,18 +286,17 @@ describe('DsDynamicGroupComponent test suite', () => {
|
|||||||
expect(groupComp.formCollapsed).toEqual(Observable.of(true));
|
expect(groupComp.formCollapsed).toEqual(Observable.of(true));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should delete existing chips item', inject([FormBuilderService], (service: FormBuilderService) => {
|
it('should delete existing chips item', () => {
|
||||||
groupComp.onChipSelected(0);
|
groupComp.onChipSelected(0);
|
||||||
groupFixture.detectChanges();
|
groupFixture.detectChanges();
|
||||||
|
|
||||||
const de = groupFixture.debugElement.queryAll(By.css('button'));
|
|
||||||
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
const buttons = groupFixture.debugElement.nativeElement.querySelectorAll('button');
|
||||||
const btnEl = buttons[1];
|
const btnEl = buttons[1];
|
||||||
btnEl.click();
|
btnEl.click();
|
||||||
|
|
||||||
expect(groupComp.chips.getChipsItems()).toEqual([]);
|
expect(groupComp.chips.getChipsItems()).toEqual([]);
|
||||||
expect(groupComp.formCollapsed).toEqual(Observable.of(false));
|
expect(groupComp.formCollapsed).toEqual(Observable.of(false));
|
||||||
}));
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -69,7 +69,7 @@
|
|||||||
[attr.autoComplete]="model.autoComplete"
|
[attr.autoComplete]="model.autoComplete"
|
||||||
[class.is-invalid]="showErrorMessages"
|
[class.is-invalid]="showErrorMessages"
|
||||||
[dynamicId]="bindId && model.id"
|
[dynamicId]="bindId && model.id"
|
||||||
[name]="name2"
|
[name]="model.name + '_2'"
|
||||||
[type]="model.inputType"
|
[type]="model.inputType"
|
||||||
[(ngModel)]="secondInputValue"
|
[(ngModel)]="secondInputValue"
|
||||||
[disabled]="firstInputValue.length === 0 || isInputDisabled()"
|
[disabled]="firstInputValue.length === 0 || isInputDisabled()"
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
// Load the implementations that should be tested
|
// Load the implementations that should be tested
|
||||||
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, fakeAsync, inject, TestBed, tick, } from '@angular/core/testing';
|
||||||
|
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
|
||||||
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
||||||
import { DynamicFormsCoreModule } from '@ng-dynamic-forms/core';
|
import { DynamicFormsCoreModule, DynamicFormValidationService } from '@ng-dynamic-forms/core';
|
||||||
import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap';
|
import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap';
|
||||||
import { AuthorityService } from '../../../../../../core/integration/authority.service';
|
import { AuthorityService } from '../../../../../../core/integration/authority.service';
|
||||||
import { AuthorityServiceStub } from '../../../../../testing/authority-service-stub';
|
import { AuthorityServiceStub } from '../../../../../testing/authority-service-stub';
|
||||||
@@ -14,6 +14,13 @@ import { DsDynamicLookupComponent } from './dynamic-lookup.component';
|
|||||||
import { DynamicLookupModel } from './dynamic-lookup.model';
|
import { DynamicLookupModel } from './dynamic-lookup.model';
|
||||||
import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { FormBuilderService } from '../../../form-builder.service';
|
||||||
|
import { FormService } from '../../../../form.service';
|
||||||
|
import { FormComponent } from '../../../../form.component';
|
||||||
|
import { FormFieldMetadataValueObject } from '../../../models/form-field-metadata-value.model';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
import { AuthorityValueModel } from '../../../../../../core/integration/models/authority-value.model';
|
||||||
|
import { DynamicLookupNameModel } from './dynamic-lookup-name.model';
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -25,75 +32,7 @@ function createTestComponent<T>(html: string, type: { new(...args: any[]): T }):
|
|||||||
return fixture as ComponentFixture<T>;
|
return fixture as ComponentFixture<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Dynamic Lookup component', () => {
|
export const LOOKUP_TEST_MODEL_CONFIG = {
|
||||||
|
|
||||||
let testComp: TestComponent;
|
|
||||||
let testFixture: ComponentFixture<TestComponent>;
|
|
||||||
let html;
|
|
||||||
|
|
||||||
// async beforeEach
|
|
||||||
beforeEach(async(() => {
|
|
||||||
const authorityServiceStub = new AuthorityServiceStub();
|
|
||||||
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
imports: [
|
|
||||||
DynamicFormsCoreModule,
|
|
||||||
DynamicFormsNGBootstrapUIModule,
|
|
||||||
FormsModule,
|
|
||||||
InfiniteScrollModule,
|
|
||||||
ReactiveFormsModule,
|
|
||||||
NgbModule.forRoot(),
|
|
||||||
TranslateModule.forRoot()
|
|
||||||
],
|
|
||||||
declarations: [
|
|
||||||
DsDynamicLookupComponent,
|
|
||||||
TestComponent,
|
|
||||||
], // declare the test component
|
|
||||||
providers: [
|
|
||||||
ChangeDetectorRef,
|
|
||||||
DsDynamicLookupComponent,
|
|
||||||
{provide: AuthorityService, useValue: authorityServiceStub},
|
|
||||||
],
|
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
||||||
|
|
||||||
// synchronous beforeEach
|
|
||||||
beforeEach(() => {
|
|
||||||
html = `
|
|
||||||
<ds-dynamic-lookup
|
|
||||||
[bindId]="bindId"
|
|
||||||
[group]="group"
|
|
||||||
[model]="model"
|
|
||||||
[showErrorMessages]="showErrorMessages"
|
|
||||||
(blur)="onBlur($event)"
|
|
||||||
(change)="onValueChange($event)"
|
|
||||||
(focus)="onFocus($event)"></ds-dynamic-lookup>`;
|
|
||||||
|
|
||||||
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
|
|
||||||
testComp = testFixture.componentInstance;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create DsDynamicLookupComponent', inject([DsDynamicLookupComponent], (app: DsDynamicLookupComponent) => {
|
|
||||||
|
|
||||||
expect(app).toBeDefined();
|
|
||||||
}));
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// declare a test component
|
|
||||||
@Component({
|
|
||||||
selector: 'ds-test-cmp',
|
|
||||||
template: ``
|
|
||||||
})
|
|
||||||
class TestComponent {
|
|
||||||
|
|
||||||
group: FormGroup = new FormGroup({
|
|
||||||
lookup: new FormControl(),
|
|
||||||
});
|
|
||||||
|
|
||||||
inputLookupModelConfig = {
|
|
||||||
authorityOptions: {
|
authorityOptions: {
|
||||||
closed: false,
|
closed: false,
|
||||||
metadata: 'lookup',
|
metadata: 'lookup',
|
||||||
@@ -113,7 +52,298 @@ class TestComponent {
|
|||||||
separator: ',',
|
separator: ',',
|
||||||
validators: {required: null},
|
validators: {required: null},
|
||||||
value: undefined
|
value: undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const LOOKUP_NAME_TEST_MODEL_CONFIG = {
|
||||||
|
authorityOptions: {
|
||||||
|
closed: false,
|
||||||
|
metadata: 'lookup-name',
|
||||||
|
name: 'RPAuthority',
|
||||||
|
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
||||||
|
} as AuthorityOptions,
|
||||||
|
disabled: false,
|
||||||
|
errorMessages: {required: 'Required field.'},
|
||||||
|
id: 'lookupName',
|
||||||
|
label: 'Author',
|
||||||
|
maxOptions: 10,
|
||||||
|
name: 'lookupName',
|
||||||
|
placeholder: 'Author',
|
||||||
|
readOnly: false,
|
||||||
|
required: true,
|
||||||
|
repeatable: true,
|
||||||
|
separator: ',',
|
||||||
|
validators: {required: null},
|
||||||
|
value: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
export const LOOKUP_TEST_GROUP = new FormGroup({
|
||||||
|
lookup: new FormControl(),
|
||||||
|
lookupName: new FormControl()
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Dynamic Lookup component', () => {
|
||||||
|
|
||||||
|
let testComp: TestComponent;
|
||||||
|
let lookupComp: DsDynamicLookupComponent;
|
||||||
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
let lookupFixture: ComponentFixture<DsDynamicLookupComponent>;
|
||||||
|
let html;
|
||||||
|
|
||||||
|
const authorityServiceStub = new AuthorityServiceStub();
|
||||||
|
|
||||||
|
// async beforeEach
|
||||||
|
beforeEach(async(() => {
|
||||||
|
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [
|
||||||
|
DynamicFormsCoreModule,
|
||||||
|
DynamicFormsNGBootstrapUIModule,
|
||||||
|
FormsModule,
|
||||||
|
InfiniteScrollModule,
|
||||||
|
ReactiveFormsModule,
|
||||||
|
NgbModule.forRoot(),
|
||||||
|
TranslateModule.forRoot()
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
DsDynamicLookupComponent,
|
||||||
|
TestComponent,
|
||||||
|
], // declare the test component
|
||||||
|
providers: [
|
||||||
|
ChangeDetectorRef,
|
||||||
|
DsDynamicLookupComponent,
|
||||||
|
DynamicFormValidationService,
|
||||||
|
FormBuilderService,
|
||||||
|
FormComponent,
|
||||||
|
FormService,
|
||||||
|
{provide: AuthorityService, useValue: authorityServiceStub},
|
||||||
|
],
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
// synchronous beforeEach
|
||||||
|
beforeEach(() => {
|
||||||
|
html = `
|
||||||
|
<ds-dynamic-lookup
|
||||||
|
[bindId]="bindId"
|
||||||
|
[group]="group"
|
||||||
|
[model]="model"
|
||||||
|
[showErrorMessages]="showErrorMessages"
|
||||||
|
(blur)="onBlur($event)"
|
||||||
|
(change)="onValueChange($event)"
|
||||||
|
(focus)="onFocus($event)"></ds-dynamic-lookup>`;
|
||||||
|
|
||||||
|
testFixture = createTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
|
||||||
|
testComp = testFixture.componentInstance;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create DsDynamicLookupComponent', inject([DsDynamicLookupComponent], (app: DsDynamicLookupComponent) => {
|
||||||
|
expect(app).toBeDefined();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when model is DynamicLookupModel', () => {
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupModel(LOOKUP_TEST_MODEL_CONFIG);
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render only an input element', () => {
|
||||||
|
const de = lookupFixture.debugElement.queryAll(By.css('input.form-control'));
|
||||||
|
expect(de.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupModel(LOOKUP_TEST_MODEL_CONFIG);
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(lookupComp.firstInputValue).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return search results', fakeAsync(() => {
|
||||||
|
const de = lookupFixture.debugElement.queryAll(By.css('button'));
|
||||||
|
const btnEl = de[0].nativeElement;
|
||||||
|
const results$ = authorityServiceStub.getEntriesByName({} as any);
|
||||||
|
|
||||||
|
lookupComp.firstInputValue = 'test';
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
btnEl.click();
|
||||||
|
tick();
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
results$.subscribe((results) => {
|
||||||
|
expect(lookupComp.optionsList).toEqual(results.payload);
|
||||||
|
})
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should select a results entry properly', fakeAsync(() => {
|
||||||
|
let de = lookupFixture.debugElement.queryAll(By.css('button'));
|
||||||
|
const btnEl = de[0].nativeElement;
|
||||||
|
const selectedValue = Object.assign(new AuthorityValueModel(), {id: 1, display: 'one', value: 1});
|
||||||
|
spyOn(lookupComp.change, 'emit');
|
||||||
|
|
||||||
|
lookupComp.firstInputValue = 'test';
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
btnEl.click();
|
||||||
|
tick();
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
de = lookupFixture.debugElement.queryAll(By.css('button.dropdown-item'));
|
||||||
|
const entryEl = de[0].nativeElement;
|
||||||
|
entryEl.click();
|
||||||
|
|
||||||
|
expect(lookupComp.firstInputValue).toEqual('one');
|
||||||
|
expect(lookupComp.model.value).toEqual(selectedValue);
|
||||||
|
expect(lookupComp.change.emit).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should set model.value on input type when AuthorityOptions.closed is false', fakeAsync(() => {
|
||||||
|
lookupComp.firstInputValue = 'test';
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
lookupComp.onInput(new Event('input'));
|
||||||
|
expect(lookupComp.model.value).toEqual(new FormFieldMetadataValueObject('test'))
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should not set model.value on input type when AuthorityOptions.closed is true', () => {
|
||||||
|
lookupComp.model.authorityOptions.closed = true;
|
||||||
|
lookupComp.firstInputValue = 'test';
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
lookupComp.onInput(new Event('input'));
|
||||||
|
expect(lookupComp.model.value).not.toBeDefined();
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupModel(LOOKUP_TEST_MODEL_CONFIG);
|
||||||
|
lookupComp.model.value = new FormFieldMetadataValueObject('test', null, 'test001');
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
// spyOn(store, 'dispatch');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(lookupComp.firstInputValue).toBe('test')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when model is DynamicLookupNameModel', () => {
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupNameModel(LOOKUP_NAME_TEST_MODEL_CONFIG);
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
// spyOn(store, 'dispatch');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render two input element', () => {
|
||||||
|
const de = lookupFixture.debugElement.queryAll(By.css('input.form-control'));
|
||||||
|
expect(de.length).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is empty', () => {
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupNameModel(LOOKUP_NAME_TEST_MODEL_CONFIG);
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should select a results entry properly', fakeAsync(() => {
|
||||||
|
const payload = [
|
||||||
|
Object.assign(new AuthorityValueModel(), {id: 1, display: 'Name, Lastname', value: 1}),
|
||||||
|
Object.assign(new AuthorityValueModel(), {id: 2, display: 'NameTwo, LastnameTwo', value: 2}),
|
||||||
|
];
|
||||||
|
let de = lookupFixture.debugElement.queryAll(By.css('button'));
|
||||||
|
const btnEl = de[0].nativeElement;
|
||||||
|
const selectedValue = Object.assign(new AuthorityValueModel(), {id: 1, display: 'Name, Lastname', value: 1});
|
||||||
|
|
||||||
|
spyOn(lookupComp.change, 'emit');
|
||||||
|
authorityServiceStub.setNewPayload(payload);
|
||||||
|
lookupComp.firstInputValue = 'test';
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
btnEl.click();
|
||||||
|
tick();
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
de = lookupFixture.debugElement.queryAll(By.css('button.dropdown-item'));
|
||||||
|
const entryEl = de[0].nativeElement;
|
||||||
|
entryEl.click();
|
||||||
|
|
||||||
|
expect(lookupComp.firstInputValue).toEqual('Name');
|
||||||
|
expect(lookupComp.secondInputValue).toEqual('Lastname');
|
||||||
|
expect(lookupComp.model.value).toEqual(selectedValue);
|
||||||
|
expect(lookupComp.change.emit).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
lookupFixture = TestBed.createComponent(DsDynamicLookupComponent);
|
||||||
|
lookupComp = lookupFixture.componentInstance; // FormComponent test instance
|
||||||
|
lookupComp.group = LOOKUP_TEST_GROUP;
|
||||||
|
lookupComp.model = new DynamicLookupNameModel(LOOKUP_NAME_TEST_MODEL_CONFIG);
|
||||||
|
lookupComp.model.value = new FormFieldMetadataValueObject('Name, Lastname', null, 'test001');
|
||||||
|
lookupFixture.detectChanges();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(lookupComp.firstInputValue).toBe('Name');
|
||||||
|
expect(lookupComp.secondInputValue).toBe('Lastname');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// declare a test component
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-test-cmp',
|
||||||
|
template: ``
|
||||||
|
})
|
||||||
|
class TestComponent {
|
||||||
|
|
||||||
|
group: FormGroup = LOOKUP_TEST_GROUP;
|
||||||
|
|
||||||
|
inputLookupModelConfig = LOOKUP_TEST_MODEL_CONFIG;
|
||||||
|
|
||||||
model = new DynamicLookupModel(this.inputLookupModelConfig);
|
model = new DynamicLookupModel(this.inputLookupModelConfig);
|
||||||
|
|
||||||
|
@@ -32,7 +32,6 @@ export class DsDynamicLookupComponent implements OnDestroy, OnInit {
|
|||||||
public loading = false;
|
public loading = false;
|
||||||
public pageInfo: PageInfo;
|
public pageInfo: PageInfo;
|
||||||
public optionsList: any;
|
public optionsList: any;
|
||||||
public name2: string;
|
|
||||||
|
|
||||||
protected searchOptions: IntegrationSearchOptions;
|
protected searchOptions: IntegrationSearchOptions;
|
||||||
protected sub: Subscription;
|
protected sub: Subscription;
|
||||||
@@ -50,11 +49,6 @@ export class DsDynamicLookupComponent implements OnDestroy, OnInit {
|
|||||||
this.model.maxOptions,
|
this.model.maxOptions,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
// Switch Lookup/LookupName
|
|
||||||
if (this.isLookupName()) {
|
|
||||||
this.name2 = this.model.name + '2';
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setInputsValue(this.model.value);
|
this.setInputsValue(this.model.value);
|
||||||
|
|
||||||
this.model.valueUpdates
|
this.model.valueUpdates
|
||||||
|
@@ -7,9 +7,9 @@
|
|||||||
[readonly]="model.readOnly"
|
[readonly]="model.readOnly"
|
||||||
[type]="model.inputType"
|
[type]="model.inputType"
|
||||||
[value]="formatItemForInput(model.value)"
|
[value]="formatItemForInput(model.value)"
|
||||||
(blur)="onBlurEvent($event)"
|
(blur)="onBlur($event)"
|
||||||
(click)="$event.stopPropagation(); openDropdown(sdRef);"
|
(click)="$event.stopPropagation(); openDropdown(sdRef);"
|
||||||
(focus)="onFocusEvent($event)"
|
(focus)="onFocus($event)"
|
||||||
(keypress)="$event.preventDefault()">
|
(keypress)="$event.preventDefault()">
|
||||||
<button aria-describedby="collectionControlsMenuLabel"
|
<button aria-describedby="collectionControlsMenuLabel"
|
||||||
class="ds-form-input-btn btn btn-outline-primary"
|
class="ds-form-input-btn btn btn-outline-primary"
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
// Load the implementations that should be tested
|
// Load the implementations that should be tested
|
||||||
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, fakeAsync, inject, TestBed, tick, } from '@angular/core/testing';
|
||||||
|
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
|
||||||
@@ -14,6 +14,11 @@ import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
|||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { DsDynamicScrollableDropdownComponent } from './dynamic-scrollable-dropdown.component';
|
import { DsDynamicScrollableDropdownComponent } from './dynamic-scrollable-dropdown.component';
|
||||||
import { DynamicScrollableDropdownModel } from './dynamic-scrollable-dropdown.model';
|
import { DynamicScrollableDropdownModel } from './dynamic-scrollable-dropdown.model';
|
||||||
|
import { DsDynamicTypeaheadComponent } from '../typeahead/dynamic-typeahead.component';
|
||||||
|
import { DynamicTypeaheadModel } from '../typeahead/dynamic-typeahead.model';
|
||||||
|
import { TYPEAHEAD_TEST_GROUP, TYPEAHEAD_TEST_MODEL_CONFIG } from '../typeahead/dynamic-typeahead.component.spec';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
import { AuthorityValueModel } from '../../../../../../core/integration/models/authority-value.model';
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -25,15 +30,48 @@ function createTestComponent<T>(html: string, type: { new(...args: any[]): T }):
|
|||||||
return fixture as ComponentFixture<T>;
|
return fixture as ComponentFixture<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasClass(element: any, className: string): boolean {
|
||||||
|
const classes = element.getAttribute('class');
|
||||||
|
return classes.split(' ').indexOf(className) !== -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const SD_TEST_GROUP = new FormGroup({
|
||||||
|
dropdown: new FormControl(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const SD_TEST_MODEL_CONFIG = {
|
||||||
|
authorityOptions: {
|
||||||
|
closed: false,
|
||||||
|
metadata: 'dropdown',
|
||||||
|
name: 'common_iso_languages',
|
||||||
|
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
||||||
|
} as AuthorityOptions,
|
||||||
|
disabled: false,
|
||||||
|
errorMessages: {required: 'Required field.'},
|
||||||
|
id: 'dropdown',
|
||||||
|
label: 'Language',
|
||||||
|
maxOptions: 10,
|
||||||
|
name: 'dropdown',
|
||||||
|
placeholder: 'Language',
|
||||||
|
readOnly: false,
|
||||||
|
required: false,
|
||||||
|
repeatable: false,
|
||||||
|
value: undefined
|
||||||
|
};
|
||||||
|
|
||||||
describe('Dynamic Dynamic Scrollable Dropdown component', () => {
|
describe('Dynamic Dynamic Scrollable Dropdown component', () => {
|
||||||
|
|
||||||
let testComp: TestComponent;
|
let testComp: TestComponent;
|
||||||
|
let scrollableDropdownComp: DsDynamicScrollableDropdownComponent;
|
||||||
let testFixture: ComponentFixture<TestComponent>;
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
let scrollableDropdownFixture: ComponentFixture<DsDynamicScrollableDropdownComponent>;
|
||||||
let html;
|
let html;
|
||||||
|
let modelValue;
|
||||||
|
|
||||||
|
const authorityServiceStub = new AuthorityServiceStub();
|
||||||
|
|
||||||
// async beforeEach
|
// async beforeEach
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
const authorityServiceStub = new AuthorityServiceStub();
|
|
||||||
|
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -59,6 +97,7 @@ describe('Dynamic Dynamic Scrollable Dropdown component', () => {
|
|||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
// synchronous beforeEach
|
// synchronous beforeEach
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
html = `
|
html = `
|
||||||
@@ -78,7 +117,120 @@ describe('Dynamic Dynamic Scrollable Dropdown component', () => {
|
|||||||
|
|
||||||
expect(app).toBeDefined();
|
expect(app).toBeDefined();
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
describe('when init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
scrollableDropdownFixture = TestBed.createComponent(DsDynamicScrollableDropdownComponent);
|
||||||
|
scrollableDropdownComp = scrollableDropdownFixture.componentInstance; // FormComponent test instance
|
||||||
|
scrollableDropdownComp.group = SD_TEST_GROUP;
|
||||||
|
scrollableDropdownComp.model = new DynamicScrollableDropdownModel(SD_TEST_MODEL_CONFIG);
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
scrollableDropdownFixture.destroy();
|
||||||
|
scrollableDropdownComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
const results$ = authorityServiceStub.getEntriesByName({} as any);
|
||||||
|
expect(scrollableDropdownComp.optionsList).toBeDefined();
|
||||||
|
results$.subscribe((results) => {
|
||||||
|
expect(scrollableDropdownComp.optionsList).toEqual(results.payload);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display dropdown menu entries', () => {
|
||||||
|
const de = scrollableDropdownFixture.debugElement.query(By.css('button.ds-form-input-btn'));
|
||||||
|
const btnEl = de.nativeElement;
|
||||||
|
|
||||||
|
const deMenu = scrollableDropdownFixture.debugElement.query(By.css('div.scrollable-dropdown-menu'));
|
||||||
|
const menuEl = deMenu.nativeElement;
|
||||||
|
|
||||||
|
btnEl.click();
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
|
||||||
|
expect(hasClass(menuEl, 'show')).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fetch the next set of results when the user scroll to the end of the list', fakeAsync(() => {
|
||||||
|
scrollableDropdownComp.pageInfo.currentPage = 1;
|
||||||
|
scrollableDropdownComp.pageInfo.totalPages = 2;
|
||||||
|
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
|
||||||
|
scrollableDropdownComp.onScroll();
|
||||||
|
tick();
|
||||||
|
|
||||||
|
expect(scrollableDropdownComp.optionsList.length).toBe(4);
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should select a results entry properly', fakeAsync(() => {
|
||||||
|
const selectedValue = Object.assign(new AuthorityValueModel(), {id: 1, display: 'one', value: 1});
|
||||||
|
|
||||||
|
let de: any = scrollableDropdownFixture.debugElement.query(By.css('button.ds-form-input-btn'));
|
||||||
|
let btnEl = de.nativeElement;
|
||||||
|
|
||||||
|
de = scrollableDropdownFixture.debugElement.query(By.css('div.scrollable-dropdown-menu'));
|
||||||
|
const menuEl = de.nativeElement;
|
||||||
|
|
||||||
|
btnEl.click();
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
|
||||||
|
de = scrollableDropdownFixture.debugElement.queryAll(By.css('button.dropdown-item'));
|
||||||
|
btnEl = de[0].nativeElement;
|
||||||
|
|
||||||
|
btnEl.click();
|
||||||
|
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
|
||||||
|
expect((scrollableDropdownComp.model as any).value).toEqual(selectedValue);
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should emit blur Event onBlur', () => {
|
||||||
|
spyOn(scrollableDropdownComp.blur, 'emit');
|
||||||
|
scrollableDropdownComp.onBlur(new Event('blur'));
|
||||||
|
expect(scrollableDropdownComp.blur.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit focus Event onFocus', () => {
|
||||||
|
spyOn(scrollableDropdownComp.focus, 'emit');
|
||||||
|
scrollableDropdownComp.onFocus(new Event('focus'));
|
||||||
|
expect(scrollableDropdownComp.focus.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
scrollableDropdownFixture = TestBed.createComponent(DsDynamicScrollableDropdownComponent);
|
||||||
|
scrollableDropdownComp = scrollableDropdownFixture.componentInstance; // FormComponent test instance
|
||||||
|
scrollableDropdownComp.group = SD_TEST_GROUP;
|
||||||
|
modelValue = Object.assign(new AuthorityValueModel(), {id: 1, display: 'one', value: 1});
|
||||||
|
scrollableDropdownComp.model = new DynamicScrollableDropdownModel(SD_TEST_MODEL_CONFIG);
|
||||||
|
scrollableDropdownComp.model.value = modelValue;
|
||||||
|
scrollableDropdownFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
scrollableDropdownFixture.destroy();
|
||||||
|
scrollableDropdownComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
const results$ = authorityServiceStub.getEntriesByName({} as any);
|
||||||
|
expect(scrollableDropdownComp.optionsList).toBeDefined();
|
||||||
|
results$.subscribe((results) => {
|
||||||
|
expect(scrollableDropdownComp.optionsList).toEqual(results.payload);
|
||||||
|
expect(scrollableDropdownComp.model.value).toEqual(modelValue);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// declare a test component
|
// declare a test component
|
||||||
@@ -88,31 +240,9 @@ describe('Dynamic Dynamic Scrollable Dropdown component', () => {
|
|||||||
})
|
})
|
||||||
class TestComponent {
|
class TestComponent {
|
||||||
|
|
||||||
group: FormGroup = new FormGroup({
|
group: FormGroup = SD_TEST_GROUP;
|
||||||
lookup: new FormControl(),
|
|
||||||
});
|
|
||||||
|
|
||||||
inputDropdownModelConfig = {
|
model = new DynamicScrollableDropdownModel(SD_TEST_MODEL_CONFIG);
|
||||||
authorityOptions: {
|
|
||||||
closed: false,
|
|
||||||
metadata: 'lookup',
|
|
||||||
name: 'common_iso_languages',
|
|
||||||
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
|
||||||
} as AuthorityOptions,
|
|
||||||
disabled: false,
|
|
||||||
errorMessages: {required: 'Required field.'},
|
|
||||||
id: 'dropdown',
|
|
||||||
label: 'Language',
|
|
||||||
maxOptions: 10,
|
|
||||||
name: 'dropdown',
|
|
||||||
placeholder: 'Language',
|
|
||||||
readOnly: false,
|
|
||||||
required: false,
|
|
||||||
repeatable: false,
|
|
||||||
value: undefined
|
|
||||||
};
|
|
||||||
|
|
||||||
model = new DynamicScrollableDropdownModel(this.inputDropdownModelConfig);
|
|
||||||
|
|
||||||
showErrorMessages = false;
|
showErrorMessages = false;
|
||||||
|
|
||||||
|
@@ -76,19 +76,17 @@ export class DsDynamicScrollableDropdownComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onBlurEvent(event: Event) {
|
onBlur(event: Event) {
|
||||||
this.blur.emit(event);
|
this.blur.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
onFocusEvent(event) {
|
onFocus(event) {
|
||||||
this.focus.emit(event);
|
this.focus.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSelect(event) {
|
onSelect(event) {
|
||||||
this.group.markAsDirty();
|
this.group.markAsDirty();
|
||||||
// (this.model as DynamicScrollableDropdownModel).parent as
|
this.model.valueUpdates.next(event);
|
||||||
// this.group.get(this.model.id).setValue(event);
|
|
||||||
this.model.valueUpdates.next(event)
|
|
||||||
this.change.emit(event);
|
this.change.emit(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
[placeholder]="model.label"
|
[placeholder]="model.label"
|
||||||
[readonly]="model.readOnly"
|
[readonly]="model.readOnly"
|
||||||
[(ngModel)]="currentValue"
|
[(ngModel)]="currentValue"
|
||||||
(blur)="onBlurEvent($event)"
|
(blur)="onBlur($event)"
|
||||||
(keypress)="preventEventsPropagation($event)"
|
(keypress)="preventEventsPropagation($event)"
|
||||||
(keydown)="preventEventsPropagation($event)"
|
(keydown)="preventEventsPropagation($event)"
|
||||||
(keyup)="onKeyUp($event)" />
|
(keyup)="onKeyUp($event)" />
|
||||||
@@ -33,8 +33,8 @@
|
|||||||
[readonly]="model.readOnly"
|
[readonly]="model.readOnly"
|
||||||
[resultTemplate]="rt"
|
[resultTemplate]="rt"
|
||||||
[type]="model.inputType"
|
[type]="model.inputType"
|
||||||
(blur)="onBlurEvent($event)"
|
(blur)="onBlur($event)"
|
||||||
(focus)="onFocusEvent($event)"
|
(focus)="onFocus($event)"
|
||||||
(change)="$event.stopPropagation()"
|
(change)="$event.stopPropagation()"
|
||||||
(input)="onInput($event)"
|
(input)="onInput($event)"
|
||||||
(selectItem)="onSelectItem($event)"
|
(selectItem)="onSelectItem($event)"
|
||||||
|
@@ -1,18 +1,24 @@
|
|||||||
// Load the implementations that should be tested
|
// Load the implementations that should be tested
|
||||||
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, fakeAsync, flush, inject, TestBed, } from '@angular/core/testing';
|
||||||
|
|
||||||
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
|
||||||
import { DynamicFormsCoreModule } from '@ng-dynamic-forms/core';
|
import { DynamicFormsCoreModule } from '@ng-dynamic-forms/core';
|
||||||
import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap';
|
import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap';
|
||||||
|
import { NgbModule, NgbTypeaheadSelectItemEvent } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import 'rxjs/add/observable/of'
|
||||||
|
|
||||||
|
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
||||||
import { AuthorityService } from '../../../../../../core/integration/authority.service';
|
import { AuthorityService } from '../../../../../../core/integration/authority.service';
|
||||||
import { AuthorityServiceStub } from '../../../../../testing/authority-service-stub';
|
import { AuthorityServiceStub } from '../../../../../testing/authority-service-stub';
|
||||||
import { DsDynamicTagComponent } from './dynamic-tag.component';
|
import { DsDynamicTagComponent } from './dynamic-tag.component';
|
||||||
import { DynamicTagModel } from './dynamic-tag.model';
|
import { DynamicTagModel } from './dynamic-tag.model';
|
||||||
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
||||||
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { Chips } from '../../../../../chips/models/chips.model';
|
||||||
|
import { FormFieldMetadataValueObject } from '../../../models/form-field-metadata-value.model';
|
||||||
|
import { AuthorityValueModel } from '../../../../../../core/integration/models/authority-value.model';
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -24,11 +30,50 @@ function createTestComponent<T>(html: string, type: { new(...args: any[]): T }):
|
|||||||
return fixture as ComponentFixture<T>;
|
return fixture as ComponentFixture<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Dynamic Dynamic Tag component', () => {
|
function createKeyUpEvent(key: number) {
|
||||||
|
/* tslint:disable:no-empty */
|
||||||
|
const event = {
|
||||||
|
keyCode: key, preventDefault: () => {
|
||||||
|
}, stopPropagation: () => {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* tslint:enable:no-empty */
|
||||||
|
spyOn(event, 'preventDefault');
|
||||||
|
spyOn(event, 'stopPropagation');
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const TAG_TEST_GROUP = new FormGroup({
|
||||||
|
tag: new FormControl(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TAG_TEST_MODEL_CONFIG = {
|
||||||
|
authorityOptions: {
|
||||||
|
closed: false,
|
||||||
|
metadata: 'tag',
|
||||||
|
name: 'common_iso_languages',
|
||||||
|
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
||||||
|
} as AuthorityOptions,
|
||||||
|
disabled: false,
|
||||||
|
id: 'tag',
|
||||||
|
label: 'Keywords',
|
||||||
|
minChars: 3,
|
||||||
|
name: 'tag',
|
||||||
|
placeholder: 'Keywords',
|
||||||
|
readOnly: false,
|
||||||
|
required: false,
|
||||||
|
repeatable: false
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('DsDynamicTagComponent test suite', () => {
|
||||||
|
|
||||||
let testComp: TestComponent;
|
let testComp: TestComponent;
|
||||||
|
let tagComp: DsDynamicTagComponent;
|
||||||
let testFixture: ComponentFixture<TestComponent>;
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
let tagFixture: ComponentFixture<DsDynamicTagComponent>;
|
||||||
let html;
|
let html;
|
||||||
|
let chips: Chips;
|
||||||
|
let modelValue: any;
|
||||||
|
|
||||||
// async beforeEach
|
// async beforeEach
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
@@ -57,6 +102,7 @@ describe('Dynamic Dynamic Tag component', () => {
|
|||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
// synchronous beforeEach
|
// synchronous beforeEach
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
html = `
|
html = `
|
||||||
@@ -76,7 +122,168 @@ describe('Dynamic Dynamic Tag component', () => {
|
|||||||
|
|
||||||
expect(app).toBeDefined();
|
expect(app).toBeDefined();
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when authorityOptions are setted', () => {
|
||||||
|
describe('and init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
tagFixture = TestBed.createComponent(DsDynamicTagComponent);
|
||||||
|
tagComp = tagFixture.componentInstance; // FormComponent test instance
|
||||||
|
tagComp.group = TAG_TEST_GROUP;
|
||||||
|
tagComp.model = new DynamicTagModel(TAG_TEST_MODEL_CONFIG);
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
tagFixture.destroy();
|
||||||
|
tagComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
chips = new Chips([], 'display');
|
||||||
|
expect(tagComp.chips.getChipsItems()).toEqual(chips.getChipsItems());
|
||||||
|
expect(tagComp.searchOptions).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should search when 3+ characters typed', fakeAsync(() => {
|
||||||
|
spyOn((tagComp as any).authorityService, 'getEntriesByName').and.callThrough();
|
||||||
|
|
||||||
|
tagComp.search(Observable.of('test')).subscribe(() => {
|
||||||
|
expect((tagComp as any).authorityService.getEntriesByName).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should select a results entry properly', fakeAsync(() => {
|
||||||
|
modelValue = [
|
||||||
|
Object.assign(new AuthorityValueModel(), {id: 1, display: 'Name, Lastname', value: 1})
|
||||||
|
];
|
||||||
|
const event: NgbTypeaheadSelectItemEvent = {
|
||||||
|
item: Object.assign(new AuthorityValueModel(), {id: 1, display: 'Name, Lastname', value: 1}),
|
||||||
|
preventDefault: () => {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
spyOn(tagComp.change, 'emit');
|
||||||
|
|
||||||
|
tagComp.onSelectItem(event);
|
||||||
|
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
flush();
|
||||||
|
|
||||||
|
expect(tagComp.chips.getChipsItems()).toEqual(modelValue);
|
||||||
|
expect(tagComp.model.value).toEqual(modelValue);
|
||||||
|
expect(tagComp.currentValue).toBeNull();
|
||||||
|
expect(tagComp.change.emit).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should emit blur Event onBlur', () => {
|
||||||
|
spyOn(tagComp.blur, 'emit');
|
||||||
|
tagComp.onBlur(new Event('blur'));
|
||||||
|
expect(tagComp.blur.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit focus Event onFocus', () => {
|
||||||
|
spyOn(tagComp.focus, 'emit');
|
||||||
|
tagComp.onFocus(new Event('focus'));
|
||||||
|
expect(tagComp.focus.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit change Event onBlur when currentValue is not empty', fakeAsync(() => {
|
||||||
|
tagComp.currentValue = 'test value';
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
spyOn(tagComp.blur, 'emit');
|
||||||
|
spyOn(tagComp.change, 'emit');
|
||||||
|
tagComp.onBlur(new Event('blur'));
|
||||||
|
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
flush();
|
||||||
|
|
||||||
|
expect(tagComp.change.emit).toHaveBeenCalled();
|
||||||
|
expect(tagComp.blur.emit).toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
tagFixture = TestBed.createComponent(DsDynamicTagComponent);
|
||||||
|
tagComp = tagFixture.componentInstance; // FormComponent test instance
|
||||||
|
tagComp.group = TAG_TEST_GROUP;
|
||||||
|
tagComp.model = new DynamicTagModel(TAG_TEST_MODEL_CONFIG);
|
||||||
|
modelValue = [
|
||||||
|
new FormFieldMetadataValueObject('a', null, 'test001'),
|
||||||
|
new FormFieldMetadataValueObject('b', null, 'test002'),
|
||||||
|
new FormFieldMetadataValueObject('c', null, 'test003'),
|
||||||
|
];
|
||||||
|
tagComp.model.value = modelValue;
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
tagFixture.destroy();
|
||||||
|
tagComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
chips = new Chips(modelValue, 'display');
|
||||||
|
expect(tagComp.chips.getChipsItems()).toEqual(chips.getChipsItems());
|
||||||
|
expect(tagComp.searchOptions).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when authorityOptions are not setted', () => {
|
||||||
|
describe('and init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
tagFixture = TestBed.createComponent(DsDynamicTagComponent);
|
||||||
|
tagComp = tagFixture.componentInstance; // FormComponent test instance
|
||||||
|
tagComp.group = TAG_TEST_GROUP;
|
||||||
|
const config = TAG_TEST_MODEL_CONFIG;
|
||||||
|
config.authorityOptions = null;
|
||||||
|
tagComp.model = new DynamicTagModel(config);
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
tagFixture.destroy();
|
||||||
|
tagComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
chips = new Chips([], 'display');
|
||||||
|
expect(tagComp.chips.getChipsItems()).toEqual(chips.getChipsItems());
|
||||||
|
expect(tagComp.searchOptions).not.toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should add an item on ENTER or key press is \',\' or \';\'', fakeAsync(() => {
|
||||||
|
let event = createKeyUpEvent(13);
|
||||||
|
tagComp.currentValue = 'test value';
|
||||||
|
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
tagComp.onKeyUp(event);
|
||||||
|
|
||||||
|
flush();
|
||||||
|
|
||||||
|
expect(tagComp.model.value).toEqual(['test value']);
|
||||||
|
expect(tagComp.currentValue).toBeNull();
|
||||||
|
|
||||||
|
event = createKeyUpEvent(188);
|
||||||
|
tagComp.currentValue = 'test value';
|
||||||
|
|
||||||
|
tagFixture.detectChanges();
|
||||||
|
tagComp.onKeyUp(event);
|
||||||
|
|
||||||
|
flush();
|
||||||
|
|
||||||
|
expect(tagComp.model.value).toEqual(['test value']);
|
||||||
|
expect(tagComp.currentValue).toBeNull();
|
||||||
|
}));
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// declare a test component
|
// declare a test component
|
||||||
@@ -86,29 +293,9 @@ describe('Dynamic Dynamic Tag component', () => {
|
|||||||
})
|
})
|
||||||
class TestComponent {
|
class TestComponent {
|
||||||
|
|
||||||
group: FormGroup = new FormGroup({
|
group: FormGroup = TAG_TEST_GROUP;
|
||||||
lookup: new FormControl(),
|
|
||||||
});
|
|
||||||
|
|
||||||
inputTagModelConfig = {
|
model = new DynamicTagModel(TAG_TEST_MODEL_CONFIG);
|
||||||
authorityOptions: {
|
|
||||||
closed: false,
|
|
||||||
metadata: 'tag',
|
|
||||||
name: 'common_iso_languages',
|
|
||||||
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
|
||||||
} as AuthorityOptions,
|
|
||||||
disabled: false,
|
|
||||||
id: 'tag',
|
|
||||||
label: 'Keywords',
|
|
||||||
minChars: 3,
|
|
||||||
name: 'tag',
|
|
||||||
placeholder: 'Keywords',
|
|
||||||
readOnly: false,
|
|
||||||
required: false,
|
|
||||||
repeatable: false
|
|
||||||
};
|
|
||||||
|
|
||||||
model = new DynamicTagModel(this.inputTagModelConfig);
|
|
||||||
|
|
||||||
showErrorMessages = false;
|
showErrorMessages = false;
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@ import { AuthorityService } from '../../../../../../core/integration/authority.s
|
|||||||
import { DynamicTagModel } from './dynamic-tag.model';
|
import { DynamicTagModel } from './dynamic-tag.model';
|
||||||
import { IntegrationSearchOptions } from '../../../../../../core/integration/models/integration-options.model';
|
import { IntegrationSearchOptions } from '../../../../../../core/integration/models/integration-options.model';
|
||||||
import { Chips } from '../../../../../chips/models/chips.model';
|
import { Chips } from '../../../../../chips/models/chips.model';
|
||||||
import { hasValue, isEmpty, isNotEmpty } from '../../../../../empty.util';
|
import { hasValue, isNotEmpty } from '../../../../../empty.util';
|
||||||
import { isEqual } from 'lodash';
|
import { isEqual } from 'lodash';
|
||||||
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
import { GlobalConfig } from '../../../../../../../config/global-config.interface';
|
||||||
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
import { GLOBAL_CONFIG } from '../../../../../../../config';
|
||||||
@@ -107,14 +107,14 @@ export class DsDynamicTagComponent implements OnInit {
|
|||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
onBlurEvent(event: Event) {
|
onBlur(event: Event) {
|
||||||
if (isNotEmpty(this.currentValue)) {
|
if (isNotEmpty(this.currentValue)) {
|
||||||
this.addTagsToChips();
|
this.addTagsToChips();
|
||||||
}
|
}
|
||||||
this.blur.emit(event);
|
this.blur.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
onFocusEvent($event) {
|
onFocus(event) {
|
||||||
this.focus.emit(event);
|
this.focus.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ export class DsDynamicTagComponent implements OnInit {
|
|||||||
onKeyUp(event) {
|
onKeyUp(event) {
|
||||||
if (event.keyCode === 13 || event.keyCode === 188) {
|
if (event.keyCode === 13 || event.keyCode === 188) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// Key: Enter or , or ;
|
// Key: Enter or ',' or ';'
|
||||||
this.addTagsToChips();
|
this.addTagsToChips();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
}
|
}
|
||||||
@@ -147,7 +147,6 @@ export class DsDynamicTagComponent implements OnInit {
|
|||||||
preventEventsPropagation(event) {
|
preventEventsPropagation(event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (event.keyCode === 13) {
|
if (event.keyCode === 13) {
|
||||||
// Key: Enter or , or ;
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,15 +179,4 @@ export class DsDynamicTagComponent implements OnInit {
|
|||||||
this.updateModel(event);
|
this.updateModel(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeChips(event) {
|
|
||||||
// console.log("Removed chips index: "+event);
|
|
||||||
this.model.valueUpdates.next(this.chips.getChipsItems());
|
|
||||||
this.change.emit(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
changeChips(event) {
|
|
||||||
this.model.valueUpdates.next(this.chips.getChipsItems());
|
|
||||||
this.change.emit(event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -15,9 +15,9 @@
|
|||||||
[resultTemplate]="rt"
|
[resultTemplate]="rt"
|
||||||
[type]="model.inputType"
|
[type]="model.inputType"
|
||||||
[(ngModel)]="currentValue"
|
[(ngModel)]="currentValue"
|
||||||
(blur)="onBlurEvent($event)"
|
(blur)="onBlur($event)"
|
||||||
(focus)="onFocusEvent($event)"
|
(focus)="onFocus($event)"
|
||||||
(change)="onChangeEvent($event)"
|
(change)="onChange($event)"
|
||||||
(input)="onInput($event)"
|
(input)="onInput($event)"
|
||||||
(selectItem)="onSelectItem($event)">
|
(selectItem)="onSelectItem($event)">
|
||||||
|
|
||||||
|
@@ -1,7 +1,11 @@
|
|||||||
// Load the implementations that should be tested
|
// Load the implementations that should be tested
|
||||||
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||||
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { async, ComponentFixture, inject, TestBed, } from '@angular/core/testing';
|
import { async, ComponentFixture, fakeAsync, inject, TestBed, } from '@angular/core/testing';
|
||||||
|
import { By } from '@angular/platform-browser';
|
||||||
|
|
||||||
|
import { Observable } from 'rxjs/Observable';
|
||||||
|
import 'rxjs/add/observable/of';
|
||||||
|
|
||||||
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
import { AuthorityOptions } from '../../../../../../core/integration/models/authority-options.model';
|
||||||
import { DynamicFormsCoreModule } from '@ng-dynamic-forms/core';
|
import { DynamicFormsCoreModule } from '@ng-dynamic-forms/core';
|
||||||
@@ -13,6 +17,7 @@ import { GLOBAL_CONFIG } from '../../../../../../../config';
|
|||||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
import { DsDynamicTypeaheadComponent } from './dynamic-typeahead.component';
|
import { DsDynamicTypeaheadComponent } from './dynamic-typeahead.component';
|
||||||
import { DynamicTypeaheadModel } from './dynamic-typeahead.model';
|
import { DynamicTypeaheadModel } from './dynamic-typeahead.model';
|
||||||
|
import { FormFieldMetadataValueObject } from '../../../models/form-field-metadata-value.model';
|
||||||
|
|
||||||
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
function createTestComponent<T>(html: string, type: { new(...args: any[]): T }): ComponentFixture<T> {
|
||||||
TestBed.overrideComponent(type, {
|
TestBed.overrideComponent(type, {
|
||||||
@@ -24,10 +29,35 @@ function createTestComponent<T>(html: string, type: { new(...args: any[]): T }):
|
|||||||
return fixture as ComponentFixture<T>;
|
return fixture as ComponentFixture<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Dynamic Dynamic Typeahead component', () => {
|
export const TYPEAHEAD_TEST_GROUP = new FormGroup({
|
||||||
|
typeahead: new FormControl(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const TYPEAHEAD_TEST_MODEL_CONFIG = {
|
||||||
|
authorityOptions: {
|
||||||
|
closed: false,
|
||||||
|
metadata: 'typeahead',
|
||||||
|
name: 'EVENTAuthority',
|
||||||
|
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
||||||
|
} as AuthorityOptions,
|
||||||
|
disabled: false,
|
||||||
|
id: 'typeahead',
|
||||||
|
label: 'Conference',
|
||||||
|
minChars: 3,
|
||||||
|
name: 'typeahead',
|
||||||
|
placeholder: 'Conference',
|
||||||
|
readOnly: false,
|
||||||
|
required: false,
|
||||||
|
repeatable: false,
|
||||||
|
value: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('DsDynamicTypeaheadComponent test suite', () => {
|
||||||
|
|
||||||
let testComp: TestComponent;
|
let testComp: TestComponent;
|
||||||
|
let typeaheadComp: DsDynamicTypeaheadComponent;
|
||||||
let testFixture: ComponentFixture<TestComponent>;
|
let testFixture: ComponentFixture<TestComponent>;
|
||||||
|
let typeaheadFixture: ComponentFixture<DsDynamicTypeaheadComponent>;
|
||||||
let html;
|
let html;
|
||||||
|
|
||||||
// async beforeEach
|
// async beforeEach
|
||||||
@@ -57,6 +87,7 @@ describe('Dynamic Dynamic Typeahead component', () => {
|
|||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
// synchronous beforeEach
|
// synchronous beforeEach
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
html = `
|
html = `
|
||||||
@@ -76,7 +107,114 @@ describe('Dynamic Dynamic Typeahead component', () => {
|
|||||||
|
|
||||||
expect(app).toBeDefined();
|
expect(app).toBeDefined();
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('', () => {
|
||||||
|
describe('when init model value is empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
|
||||||
|
typeaheadFixture = TestBed.createComponent(DsDynamicTypeaheadComponent);
|
||||||
|
typeaheadComp = typeaheadFixture.componentInstance; // FormComponent test instance
|
||||||
|
typeaheadComp.group = TYPEAHEAD_TEST_GROUP;
|
||||||
|
typeaheadComp.model = new DynamicTypeaheadModel(TYPEAHEAD_TEST_MODEL_CONFIG);
|
||||||
|
typeaheadFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
typeaheadFixture.destroy();
|
||||||
|
typeaheadComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(typeaheadComp.currentValue).not.toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should search when 3+ characters typed', fakeAsync(() => {
|
||||||
|
spyOn((typeaheadComp as any).authorityService, 'getEntriesByName').and.callThrough();
|
||||||
|
|
||||||
|
typeaheadComp.search(Observable.of('test')).subscribe(() => {
|
||||||
|
expect((typeaheadComp as any).authorityService.getEntriesByName).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should set model.value on input type when AuthorityOptions.closed is false', () => {
|
||||||
|
const inputDe = typeaheadFixture.debugElement.query(By.css('input.form-control'));
|
||||||
|
const inputElement = inputDe.nativeElement;
|
||||||
|
|
||||||
|
inputElement.value = 'test value';
|
||||||
|
inputElement.dispatchEvent(new Event('input'));
|
||||||
|
|
||||||
|
expect((typeaheadComp.model as any).value).toEqual(new FormFieldMetadataValueObject('test value'))
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not set model.value on input type when AuthorityOptions.closed is true', () => {
|
||||||
|
typeaheadComp.model.authorityOptions.closed = true;
|
||||||
|
typeaheadFixture.detectChanges();
|
||||||
|
const inputDe = typeaheadFixture.debugElement.query(By.css('input.form-control'));
|
||||||
|
const inputElement = inputDe.nativeElement;
|
||||||
|
|
||||||
|
inputElement.value = 'test value';
|
||||||
|
inputElement.dispatchEvent(new Event('input'));
|
||||||
|
|
||||||
|
expect(typeaheadComp.model.value).not.toBeDefined();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit blur Event onBlur', () => {
|
||||||
|
spyOn(typeaheadComp.blur, 'emit');
|
||||||
|
typeaheadComp.onBlur(new Event('blur'));
|
||||||
|
expect(typeaheadComp.blur.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit change Event onBlur when AuthorityOptions.closed is false', () => {
|
||||||
|
typeaheadComp.inputValue = 'test value';
|
||||||
|
typeaheadFixture.detectChanges();
|
||||||
|
spyOn(typeaheadComp.blur, 'emit');
|
||||||
|
spyOn(typeaheadComp.change, 'emit');
|
||||||
|
typeaheadComp.onBlur(new Event('blur'));
|
||||||
|
// expect(typeaheadComp.change.emit).toHaveBeenCalled();
|
||||||
|
expect(typeaheadComp.blur.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit focus Event onFocus', () => {
|
||||||
|
spyOn(typeaheadComp.focus, 'emit');
|
||||||
|
typeaheadComp.onFocus(new Event('focus'));
|
||||||
|
expect(typeaheadComp.focus.emit).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('and init model value is not empty', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
typeaheadFixture = TestBed.createComponent(DsDynamicTypeaheadComponent);
|
||||||
|
typeaheadComp = typeaheadFixture.componentInstance; // FormComponent test instance
|
||||||
|
typeaheadComp.group = TYPEAHEAD_TEST_GROUP;
|
||||||
|
typeaheadComp.model = new DynamicTypeaheadModel(TYPEAHEAD_TEST_MODEL_CONFIG);
|
||||||
|
(typeaheadComp.model as any).value = new FormFieldMetadataValueObject('test', null, 'test001');
|
||||||
|
typeaheadFixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
typeaheadFixture.destroy();
|
||||||
|
typeaheadComp = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should init component properly', () => {
|
||||||
|
expect(typeaheadComp.currentValue).toEqual(new FormFieldMetadataValueObject('test', null, 'test001'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit change Event onChange and currentValue is empty', () => {
|
||||||
|
typeaheadComp.currentValue = null;
|
||||||
|
spyOn(typeaheadComp.change, 'emit');
|
||||||
|
typeaheadComp.onChange(new Event('change'));
|
||||||
|
expect(typeaheadComp.change.emit).toHaveBeenCalled();
|
||||||
|
expect(typeaheadComp.model.value).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// declare a test component
|
// declare a test component
|
||||||
@@ -86,30 +224,9 @@ describe('Dynamic Dynamic Typeahead component', () => {
|
|||||||
})
|
})
|
||||||
class TestComponent {
|
class TestComponent {
|
||||||
|
|
||||||
group: FormGroup = new FormGroup({
|
group: FormGroup = TYPEAHEAD_TEST_GROUP;
|
||||||
typeahead: new FormControl(),
|
|
||||||
});
|
|
||||||
|
|
||||||
inputTypeaheadModelConfig = {
|
model = new DynamicTypeaheadModel(TYPEAHEAD_TEST_MODEL_CONFIG);
|
||||||
authorityOptions: {
|
|
||||||
closed: false,
|
|
||||||
metadata: 'typeahead',
|
|
||||||
name: 'EVENTAuthority',
|
|
||||||
scope: 'c1c16450-d56f-41bc-bb81-27f1d1eb5c23'
|
|
||||||
} as AuthorityOptions,
|
|
||||||
disabled: false,
|
|
||||||
id: 'typeahead',
|
|
||||||
label: 'Conference',
|
|
||||||
minChars: 3,
|
|
||||||
name: 'typeahead',
|
|
||||||
placeholder: 'Conference',
|
|
||||||
readOnly: false,
|
|
||||||
required: false,
|
|
||||||
repeatable: false,
|
|
||||||
value: undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
model = new DynamicTypeaheadModel(this.inputTypeaheadModelConfig);
|
|
||||||
|
|
||||||
showErrorMessages = false;
|
showErrorMessages = false;
|
||||||
|
|
||||||
|
@@ -92,12 +92,9 @@ export class DsDynamicTypeaheadComponent implements OnInit {
|
|||||||
this.inputValue = valueObj;
|
this.inputValue = valueObj;
|
||||||
this.model.valueUpdates.next(this.inputValue);
|
this.model.valueUpdates.next(this.inputValue);
|
||||||
}
|
}
|
||||||
if (event.data) {
|
|
||||||
// this.group.markAsDirty();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onBlurEvent(event: Event) {
|
onBlur(event: Event) {
|
||||||
if (!this.model.authorityOptions.closed && isNotEmpty(this.inputValue)) {
|
if (!this.model.authorityOptions.closed && isNotEmpty(this.inputValue)) {
|
||||||
this.change.emit(this.inputValue);
|
this.change.emit(this.inputValue);
|
||||||
this.inputValue = null;
|
this.inputValue = null;
|
||||||
@@ -105,7 +102,7 @@ export class DsDynamicTypeaheadComponent implements OnInit {
|
|||||||
this.blur.emit(event);
|
this.blur.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
onChangeEvent(event: Event) {
|
onChange(event: Event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
if (isEmpty(this.currentValue)) {
|
if (isEmpty(this.currentValue)) {
|
||||||
this.model.valueUpdates.next(null);
|
this.model.valueUpdates.next(null);
|
||||||
@@ -113,7 +110,7 @@ export class DsDynamicTypeaheadComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onFocusEvent(event) {
|
onFocus(event) {
|
||||||
this.focus.emit(event);
|
this.focus.emit(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,11 +2,20 @@ import { Observable } from 'rxjs/Observable';
|
|||||||
import { IntegrationSearchOptions } from '../../core/integration/models/integration-options.model';
|
import { IntegrationSearchOptions } from '../../core/integration/models/integration-options.model';
|
||||||
import { IntegrationData } from '../../core/integration/integration-data';
|
import { IntegrationData } from '../../core/integration/integration-data';
|
||||||
import { PageInfo } from '../../core/shared/page-info.model';
|
import { PageInfo } from '../../core/shared/page-info.model';
|
||||||
|
import { AuthorityValueModel } from '../../core/integration/models/authority-value.model';
|
||||||
|
|
||||||
export class AuthorityServiceStub {
|
export class AuthorityServiceStub {
|
||||||
|
|
||||||
|
private _payload = [
|
||||||
|
Object.assign(new AuthorityValueModel(),{id: 1, display: 'one', value: 1}),
|
||||||
|
Object.assign(new AuthorityValueModel(),{id: 2, display: 'two', value: 2}),
|
||||||
|
];
|
||||||
|
|
||||||
|
setNewPayload(payload) {
|
||||||
|
this._payload = payload;
|
||||||
|
}
|
||||||
|
|
||||||
getEntriesByName(options: IntegrationSearchOptions) {
|
getEntriesByName(options: IntegrationSearchOptions) {
|
||||||
const payload = [{id: 1, display: 'one', value: 1} as any, {id: 2, display: 'two', value: 2} as any];
|
return Observable.of(new IntegrationData(new PageInfo(), this._payload));
|
||||||
return Observable.of(new IntegrationData(new PageInfo(), payload));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user