diff --git a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts index a0a53a088af69909713950670111b2a303151142..e84d1d813df15f207b77c4965a0887b1baf5c1d7 100644 --- a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts +++ b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.spec.ts @@ -35,10 +35,8 @@ import { getControlForInvalidParam, getControlForIssue, getFieldPath, - getLastPart, getMessageForInvalidParam, getMessageForIssue, - getPartsAfterPrefix, setInvalidParamValidationError, setIssueValidationError, } from './tech.validation.util'; @@ -154,13 +152,13 @@ describe('ValidationUtils', () => { }); }); - describe.skip('invalid param', () => { - const formPrefixes: string[] = ['', 'some-prefix']; + describe('invalid param', () => { + const formPrefixes: string[] = ['', 'somePrefix']; const fieldNames: string[] = ['baseField1', 'baseField2', 'subGroup.subGroupField1']; - const prefixNameCombinations: string[][] = formPrefixes.flatMap((prefix) => - fieldNames.map((name) => [prefix, name]), - ); - const unknownName = 'unknown-field'; + const prefixNameCombinations: string[][] = formPrefixes + .flatMap((prefix) => fieldNames.map((name) => [prefix, name])) + .filter((el) => existingPrefixAndFieldCombination(el[0], el[1])); + const fieldLabel: string = faker.lorem.word(); describe.each(prefixNameCombinations)( @@ -180,7 +178,7 @@ describe('ValidationUtils', () => { it('should return', () => { const msg: string = getMessageForInvalidParam(fieldLabel, invalidParam); - expect(msg).toEqual(`Bitte ${fieldName} ausfüllen`); + expect(msg).toEqual(`Bitte ${fieldLabel} ausfüllen`); }); }); @@ -194,12 +192,11 @@ describe('ValidationUtils', () => { describe('set invalid param validation error', () => { it('should assign invalidParam to form control error without prefix', () => { - const message: string = getMessageForInvalidParam(fieldLabel, invalidParam); - setInvalidParamValidationError(form, invalidParam, prefix); - const errorMessage: string = form.getError(invalidParam.reason, fieldName); - expect(errorMessage).toBe(message); + const result: InvalidParam = form.getError(invalidParam.reason, fieldName); + + expect(result).toBe(invalidParam); }); it('should mark form as touched', () => { @@ -210,93 +207,32 @@ describe('ValidationUtils', () => { }); }, ); - - describe.each([ - ['', '', 'unknown-field'], - ['valid-prefix', 'valid-prefix', 'unknown-field'], - ['valid-prefix', 'valid-prefix', 'subGroup.unknown-field'], - ['unknown-prefix', 'valid-prefix', 'unknown-field'], - ['unknown-prefix', 'valid-prefix', 'baseField1'], - ])( - 'with pathPrefix "%s", paramPrefix "%s", and field-name "%s"', - (pathPrefix, paramPrefix, fieldName) => { - let invalidParam: InvalidParam; - - beforeEach(() => { - form.reset(); - invalidParam = createInvalidParam(); - invalidParam.name = paramPrefix.length > 0 ? `${paramPrefix}.${fieldName}` : fieldName; - }); - - it('should not find form control', () => { - const control: AbstractControl = getControlForInvalidParam( - form, - invalidParam, - pathPrefix, - ); - - expect(control).toBeFalsy(); - }); - - it('should not assign to field control error', () => { - setInvalidParamValidationError(form, invalidParam, pathPrefix); - - const errorMessage = form.getError(invalidParam.reason, unknownName); - expect(errorMessage).toBeFalsy(); - }); - - it('should not mark as touched', () => { - setInvalidParamValidationError(form, invalidParam, pathPrefix); - - expect(form.touched).toBeFalsy(); - }); - }, - ); }); describe('getFieldPath', () => { - const resourcePath: string = 'resource'; + const resource: string = 'resource'; const backendClassName: string = 'class'; - it('should return simple field path', () => { + it('should return field path ', () => { const fieldPath: string = 'field1'; - const fullPath: string = `${backendClassName}.${resourcePath}.${fieldPath}`; + const fullPath: string = `${backendClassName}.${resource}.${fieldPath}`; - const result: string = getFieldPath(fullPath); + const result: string = getFieldPath(fullPath, resource); expect(result).toBe(fieldPath); }); - it('should return hierarchical field path ', () => { - const fieldPath: string = 'fieldGroup.field1'; - const fullPath: string = `${backendClassName}.${resourcePath}.${fieldPath}`; - - const result: string = getFieldPath(fullPath, resourcePath); - - expect(result).toBe(fieldPath); - }); - }); - - describe('getLastPart', () => { - it('should get last term in string of terms', () => { - const lastPart: string = 'field'; - const allParts: string = 'class.resource.' + lastPart; - - const result: string = getLastPart(allParts); - - expect(result).toBe(lastPart); - }); - }); - - describe('getPartsAfterPrefix', () => { it('should get all parts after the prefix', () => { - const lastParts: string = 'group.field'; - const prefix: string = 'resource'; - const allParts: string = 'class.' + prefix + '.' + lastParts; + const fieldPath: string = 'group.field1'; + const fullPath: string = `${backendClassName}.${resource}.${fieldPath}`; - const result: string = getPartsAfterPrefix(allParts, prefix); + const result: string = getFieldPath(fullPath, resource); - expect(result).toBe(lastParts); + expect(result).toBe(fieldPath); }); }); }); + +function existingPrefixAndFieldCombination(prefix: string, field: string): boolean { + return !(prefix === '' && field === 'subGroup.subGroupField1'); +} diff --git a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts index 85e813f7b84bd0d50d8dc2004ef3f72426f8323c..9a76e4b6f54deb9a0cef10a26406333283565690 100644 --- a/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts +++ b/alfa-client/libs/tech-shared/src/lib/validation/tech.validation.util.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { AbstractControl, UntypedFormGroup } from '@angular/forms'; -import { isEmpty, isNil } from 'lodash-es'; +import { isNil } from 'lodash-es'; import { ApiError, InvalidParam, Issue, IssueParam } from '../tech.model'; import { replacePlaceholder } from '../tech.util'; import { VALIDATION_MESSAGES, ValidationMessageCode } from './tech.validation.messages'; @@ -114,15 +114,7 @@ export function getMessageForInvalidParam(label: string, invalidParam: InvalidPa return msg; } -export function getFieldPath(name: string, pathPrefix?: string): string { - return isEmpty(pathPrefix) ? getLastPart(name) : getPartsAfterPrefix(name, pathPrefix); -} - -export function getLastPart(name: string): string { - return name.split('.').pop(); -} - -export function getPartsAfterPrefix(name: string, pathPrefix: string): string { +export function getFieldPath(name: string, pathPrefix: string): string { pathPrefix = `${pathPrefix}.`; const indexField = name.lastIndexOf(pathPrefix) + pathPrefix.length; return name.slice(indexField);