mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-09-17 14:21:29 +00:00
254 lines
9.4 KiB
TypeScript
254 lines
9.4 KiB
TypeScript
/*!
|
|
* @license
|
|
* Copyright 2016 Alfresco Software, Ltd.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
import { FormFieldTypes } from '../core/form-field-types';
|
|
import { FormFieldModel } from '../core/form-field.model';
|
|
import { FormModel } from '../core/form.model';
|
|
import { InputMaskDirective } from './text-mask.component';
|
|
import { TextWidgetComponent } from './text.widget';
|
|
|
|
import { CoreModule } from 'ng2-alfresco-core';
|
|
import { ActivitiAlfrescoContentService } from '../../../services/activiti-alfresco.service';
|
|
import { MaterialModule } from '../../material.module';
|
|
import { ErrorWidgetComponent } from '../error/error.component';
|
|
import { EcmModelService } from './../../../services/ecm-model.service';
|
|
import { FormService } from './../../../services/form.service';
|
|
|
|
describe('TextWidgetComponent', () => {
|
|
|
|
let widget: TextWidgetComponent;
|
|
let fixture: ComponentFixture<TextWidgetComponent>;
|
|
let element: HTMLElement;
|
|
|
|
beforeEach(async(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
CoreModule.forRoot(),
|
|
MaterialModule
|
|
],
|
|
declarations: [
|
|
TextWidgetComponent,
|
|
ErrorWidgetComponent,
|
|
InputMaskDirective
|
|
],
|
|
providers: [
|
|
FormService,
|
|
EcmModelService,
|
|
ActivitiAlfrescoContentService
|
|
]
|
|
}).compileComponents();
|
|
}));
|
|
|
|
beforeEach(() => {
|
|
fixture = TestBed.createComponent(TextWidgetComponent);
|
|
|
|
widget = fixture.componentInstance;
|
|
element = fixture.nativeElement;
|
|
});
|
|
|
|
describe('when template is ready', () => {
|
|
|
|
describe('and no mask is configured on text element', () => {
|
|
|
|
let inputElement: HTMLInputElement;
|
|
|
|
beforeEach(() => {
|
|
widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), {
|
|
id: 'text-id',
|
|
name: 'text-name',
|
|
value: '',
|
|
type: FormFieldTypes.TEXT,
|
|
readOnly: false
|
|
});
|
|
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
});
|
|
|
|
it('should raise ngModelChange event', async(() => {
|
|
inputElement.value = 'TEXT';
|
|
expect(widget.field.value).toBe('');
|
|
inputElement.dispatchEvent(new Event('input'));
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
expect(widget.field).not.toBeNull();
|
|
expect(widget.field.value).not.toBeNull();
|
|
expect(widget.field.value).toBe('TEXT');
|
|
});
|
|
}));
|
|
|
|
});
|
|
|
|
describe('and no mask is configured on text element', () => {
|
|
|
|
let inputElement: HTMLInputElement;
|
|
|
|
beforeEach(() => {
|
|
widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), {
|
|
id: 'text-id',
|
|
name: 'text-name',
|
|
value: '',
|
|
type: FormFieldTypes.TEXT,
|
|
readOnly: true
|
|
});
|
|
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
});
|
|
|
|
it('should be disabled on readonly forms', async(() => {
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
expect(inputElement).toBeDefined();
|
|
expect(inputElement).not.toBeNull();
|
|
expect(inputElement.disabled).toBeTruthy();
|
|
});
|
|
}));
|
|
|
|
});
|
|
|
|
describe('and mask is configured on text element', () => {
|
|
|
|
let inputElement: HTMLInputElement;
|
|
|
|
beforeEach(() => {
|
|
widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), {
|
|
id: 'text-id',
|
|
name: 'text-name',
|
|
value: '',
|
|
params: {inputMask: '##-##0,00%'},
|
|
type: FormFieldTypes.TEXT,
|
|
readOnly: false
|
|
});
|
|
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
});
|
|
|
|
it('should show text widget', () => {
|
|
expect(element.querySelector('#text-id')).toBeDefined();
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
});
|
|
|
|
it('should prevent text to be written if is not allowed by the mask on keyUp event', async(() => {
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
|
|
inputElement.value = 'F';
|
|
widget.field.value = 'F';
|
|
let event: any = new Event('keyup');
|
|
event.keyCode = '70';
|
|
inputElement.dispatchEvent(event);
|
|
fixture.detectChanges();
|
|
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
expect(inputElement.value).toBe('');
|
|
});
|
|
}));
|
|
|
|
it('should prevent text to be written if is not allowed by the mask on input event', async(() => {
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
|
|
inputElement.value = 'F';
|
|
widget.field.value = 'F';
|
|
inputElement.dispatchEvent(new Event('input'));
|
|
fixture.detectChanges();
|
|
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
expect(inputElement.value).toBe('');
|
|
});
|
|
}));
|
|
|
|
it('should allow masked configured value on keyUp event', async(() => {
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
|
|
inputElement.value = '1';
|
|
widget.field.value = '1';
|
|
let event: any = new Event('keyup');
|
|
event.keyCode = '49';
|
|
inputElement.dispatchEvent(event);
|
|
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
let textEle: HTMLInputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
expect(textEle.value).toBe('1');
|
|
});
|
|
}));
|
|
|
|
it('should autofill masked configured value on keyUp event', async(() => {
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
|
|
inputElement.value = '12345678';
|
|
widget.field.value = '12345678';
|
|
let event: any = new Event('keyup');
|
|
event.keyCode = '49';
|
|
inputElement.dispatchEvent(event);
|
|
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
let textEle: HTMLInputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
expect(textEle.value).toBe('12-345,67%');
|
|
});
|
|
}));
|
|
});
|
|
|
|
describe('when the mask is reversed ', () => {
|
|
|
|
let inputElement: HTMLInputElement;
|
|
|
|
beforeEach(() => {
|
|
widget.field = new FormFieldModel(new FormModel({taskId: 'fake-task-id'}), {
|
|
id: 'text-id',
|
|
name: 'text-name',
|
|
value: '',
|
|
params: {existingColspan: 1, maxColspan: 2, inputMask: '#.##0,00%', inputMaskReversed: true},
|
|
type: FormFieldTypes.TEXT,
|
|
readOnly: false
|
|
});
|
|
|
|
fixture.detectChanges();
|
|
inputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
});
|
|
|
|
afterEach(() => {
|
|
fixture.destroy();
|
|
TestBed.resetTestingModule();
|
|
});
|
|
|
|
it('should be able to apply the mask reversed', async(() => {
|
|
expect(element.querySelector('#text-id')).not.toBeNull();
|
|
|
|
inputElement.value = '1234';
|
|
widget.field.value = '1234';
|
|
let event: any = new Event('keyup');
|
|
event.keyCode = '49';
|
|
inputElement.dispatchEvent(event);
|
|
|
|
fixture.whenStable().then(() => {
|
|
fixture.detectChanges();
|
|
let textEle: HTMLInputElement = <HTMLInputElement> element.querySelector('#text-id');
|
|
expect(textEle.value).toBe('12,34%');
|
|
});
|
|
}));
|
|
});
|
|
});
|
|
});
|