diff --git a/openmetadata-ui/src/main/resources/ui/src/components/AddDataQualityTest/components/TestCaseForm.tsx b/openmetadata-ui/src/main/resources/ui/src/components/AddDataQualityTest/components/TestCaseForm.tsx index f9adebf3414..f786b2c9f39 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/AddDataQualityTest/components/TestCaseForm.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/AddDataQualityTest/components/TestCaseForm.tsx @@ -36,6 +36,7 @@ import { TestDataType, TestDefinition, } from '../../../generated/tests/testDefinition'; +import { getNameFromFQN } from '../../../utils/CommonUtils'; import { generateEntityLink } from '../../../utils/TableUtils'; import { showErrorToast } from '../../../utils/ToastUtils'; import RichTextEditor from '../../common/rich-text-editor/RichTextEditor'; @@ -55,10 +56,10 @@ const TestCaseForm: React.FC = ({ const [selectedTestType, setSelectedTestType] = useState( initialValue?.testDefinition?.id ); - const [testCases, setTestCases] = useState<{ [key: string]: TestCase }>({}); + const [testCases, setTestCases] = useState([]); const [sqlQuery, setSqlQuery] = useState({ name: 'sqlExpression', - value: initialValue?.parameterValues?.[0].value || '', + value: initialValue?.parameterValues?.[0]?.value || '', }); const fetchAllTestDefinitions = async () => { @@ -80,10 +81,8 @@ const TestCaseForm: React.FC = ({ limit: API_RES_MAX_SIZE, entityLink: generateEntityLink(entityTypeFQN, isColumnFqn), }); - const modifiedData = data.reduce((acc, curr) => { - return { ...acc, [curr.testDefinition.fullyQualifiedName || '']: curr }; - }, {}); - setTestCases(modifiedData); + + setTestCases(data); } catch (error) { showErrorToast(error as AxiosError); } @@ -178,15 +177,33 @@ const TestCaseForm: React.FC = ({ [curr.name || '']: getSelectedTestDefinition()?.parameterDefinition?.[0].dataType === TestDataType.Array - ? (JSON.parse(curr.value || '[]') as string[]).map((val) => ({ + ? (JSON.parse(curr?.value || '[]') as string[]).map((val) => ({ value: val, })) - : curr.value, + : curr?.value, }), {} ); }; + const handleValueChange: FormProps['onValuesChange'] = (value) => { + if (value.testTypeId) { + const testType = testDefinitions.find( + (test) => test.id === value.testTypeId + ); + setSelectedTestType(value.testTypeId); + const testCount = testCases.filter((test) => + test.name.includes(`${getNameFromFQN(entityTypeFQN)}_${testType?.name}`) + ); + // generating dynamic unique name based on entity_testCase_number + form.setFieldsValue({ + testName: `${getNameFromFQN(entityTypeFQN)}_${testType?.name}${ + testCount.length ? `_${testCount.length}` : '' + }`, + }); + } + }; + useEffect(() => { if (testDefinitions.length === 0) { fetchAllTestDefinitions(); @@ -194,24 +211,22 @@ const TestCaseForm: React.FC = ({ if (isEmpty(testCases)) { fetchAllTestCases(); } + form.setFieldsValue({ + testName: initialValue?.name ?? getNameFromFQN(entityTypeFQN), + testTypeId: initialValue?.testDefinition?.id, + params: initialValue?.parameterValues?.length + ? getParamsValue() + : undefined, + }); }, []); return (
{ - if (value.testTypeId) { - setSelectedTestType(value.testTypeId); - } - }}> + onValuesChange={handleValueChange}> = ({ }, { validator: (_, value) => { - if ( - Object.values(testCases).some((suite) => suite.name === value) - ) { + if (testCases.some((test) => test.name === value)) { return Promise.reject('Name already exist!'); }