From f78d88af06eade88955127ef5d1746cd9f019f30 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Mon, 27 Jun 2016 10:01:42 +0100 Subject: [PATCH 1/3] Prevent error message when not enough alphanum characters in term Refs #195 --- .../alfresco-search-control.component.ts | 3 +- .../src/forms/search-term-validator.ts | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 ng2-components/ng2-alfresco-search/src/forms/search-term-validator.ts diff --git a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts index 3cd9d5464c..c4c488c9ae 100644 --- a/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts +++ b/ng2-components/ng2-alfresco-search/src/components/alfresco-search-control.component.ts @@ -19,6 +19,7 @@ import { Control, Validators } from '@angular/common'; import { Component, Input, Output, EventEmitter, AfterViewInit } from '@angular/core'; import { AlfrescoPipeTranslate, AlfrescoTranslationService } from 'ng2-alfresco-core'; import { AlfrescoSearchAutocompleteComponent } from './alfresco-search-autocomplete.component'; +import { SearchTermValidator } from './../forms/search-term-validator'; declare let __moduleName: string; declare var componentHandler: any; @@ -66,7 +67,7 @@ export class AlfrescoSearchControlComponent implements AfterViewInit { this.searchControl = new Control( this.searchTerm, - Validators.compose([Validators.required, Validators.minLength(3)]) + Validators.compose([Validators.required, SearchTermValidator.minAlphanumericChars(3)]) ); this.searchControl.valueChanges.map(value => this.searchControl.valid ? value : '') diff --git a/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.ts b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.ts new file mode 100644 index 0000000000..f353d13335 --- /dev/null +++ b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.ts @@ -0,0 +1,30 @@ +/*! + * @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 { Control } from '@angular/common'; + +export class SearchTermValidator { + + static minAlphanumericChars(minChars: number) { + return (control: Control) => { + return ('' + control.value).replace(/[^0-9a-zA-Z]+/g, '').length >= minChars ? null : { + hasMinAlphanumericChars: false + }; + }; + } + +} From 0f01e1b2cb6ba31720de6c4376d5298bc5e472e3 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Mon, 27 Jun 2016 10:54:13 +0100 Subject: [PATCH 2/3] Add tests for search term field validator Refs #195 --- .../src/forms/search-term-validator.spec.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts diff --git a/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts new file mode 100644 index 0000000000..62d9fd0fe6 --- /dev/null +++ b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts @@ -0,0 +1,44 @@ +/*! + * @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 { Control } from '@angular/common'; +import { SearchTermValidator } from './search-term-validator.ts'; + +describe('Search term validator', () => { + + it('should pass validation for a value with the specified required number of alphanumeric characters', () => { + const control = new Control('ab', SearchTermValidator.minAlphanumericChars(2)); + expect(control.valid).toBe(true); + }); + + it('should pass validation for a value with more than the specified required number of alphanumeric characters', () => { + const control = new Control('abc', SearchTermValidator.minAlphanumericChars(2)); + expect(control.valid).toBe(true); + }); + + it('should fail validation for a value with less than the specified required number of alphanumeric characters', () => { + const control = new Control('a', SearchTermValidator.minAlphanumericChars(2)); + expect(control.valid).toBe(true); + }); + + /* tslint:disable:max-line-length */ + it('should fail validation for a value with less than the specified required number of alphanumeric characters but with other non-alphanumeric characters', () => { + const control = new Control('a ._-?b', SearchTermValidator.minAlphanumericChars(3)); + expect(control.valid).toBe(true); + }); + +}); From 126067cdf16b22392c80458fcefa502da5645cb7 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Wed, 29 Jun 2016 12:24:31 +0100 Subject: [PATCH 3/3] Fix up validator test Refs #195 --- .../src/forms/search-term-validator.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts index 62d9fd0fe6..4acd4ef59a 100644 --- a/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts +++ b/ng2-components/ng2-alfresco-search/src/forms/search-term-validator.spec.ts @@ -16,7 +16,7 @@ */ import { Control } from '@angular/common'; -import { SearchTermValidator } from './search-term-validator.ts'; +import { SearchTermValidator } from './search-term-validator'; describe('Search term validator', () => { @@ -32,13 +32,13 @@ describe('Search term validator', () => { it('should fail validation for a value with less than the specified required number of alphanumeric characters', () => { const control = new Control('a', SearchTermValidator.minAlphanumericChars(2)); - expect(control.valid).toBe(true); + expect(control.valid).toBe(false); }); /* tslint:disable:max-line-length */ it('should fail validation for a value with less than the specified required number of alphanumeric characters but with other non-alphanumeric characters', () => { const control = new Control('a ._-?b', SearchTermValidator.minAlphanumericChars(3)); - expect(control.valid).toBe(true); + expect(control.valid).toBe(false); }); });