diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/DataQuality/AddTestCaseNewFlow.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/DataQuality/AddTestCaseNewFlow.spec.ts
index 964658b90e6..89d92ffa156 100644
--- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/DataQuality/AddTestCaseNewFlow.spec.ts
+++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/DataQuality/AddTestCaseNewFlow.spec.ts
@@ -57,6 +57,23 @@ test.describe('Add TestCase New Flow', () => {
paramsValue,
expectSchedulerCard = true,
} = data;
+ await page.getByTestId('test-case-name').click();
+
+ // test case name restriction for `:: " >` character
+ const invalidTestCaseNames = ['test::case', 'test"case', 'test>case'];
+ for (const name of invalidTestCaseNames) {
+ await page.getByTestId('test-case-name').fill(name);
+ await page.waitForSelector(`#testCaseFormV1_testName_help`, {
+ state: 'visible',
+ });
+
+ await expect(page.locator('#testCaseFormV1_testName_help')).toHaveText(
+ 'Name cannot contain double colons (::), quotes ("), or greater-than symbols (>).'
+ );
+
+ await page.getByTestId('test-case-name').clear();
+ }
+
await page.getByTestId('test-case-name').fill(`${testTypeId}_test_case`);
await page.click('#testCaseFormV1_testTypeId');
await page.fill('#testCaseFormV1_testTypeId', testType);
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.test.tsx
index b3113b03eff..8680d1d7103 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.test.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.test.tsx
@@ -10,14 +10,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import {
- act,
- fireEvent,
- render,
- screen,
- waitFor,
-} from '@testing-library/react';
-import { forwardRef } from 'react';
+import { fireEvent, render, screen, waitFor } from '@testing-library/react';
+import { act, forwardRef } from 'react';
+import { TEST_CASE_NAME_REGEX } from '../../../../constants/regex.constants';
import { MOCK_TABLE } from '../../../../mocks/TableData.mock';
import { MOCK_TEST_CASE } from '../../../../mocks/TestSuite.mock';
import { getIngestionPipelines } from '../../../../rest/ingestionPipelineAPI';
@@ -164,6 +159,7 @@ jest.mock('../../../../rest/testAPI', () => ({
getListTestDefinitions: jest.fn().mockResolvedValue(mockTestDefinitions),
getListTestCase: jest.fn().mockResolvedValue({ data: [] }),
createTestCase: jest.fn().mockResolvedValue(MOCK_TEST_CASE[0]),
+ getListTestCaseBySearch: jest.fn().mockResolvedValue({ data: [] }),
getTestCaseByFqn: jest.fn().mockResolvedValue(MOCK_TEST_CASE[0]),
TestCaseType: {
all: 'all',
@@ -305,6 +301,12 @@ jest.mock('../../../../utils/ToastUtils', () => ({
showSuccessToast: jest.fn(),
}));
+// Mock formUtils to prevent scroll issues in tests
+jest.mock('../../../../utils/formUtils', () => ({
+ ...jest.requireActual('../../../../utils/formUtils'),
+ createScrollToErrorHandler: jest.fn(() => jest.fn()),
+}));
+
describe('TestCaseFormV1 Component', () => {
beforeEach(() => {
jest.clearAllMocks();
@@ -983,6 +985,63 @@ describe('TestCaseFormV1 Component', () => {
});
});
+ describe('Test Case Name Validation', () => {
+ it('should render test case name field with validation rules', async () => {
+ render();
+
+ await waitFor(() => {
+ expect(screen.getByTestId('test-case-form-v1')).toBeInTheDocument();
+ });
+
+ const testNameField = screen.getByTestId('test-case-name');
+
+ expect(testNameField).toBeInTheDocument();
+
+ // Test that the field accepts input
+ await act(async () => {
+ fireEvent.change(testNameField, {
+ target: { value: 'valid_test_name' },
+ });
+ });
+
+ expect(testNameField).toHaveValue('valid_test_name');
+ });
+
+ it('should accept valid test case names without validation errors', async () => {
+ render();
+
+ await waitFor(() => {
+ expect(screen.getByTestId('test-case-form-v1')).toBeInTheDocument();
+ });
+
+ const testNameField = screen.getByTestId('test-case-name');
+
+ // Test valid name format
+ const validName = 'table_column_count_equals';
+
+ await act(async () => {
+ fireEvent.change(testNameField, { target: { value: validName } });
+ fireEvent.blur(testNameField);
+ });
+
+ // Field should accept the valid input
+ expect(testNameField).toHaveValue(validName);
+ });
+
+ it('should have TEST_CASE_NAME_REGEX validation configured', () => {
+ // Test that TEST_CASE_NAME_REGEX pattern is correctly configured
+ // Test forbidden characters
+ expect(TEST_CASE_NAME_REGEX.test('test::case')).toBe(false);
+ expect(TEST_CASE_NAME_REGEX.test('test"case')).toBe(false);
+ expect(TEST_CASE_NAME_REGEX.test('test>case')).toBe(false);
+
+ // Test allowed characters
+ expect(TEST_CASE_NAME_REGEX.test('table_column_count_equals')).toBe(true);
+ expect(TEST_CASE_NAME_REGEX.test('valid.test.name')).toBe(true);
+ expect(TEST_CASE_NAME_REGEX.test('test case with spaces')).toBe(true);
+ });
+ });
+
describe('Test Cases Selection Logic', () => {
it('should set testCases to undefined when selectAllTestCases is not false', () => {
const testValues = {
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.tsx
index b150f9df4f7..cbc2d4874a9 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DataQuality/AddDataQualityTest/components/TestCaseFormV1.tsx
@@ -42,7 +42,7 @@ import {
PAGE_SIZE_LARGE,
PAGE_SIZE_MEDIUM,
} from '../../../../constants/constants';
-import { ENTITY_NAME_REGEX } from '../../../../constants/regex.constants';
+import { TEST_CASE_NAME_REGEX } from '../../../../constants/regex.constants';
import { DEFAULT_SCHEDULE_CRON_DAILY } from '../../../../constants/Schedular.constants';
import { useAirflowStatus } from '../../../../context/AirflowStatusProvider/AirflowStatusProvider';
import { useLimitStore } from '../../../../context/LimitsProvider/useLimitsStore';
@@ -344,8 +344,8 @@ const TestCaseFormV1: FC = ({
placeholder: t('message.enter-test-case-name'),
rules: [
{
- pattern: ENTITY_NAME_REGEX,
- message: t('message.entity-name-validation'),
+ pattern: TEST_CASE_NAME_REGEX,
+ message: t('message.test-case-name-validation'),
},
{
max: MAX_NAME_LENGTH,
diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.test.ts b/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.test.ts
index ffd30c845f3..f37650cc914 100644
--- a/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.test.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.test.ts
@@ -10,7 +10,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { ENTITY_NAME_REGEX, TAG_NAME_REGEX } from './regex.constants';
+import {
+ ENTITY_NAME_REGEX,
+ TAG_NAME_REGEX,
+ TEST_CASE_NAME_REGEX,
+} from './regex.constants';
describe('Test Regex', () => {
it('EntityName regex should pass for the valid entity name', () => {
@@ -209,4 +213,29 @@ describe('Test Regex', () => {
expect(TAG_NAME_REGEX.test('')).toEqual(false);
});
});
+
+ describe('TEST_CASE_NAME_REGEX', () => {
+ it('should reject names with forbidden characters', () => {
+ expect(TEST_CASE_NAME_REGEX.test('test::case')).toEqual(false);
+ expect(TEST_CASE_NAME_REGEX.test('test"case')).toEqual(false);
+ expect(TEST_CASE_NAME_REGEX.test('test>case')).toEqual(false);
+ expect(TEST_CASE_NAME_REGEX.test('test::case"name>invalid')).toEqual(
+ false
+ );
+ });
+
+ it('should accept names with allowed characters', () => {
+ expect(TEST_CASE_NAME_REGEX.test('table_column_count_equals')).toEqual(
+ true
+ );
+ expect(
+ TEST_CASE_NAME_REGEX.test('shop_id.column_value_max_to_be_between')
+ ).toEqual(true);
+ expect(TEST_CASE_NAME_REGEX.test('test case with spaces')).toEqual(true);
+ expect(TEST_CASE_NAME_REGEX.test('test_case_123')).toEqual(true);
+ expect(TEST_CASE_NAME_REGEX.test('TestCase-WithHyphens')).toEqual(true);
+ expect(TEST_CASE_NAME_REGEX.test('test.case.with.dots')).toEqual(true);
+ expect(TEST_CASE_NAME_REGEX.test('test_case_!@#$%^&*()')).toEqual(true);
+ });
+ });
});
diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.ts b/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.ts
index acced23b4d2..852b007334b 100644
--- a/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.ts
+++ b/openmetadata-ui/src/main/resources/ui/src/constants/regex.constants.ts
@@ -20,6 +20,15 @@ export const EMAIL_REG_EX = /^\S+@\S+\.\S+$/;
*/
export const ENTITY_NAME_REGEX = /^((?!::).)*$/;
+/**
+ * Matches any string that does NOT contain the following:
+ * - Double colon (::)
+ * - Double quote (")
+ * - Greater-than symbol (>)
+ * Useful for restricting names from including these forbidden characters.
+ */
+export const TEST_CASE_NAME_REGEX = /^((?!::)(?!")(?!>).)*$/;
+
export const TAG_NAME_REGEX = /^[\p{L}\p{M}\w\- .&()]+$/u;
export const passwordRegex =
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
index 8a20742fe0d..b260207bdc5 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Team erfolgreich verschoben!",
"team-no-asset": "Ihr Team hat keine Vermögenswerte.",
"test-case-insight-description": "Zugriff auf eine zentrale Ansicht der Gesundheit Ihres Datensatzes basierend auf konfigurierten Testvalidierungen.",
+ "test-case-name-validation": "Der Name darf keine doppelten Doppelpunkte (::), Anführungszeichen (\") oder Größer-als-Symbole (>) enthalten.",
"test-case-schedule-description": "Die Datenqualitätstests können mit der gewünschten Häufigkeit geplant werden. Die Zeitzone ist UTC.",
"test-connection-cannot-be-triggered": "Die Testverbindung kann nicht ausgelöst werden.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
index 3cd386b230e..f799784595b 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Team moved successfully!",
"team-no-asset": "Your team does not have any assets.",
"test-case-insight-description": "Access a centralized view of your dataset's health based on configured test validations.",
+ "test-case-name-validation": "Name cannot contain double colons (::), quotes (\"), or greater-than symbols (>).",
"test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.",
"test-connection-cannot-be-triggered": "Test connection cannot be triggered.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
index 15044e7540f..a52ee332ac0 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "¡Equipo movido con éxito!",
"team-no-asset": "Tu equipo no tiene ningún activo.",
"test-case-insight-description": "Accede a una vista centralizada de la salud de tu dataset basada en las validaciones de prueba configuradas.",
+ "test-case-name-validation": "El nombre no puede contener dos puntos dobles (::), comillas (\") o símbolos de mayor que (>).",
"test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.",
"test-connection-cannot-be-triggered": "No se puede iniciar la prueba de conexión.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
index 73728c3c5ef..4a08921284d 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "L'équipe a été déplacée avec succès !",
"team-no-asset": "Votre équipe n'a pas d'actifs de données",
"test-case-insight-description": "Accédez à une vue centralisée de la santé de votre dataset basée sur les validations de test configurées.",
+ "test-case-name-validation": "Le nom ne peut pas contenir de double deux-points (::), de guillemets (\") ou de symboles supérieur à (>).",
"test-case-schedule-description": "Les tests de quelité de données peuvent être planifiés pour tourner à la fréquence désirée. La timezone est en UTC.",
"test-connection-cannot-be-triggered": "Le test de connexion ne peut pas être déclenché.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
index b51a92b74b5..344a31505f8 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "O equipo moveuse correctamente!",
"team-no-asset": "O teu equipo non ten ningún activo.",
"test-case-insight-description": "Accede a unha vista centralizada da saúde do teu conxunto de datos baseada en validacións de proba configuradas.",
+ "test-case-name-validation": "O nome non pode conter dous puntos duplos (::), comiñas (\") ou símbolos de maior que (>).",
"test-case-schedule-description": "As probas de calidade de datos poden programarse para executarse coa frecuencia desexada. A zona horaria está en UTC.",
"test-connection-cannot-be-triggered": "Non se pode iniciar a conexión de proba.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
index dd61867a863..cb0d4dfe703 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "הקבוצה הועברה בהצלחה!",
"team-no-asset": "לקבוצתך אין נכסים.",
"test-case-insight-description": "גישה לתצוגה מרכזית של בריאות מערך הנתונים שלך על בסיס אימותי בדיקה מוגדרים.",
+ "test-case-name-validation": "השם לא יכול להכיל נקודתיים כפולות (::), מרכאות (\") או סמלי גדול מ- (>).",
"test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.",
"test-connection-cannot-be-triggered": "אין אפשרות להפעיל בדיקת חיבור.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
index 42460229d7d..9c6176ab3db 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "チームの移動に成功しました!",
"team-no-asset": "あなたのチームにはアセットがありません。",
"test-case-insight-description": "設定されたテストバリデーションに基づいて、データセットの健全性を集中して確認できます。",
+ "test-case-name-validation": "名前にはダブルコロン(::)、引用符(\")、またはより大きい記号(>)を含めることはできません。",
"test-case-schedule-description": "データ品質テストは希望の頻度でスケジュール実行できます。タイムゾーンはUTCです。",
"test-connection-cannot-be-triggered": "接続テストを開始できません。",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
index 7882eb7c122..4e495017f25 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "팀이 성공적으로 이동되었습니다!",
"team-no-asset": "귀하의 팀은 자산이 없습니다.",
"test-case-insight-description": "구성된 테스트 검증을 기반으로 데이터셋 상태의 중앙 집중식 보기에 액세스합니다.",
+ "test-case-name-validation": "이름에는 이중 콜론(::), 따옴표(\"), 또는 보다 큰 기호(>)를 포함할 수 없습니다.",
"test-case-schedule-description": "데이터 품질 테스트는 원하는 빈도로 실행되도록 예약할 수 있습니다. 시간대는 UTC입니다.",
"test-connection-cannot-be-triggered": "연결 테스트를 트리거할 수 없습니다.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
index 12238c059e5..26920dae4da 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "टीम यशस्वीरित्या हलवली!",
"team-no-asset": "तुमच्या टीमकडे कोणतीही ॲसेट नाहीत.",
"test-case-insight-description": "कॉन्फिगर केलेल्या चाचणी प्रमाणीकरणांवर आधारित आपल्या डेटासेटच्या आरोग्याचे केंद्रीकृत दृश्य प्रवेश करा.",
+ "test-case-name-validation": "नावामध्ये डबल कॉलन (::), अवतरण (\") किंवा मोठे चिन्ह (>) असू शकत नाही.",
"test-case-schedule-description": "डेटा गुणवत्ता चाचण्या इच्छित वारंवारतेवर चालवण्यासाठी वेळापत्रक करता येतात. टाइमझोन UTC मध्ये आहे.",
"test-connection-cannot-be-triggered": "कनेक्शन चाचणी ट्रिगर केली जाऊ शकत नाही.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
index 6b4f6c6ab9e..e0227fc3643 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Team succesvol verplaatst!",
"team-no-asset": "Je team heeft geen assets.",
"test-case-insight-description": "Toegang tot een gecentraliseerde weergave van de gezondheid van uw dataset op basis van geconfigureerde testvalidaties.",
+ "test-case-name-validation": "Naam mag geen dubbele dubbelpunten (::), aanhalingstekens (\") of groter-dan symbolen (>) bevatten.",
"test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.",
"test-connection-cannot-be-triggered": "Testconnectie kan niet worden geactiveerd.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
index c3e0a8a80d3..df18d6c7792 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "تیم با موفقیت منتقل شد!",
"team-no-asset": "تیم شما هیچ دارایی ندارد.",
"test-case-insight-description": "دسترسی به نمای متمرکز سلامت مجموعه دادههای شما بر اساس اعتبارسنجیهای آزمایش پیکربندی شده.",
+ "test-case-name-validation": "نام نمیتواند شامل دو نقطه دوگانه (::)، نقل قول (\") یا نمادهای بزرگتر از (>) باشد.",
"test-case-schedule-description": "آزمونهای کیفیت داده میتوانند به صورت دورهای برنامهریزی شوند. منطقه زمانی به صورت UTC است.",
"test-connection-cannot-be-triggered": "اتصال تست نمیتواند اجرا شود.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
index 944fbc0ca61..4e8e91cd635 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Equipe movida com sucesso!",
"team-no-asset": "Sua equipe não possui ativos.",
"test-case-insight-description": "Acesse uma visão centralizada da saúde do seu dataset baseada em validações de teste configuradas.",
+ "test-case-name-validation": "O nome não pode conter dois pontos duplos (::), aspas (\") ou símbolos de maior que (>).",
"test-case-schedule-description": "Os testes de qualidade de dados podem ser programados para serem executados na frequência desejada. O fuso horário está em UTC.",
"test-connection-cannot-be-triggered": "Não é possível acionar o teste de conexão.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
index dd57841fe43..b5898cde6d4 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Equipa movida com sucesso!",
"team-no-asset": "Sua equipa não possui ativos.",
"test-case-insight-description": "Aceda a uma vista centralizada da saúde do seu conjunto de dados baseada em validações de teste configuradas.",
+ "test-case-name-validation": "O nome não pode conter dois pontos duplos (::), aspas (\") ou símbolos de maior que (>).",
"test-case-schedule-description": "The data quality tests can be scheduled to run at the desired frequency. The timezone is in UTC.",
"test-connection-cannot-be-triggered": "Não é possível acionar o teste de conexão.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
index 4590b7e23d6..a1c4cf994fd 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Команда успешно переехала!",
"team-no-asset": "У вашей команды нет объектов.",
"test-case-insight-description": "Доступ к централизованному представлению состояния вашего набора данных на основе настроенных проверок тестов.",
+ "test-case-name-validation": "Имя не может содержать двойные двоеточия (::), кавычки (\") или символы больше (>).",
"test-case-schedule-description": "Тесты качества данных можно запланировать на желаемую частоту. Часовой пояс — UTC.",
"test-connection-cannot-be-triggered": "Тестовое соединение не может быть запущено.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
index 20b818b45ec..ef30cb4dea8 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "ย้ายทีมสำเร็จ!",
"team-no-asset": "ทีมของคุณไม่มีสินทรัพย์ใด ๆ",
"test-case-insight-description": "เข้าถึงมุมมองรวมศูนย์ของสุขภาพชุดข้อมูลของคุณตามการตรวจสอบทดสอบที่กำหนดค่าไว้",
+ "test-case-name-validation": "ชื่อไม่สามารถมีเครื่องหมายโคลอนคู่ (::) เครื่องหมายคำพูด (\") หรือเครื่องหมายมากกว่า (>) ได้",
"test-case-schedule-description": "การทดสอบคุณภาพข้อมูลสามารถกำหนดเวลาให้ดำเนินการในความถี่ที่ต้องการ เขตเวลาคือ UTC",
"test-connection-cannot-be-triggered": "ไม่สามารถกระตุ้นการทดสอบการเชื่อมต่อได้",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json
index f717eb91067..b8e163abfe9 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/tr-tr.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "Takım başarıyla taşındı!",
"team-no-asset": "Takımınızın herhangi bir varlığı yok.",
"test-case-insight-description": "Yapılandırılmış test doğrulamalarına dayalı olarak veri setinizin sağlığının merkezi görünümüne erişin.",
+ "test-case-name-validation": "Ad çift iki nokta (::), tırnak işareti (\") veya büyüktür simgesi (>) içeremez.",
"test-case-schedule-description": "Veri kalitesi testleri istenen sıklıkta çalışacak şekilde zamanlanabilir. Saat dilimi UTC'dir.",
"test-connection-cannot-be-triggered": "Bağlantı testi tetiklenemez.",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
index b5b1afd401b..13b50679d16 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
@@ -2424,6 +2424,7 @@
"team-moved-success": "团队移动成功",
"team-no-asset": "您的团队没有任何资产",
"test-case-insight-description": "基于配置的测试验证,访问数据集健康状况的集中视图。",
+ "test-case-name-validation": "名称不能包含双冒号(::)、引号(\")或大于符号(>)。",
"test-case-schedule-description": "数据质控测试可按所需频率安排运行, 时区为 UTC",
"test-connection-cannot-be-triggered": "连接测试无法被触发",
"test-connection-taking-too-long": {
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json
index 9e13f280968..24445dd982f 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-tw.json
@@ -693,7 +693,14 @@
"frequently-joined-column-plural": "經常連接的欄位",
"frequently-joined-table-plural": "經常連接的資料表",
"friday": "星期五",
+ "from-child-entity-fqn": "From Child Entity FQN",
+ "from-domain": "From Domain",
+ "from-entity": "From Entity",
+ "from-entity-fqn": "From Entity FQN",
"from-lowercase": "從",
+ "from-owner-plural": "From Owners",
+ "from-service-name": "From Service Name",
+ "from-service-type": "From Service Type",
"full-name": "全名",
"full-screen": "全螢幕",
"full-size": "完整大小",
@@ -755,6 +762,7 @@
"hide": "隱藏",
"hide-all": "全部隱藏",
"hide-deleted-entity": "隱藏已刪除的 {{entity}}",
+ "hide-property-plural": "Hide Properties",
"hierarchy": "階層",
"hierarchy-depth": "階層深度",
"hierarchy-label": "階層:",
@@ -795,6 +803,7 @@
"ingestion-pipeline": "擷取管線",
"ingestion-pipeline-name": "擷取管線名稱",
"ingestion-plural": "擷取",
+ "ingestion-runner": "Ingestion Runner",
"ingestion-workflow-lowercase": "擷取工作流程",
"inherited": "已繼承",
"inherited-entity": "已繼承的 {{entity}}",
@@ -1154,14 +1163,21 @@
"pii-uppercase": "PII",
"pipe-symbol": "|",
"pipeline": "管線",
+ "pipeline-description": "Pipeline Description",
"pipeline-detail-plural": "管線詳情",
"pipeline-detail-plural-lowercase": "管線詳情",
+ "pipeline-display-name": "Pipeline Display Name",
+ "pipeline-domain": "Pipeline Domain",
"pipeline-lowercase": "管線",
"pipeline-lowercase-plural": "管線",
"pipeline-name": "管線名稱",
+ "pipeline-owner-plural": "Pipeline Owners",
"pipeline-plural": "管線",
"pipeline-service": "管線服務",
+ "pipeline-service-name": "Pipeline Service Name",
+ "pipeline-service-type": "Pipeline Service Type",
"pipeline-state": "管線狀態",
+ "pipeline-type": "Pipeline Type",
"platform": "平台",
"platform-type-lineage": "{{platformType}} 血緣",
"play": "播放",
@@ -1621,9 +1637,16 @@
"timeout": "逾時",
"timezone": "時區",
"title": "標題",
+ "to-child-entity-fqn": "To Child Entity FQN",
+ "to-domain": "To Domain",
+ "to-entity": "To Entity",
+ "to-entity-fqn": "To Entity FQN",
"to-learn-more-please-check-out": "要了解更多,請查看",
"to-lowercase": "至",
+ "to-owner-plural": "To Owners",
"to-perform": "執行",
+ "to-service-name": "To Service Name",
+ "to-service-type": "To Service Type",
"token-end-point": "權杖端點",
"token-expiration": "權杖到期",
"token-expired": "權杖已到期",
@@ -1733,6 +1756,7 @@
"view-new-count": "檢視 {{count}} 個新的",
"view-parsing-timeout-limit": "檢視定義剖析逾時限制",
"view-plural": "檢視",
+ "view-property-plural": "View Properties",
"visit-developer-website": "造訪開發者網站",
"volume-change": "量變更",
"wants-to-access-your-account": "想要存取您的 {{username}} 帳戶",
@@ -2400,6 +2424,7 @@
"team-moved-success": "團隊移動成功!",
"team-no-asset": "您的團隊沒有任何資產。",
"test-case-insight-description": "根據設定的測試驗證,存取您資料集的健康狀況集中檢視。",
+ "test-case-name-validation": "名稱不能包含雙冒號(::)、引號(\")或大於符號(>)。",
"test-case-schedule-description": "可以排程資料品質測試以所需的頻率執行。時區為 UTC。",
"test-connection-cannot-be-triggered": "無法觸發測試連線。",
"test-connection-taking-too-long": {