mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ACS-6584] Added validation for illegal characters when creating a tag (#9251)
* [ACS-6584] added validation for illegal character on tag creation * [ACS-6584] remove fdescribe * [ACS-6584] cr fix * [ACS-6584] missing semicolon
This commit is contained in:
committed by
GitHub
parent
e1fcaed12d
commit
ca38f05f30
@@ -155,7 +155,8 @@
|
|||||||
"EMPTY_TAG": "Tag name can't contain only spaces",
|
"EMPTY_TAG": "Tag name can't contain only spaces",
|
||||||
"REQUIRED": "Tag name is required",
|
"REQUIRED": "Tag name is required",
|
||||||
"FETCH_TAGS": "Error while fetching the tags",
|
"FETCH_TAGS": "Error while fetching the tags",
|
||||||
"CREATE_TAGS": "Error while creating the tags"
|
"CREATE_TAGS": "Error while creating the tags",
|
||||||
|
"SPECIAL_CHARACTERS": "Tag name cannot contain prohibited characters"
|
||||||
},
|
},
|
||||||
"TOOLTIPS": {
|
"TOOLTIPS": {
|
||||||
"DELETE_TAG": "Delete tag"
|
"DELETE_TAG": "Delete tag"
|
||||||
|
@@ -382,6 +382,14 @@ describe('TagsCreatorComponent', () => {
|
|||||||
expect(getFirstError()).toBe('TAG.TAGS_CREATOR.ERRORS.ALREADY_ADDED_TAG');
|
expect(getFirstError()).toBe('TAG.TAGS_CREATOR.ERRORS.ALREADY_ADDED_TAG');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should show error for prohibited characters', fakeAsync(() => {
|
||||||
|
typeTag('tag*"<>\\/?:|');
|
||||||
|
component.tagNameControl.markAsTouched();
|
||||||
|
fixture.detectChanges();
|
||||||
|
const error = getFirstError();
|
||||||
|
expect(error).toBe('TAG.TAGS_CREATOR.ERRORS.SPECIAL_CHARACTERS');
|
||||||
|
}));
|
||||||
|
|
||||||
it('should show error when duplicated already existing tag', fakeAsync(() => {
|
it('should show error when duplicated already existing tag', fakeAsync(() => {
|
||||||
const tag = 'Some tag';
|
const tag = 'Some tag';
|
||||||
|
|
||||||
@@ -518,6 +526,17 @@ describe('TagsCreatorComponent', () => {
|
|||||||
expect(tagService.findTagByName).toHaveBeenCalledWith(name);
|
expect(tagService.findTagByName).toHaveBeenCalledWith(name);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should not perform search if an illegal character is specified', fakeAsync(() => {
|
||||||
|
spyOn(tagService, 'findTagByName').and.returnValue(EMPTY);
|
||||||
|
spyOn(tagService, 'searchTags').and.returnValue(EMPTY);
|
||||||
|
|
||||||
|
const name = 'Tag:"\'>';
|
||||||
|
typeTag(name);
|
||||||
|
|
||||||
|
expect(tagService.findTagByName).not.toHaveBeenCalled();
|
||||||
|
expect(tagService.searchTags).not.toHaveBeenCalled();
|
||||||
|
}));
|
||||||
|
|
||||||
it('should call searchTags on tagService using name set in input and correct params', fakeAsync(() => {
|
it('should call searchTags on tagService using name set in input and correct params', fakeAsync(() => {
|
||||||
spyOn(tagService, 'searchTags').and.returnValue(EMPTY);
|
spyOn(tagService, 'searchTags').and.returnValue(EMPTY);
|
||||||
|
|
||||||
|
@@ -41,6 +41,7 @@ interface TagNameControlErrors {
|
|||||||
duplicatedAddedTag?: boolean;
|
duplicatedAddedTag?: boolean;
|
||||||
emptyTag?: boolean;
|
emptyTag?: boolean;
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
|
specialCharacters?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_TAGS_SORTING = {
|
const DEFAULT_TAGS_SORTING = {
|
||||||
@@ -132,7 +133,8 @@ export class TagsCreatorComponent implements OnInit, OnDestroy {
|
|||||||
['duplicatedExistingTag', 'EXISTING_TAG'],
|
['duplicatedExistingTag', 'EXISTING_TAG'],
|
||||||
['duplicatedAddedTag', 'ALREADY_ADDED_TAG'],
|
['duplicatedAddedTag', 'ALREADY_ADDED_TAG'],
|
||||||
['emptyTag', 'EMPTY_TAG'],
|
['emptyTag', 'EMPTY_TAG'],
|
||||||
['required', 'REQUIRED']
|
['required', 'REQUIRED'],
|
||||||
|
['specialCharacters', 'SPECIAL_CHARACTERS']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
private readonly existingTagsListLimit = 15;
|
private readonly existingTagsListLimit = 15;
|
||||||
@@ -144,7 +146,8 @@ export class TagsCreatorComponent implements OnInit, OnDestroy {
|
|||||||
[
|
[
|
||||||
this.validateIfNotAlreadyAdded.bind(this),
|
this.validateIfNotAlreadyAdded.bind(this),
|
||||||
Validators.required,
|
Validators.required,
|
||||||
this.validateEmptyTag
|
this.validateEmptyTag,
|
||||||
|
this.validateSpecialCharacters
|
||||||
],
|
],
|
||||||
this.validateIfNotExistingTag.bind(this)
|
this.validateIfNotExistingTag.bind(this)
|
||||||
);
|
);
|
||||||
@@ -301,7 +304,7 @@ export class TagsCreatorComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private loadTags(name: string) {
|
private loadTags(name: string) {
|
||||||
if (name) {
|
if (name && !this.tagNameControl.hasError('specialCharacters')) {
|
||||||
forkJoin({
|
forkJoin({
|
||||||
exactResult: this.tagService.findTagByName(name),
|
exactResult: this.tagService.findTagByName(name),
|
||||||
searchedResult: this.tagService.searchTags(name, DEFAULT_TAGS_SORTING, false, 0, this.existingTagsListLimit)
|
searchedResult: this.tagService.searchTags(name, DEFAULT_TAGS_SORTING, false, 0, this.existingTagsListLimit)
|
||||||
@@ -369,6 +372,13 @@ export class TagsCreatorComponent implements OnInit, OnDestroy {
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private validateSpecialCharacters(tagNameControl: FormControl<string>): TagNameControlErrors | null {
|
||||||
|
const specialSymbolsRegex = /[':"\\|<>/?]/;
|
||||||
|
return tagNameControl.value.length && specialSymbolsRegex.test(tagNameControl.value)
|
||||||
|
? { specialCharacters: true }
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
private setTagNameControlErrorMessageKey(): void {
|
private setTagNameControlErrorMessageKey(): void {
|
||||||
this._tagNameErrorMessageKey = this.tagNameControl.invalid
|
this._tagNameErrorMessageKey = this.tagNameControl.invalid
|
||||||
? `TAG.TAGS_CREATOR.ERRORS.${this.nameErrorMessagesByErrors.get(
|
? `TAG.TAGS_CREATOR.ERRORS.${this.nameErrorMessagesByErrors.get(
|
||||||
|
Reference in New Issue
Block a user