From ca20c59cb0d15ff637b69759aee272a6282bce50 Mon Sep 17 00:00:00 2001
From: "Zickermann, Jan" <jan.zickermann@dataport.de>
Date: Mon, 4 Mar 2024 16:31:44 +0100
Subject: [PATCH] OZG-4949 OZG-5136 Get message from InvalidParamsItem

---
 .../validation/tech.validation.util.spec.ts   | 28 ++++++++++++++++---
 .../lib/validation/tech.validation.util.ts    | 27 ++++++++++++++----
 2 files changed, 46 insertions(+), 9 deletions(-)

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 3149fb9d66..ec1c1f5bd3 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
@@ -21,10 +21,17 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
-import { createIssue } from '../../../test/error';
-import { Issue } from '../tech.model';
-import { getControlForIssue, getMessageForIssue, setValidationError } from './tech.validation.util';
+import {UntypedFormControl, UntypedFormGroup} from '@angular/forms';
+import {createIssue} from '../../../test/error';
+import {Issue} from '../tech.model';
+import {
+	getControlForIssue,
+	getMessageForInvalidParamsItem,
+	getMessageForIssue,
+	setValidationError,
+} from './tech.validation.util';
+import {InvalidParamsItem} from '@alfa-client/tech-shared';
+import {ValidationMessageCode} from './tech.validation.messages';
 
 describe('ValidationUtils', () => {
   describe('setValidationError', () => {
@@ -136,4 +143,17 @@ describe('ValidationUtils', () => {
       expect(msg).toContain('3');
     });
   });
+
+  describe('get message for invalid-params-item', () => {
+    const item: InvalidParamsItem = {
+      name: 'name-of-field',
+      reason: ValidationMessageCode.VALIDATION_FIELD_EMPTY,
+    };
+
+    it('should return message', () => {
+      const msg = getMessageForInvalidParamsItem(item);
+
+      expect(msg).toEqual(`Bitte ${item.name} ausfüllen`);
+    });
+  });
 });
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 9007e24112..e8e594efdd 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
@@ -21,11 +21,12 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { AbstractControl, UntypedFormGroup } from '@angular/forms';
-import { isNil } from 'lodash-es';
-import { ApiError, Issue } from '../tech.model';
-import { replacePlaceholder } from '../tech.util';
-import { ValidationMessageCode, VALIDATION_MESSAGES } from './tech.validation.messages';
+import {AbstractControl, UntypedFormGroup} from '@angular/forms';
+import {isNil} from 'lodash-es';
+import {ApiError, Issue} from '../tech.model';
+import {replacePlaceholder} from '../tech.util';
+import {VALIDATION_MESSAGES, ValidationMessageCode} from './tech.validation.messages';
+import {InvalidParamsItem} from '../error/error.util';
 
 export function isValidationError(issue: Issue): boolean {
   return issue.messageCode.includes('javax.validation.constraints');
@@ -66,6 +67,22 @@ export function getMessageForIssue(label: string, issue: Issue) {
   return msg;
 }
 
+export function getMessageForInvalidParamsItem(item: InvalidParamsItem): string {
+  let formatString = VALIDATION_MESSAGES[item.reason] ?? item.reason;
+
+  for (const [itemField, value] of Object.entries(item)) {
+    const itemFieldToPlaceholder = {
+      name: 'field',
+    };
+    formatString = replacePlaceholder(
+      formatString,
+      itemFieldToPlaceholder[itemField] ?? itemField,
+      value,
+    );
+  }
+  return formatString;
+}
+
 export function getMessageCode(apiError: ApiError): string {
   return apiError.issues[0].messageCode;
 }
-- 
GitLab