2025-04-03 10:39:47 +05:30
|
|
|
# Copyright 2025 Collate
|
|
|
|
|
# Licensed under the Collate Community License, Version 1.0 (the "License");
|
2023-01-31 15:57:51 +01:00
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
|
# You may obtain a copy of the License at
|
2025-04-03 10:39:47 +05:30
|
|
|
# https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE
|
2023-01-31 15:57:51 +01:00
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
|
# limitations under the License.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Test Table and Column Tests' validate implementations.
|
|
|
|
|
|
|
|
|
|
Each test should validate the Success, Failure and Aborted statuses
|
|
|
|
|
"""
|
|
|
|
|
|
2023-02-22 09:42:34 +01:00
|
|
|
from datetime import datetime, timedelta
|
2023-01-31 15:57:51 +01:00
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
from pandas import DataFrame
|
|
|
|
|
|
2023-12-05 08:18:01 +01:00
|
|
|
from metadata.generated.schema.tests.basic import TestCaseResult, TestCaseStatus
|
2023-02-22 09:42:34 +01:00
|
|
|
from metadata.utils.importer import import_test_case_class
|
2023-01-31 15:57:51 +01:00
|
|
|
|
2025-08-19 06:40:49 +02:00
|
|
|
TEST_CASE_SUPPORT_ROW_LEVEL_PASS_FAILED = {
|
|
|
|
|
"columnValuesLengthToBeBetween",
|
|
|
|
|
"columnValuesToBeBetween",
|
|
|
|
|
"columnValuesToBeInSet",
|
|
|
|
|
"columnValuesToBeNotInSet",
|
|
|
|
|
"columnValuesToBeNotNull",
|
|
|
|
|
"columnValuesToBeUnique",
|
|
|
|
|
"columnValuesToMatchRegex",
|
|
|
|
|
"columnValuesToNotMatchRegex",
|
|
|
|
|
"tableCustomSQLQuery",
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-31 15:57:51 +01:00
|
|
|
EXECUTION_DATE = datetime.strptime("2021-07-03", "%Y-%m-%d")
|
|
|
|
|
DL_DATA = (
|
2023-02-22 09:42:34 +01:00
|
|
|
[
|
|
|
|
|
"1",
|
|
|
|
|
"John",
|
|
|
|
|
"Jo",
|
|
|
|
|
"John Doe",
|
|
|
|
|
"johnny b goode",
|
|
|
|
|
30,
|
|
|
|
|
datetime.today() - timedelta(days=1),
|
2024-11-06 11:17:13 +01:00
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
2025-07-25 15:17:38 +02:00
|
|
|
True,
|
2023-02-22 09:42:34 +01:00
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"2",
|
|
|
|
|
"Jane",
|
|
|
|
|
"Ja",
|
|
|
|
|
"Jone Doe",
|
|
|
|
|
"Johnny d",
|
|
|
|
|
31,
|
|
|
|
|
datetime.today() - timedelta(days=2),
|
2024-11-06 11:17:13 +01:00
|
|
|
19005,
|
|
|
|
|
45.2589385,
|
|
|
|
|
1.4731471,
|
2025-07-25 15:17:38 +02:00
|
|
|
False,
|
2024-11-06 11:17:13 +01:00
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"3",
|
|
|
|
|
"John",
|
|
|
|
|
"Joh",
|
|
|
|
|
"John Doe",
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
datetime.today() - timedelta(days=3),
|
|
|
|
|
11008,
|
|
|
|
|
42.9974445,
|
|
|
|
|
2.2518325,
|
2025-07-25 15:17:38 +02:00
|
|
|
None,
|
2023-02-22 09:42:34 +01:00
|
|
|
],
|
2025-10-30 14:07:45 +01:00
|
|
|
[
|
|
|
|
|
"4",
|
|
|
|
|
"Alice",
|
|
|
|
|
"Al",
|
|
|
|
|
"Alice Smith",
|
|
|
|
|
"Ally",
|
|
|
|
|
30,
|
|
|
|
|
datetime.today() - timedelta(days=4),
|
|
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
|
|
|
|
True,
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"5",
|
|
|
|
|
"Bob",
|
|
|
|
|
"Bo",
|
|
|
|
|
"Bob Johnson",
|
|
|
|
|
"Bobby",
|
|
|
|
|
31,
|
|
|
|
|
datetime.today() - timedelta(days=5),
|
|
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
|
|
|
|
True,
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"6",
|
|
|
|
|
"Charlie",
|
|
|
|
|
"Ch",
|
|
|
|
|
"Charlie Brown",
|
|
|
|
|
"Chuck",
|
|
|
|
|
30,
|
|
|
|
|
datetime.today() - timedelta(days=6),
|
|
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
|
|
|
|
False,
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"7",
|
|
|
|
|
"Diana",
|
|
|
|
|
"Di",
|
|
|
|
|
"Diana Prince",
|
|
|
|
|
"Di",
|
|
|
|
|
31,
|
|
|
|
|
datetime.today() - timedelta(days=7),
|
|
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
|
|
|
|
True,
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
"8",
|
|
|
|
|
"Eve",
|
|
|
|
|
"Ev",
|
|
|
|
|
"Eve Wilson",
|
|
|
|
|
"Evie",
|
|
|
|
|
None,
|
|
|
|
|
datetime.today() - timedelta(days=8),
|
|
|
|
|
60001,
|
|
|
|
|
49.6852237,
|
|
|
|
|
1.7743058,
|
|
|
|
|
False,
|
|
|
|
|
],
|
2023-04-11 20:58:31 +05:30
|
|
|
)
|
2023-01-31 15:57:51 +01:00
|
|
|
|
|
|
|
|
|
2023-04-11 20:58:31 +05:30
|
|
|
DATALAKE_DATA_FRAME = lambda times_increase_sample_data: DataFrame(
|
|
|
|
|
DL_DATA * times_increase_sample_data,
|
2023-02-22 09:42:34 +01:00
|
|
|
columns=[
|
|
|
|
|
"id",
|
|
|
|
|
"name",
|
|
|
|
|
"first name",
|
|
|
|
|
"fullname",
|
|
|
|
|
"nickname",
|
|
|
|
|
"age",
|
|
|
|
|
"inserted_date",
|
2024-11-06 11:17:13 +01:00
|
|
|
"postal_code",
|
|
|
|
|
"lat",
|
|
|
|
|
"lon",
|
2025-07-25 15:17:38 +02:00
|
|
|
"is_active",
|
2023-02-22 09:42:34 +01:00
|
|
|
],
|
2023-01-31 15:57:51 +01:00
|
|
|
)
|
|
|
|
|
|
2023-04-11 20:58:31 +05:30
|
|
|
|
2023-01-31 15:57:51 +01:00
|
|
|
# pylint: disable=line-too-long
|
|
|
|
|
@pytest.mark.parametrize(
|
2025-10-27 18:05:51 +01:00
|
|
|
"test_case_name,test_case_type,test_type,expected,expected_dimension",
|
2023-01-31 15:57:51 +01:00
|
|
|
[
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_length_to_be_between",
|
|
|
|
|
"columnValueLengthsToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"2",
|
2023-12-27 13:38:51 +01:00
|
|
|
"14",
|
|
|
|
|
TestCaseStatus.Failed,
|
2025-10-30 14:07:45 +01:00
|
|
|
14000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
2000.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
87.5,
|
|
|
|
|
12.5,
|
2023-12-27 13:38:51 +01:00
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_length_to_be_between_col_space",
|
|
|
|
|
"columnValueLengthsToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2025-10-30 14:07:45 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2",
|
|
|
|
|
"3",
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
16000.0,
|
|
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_length_to_be_between_no_min",
|
|
|
|
|
"columnValueLengthsToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
2025-10-30 14:07:45 +01:00
|
|
|
16000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_max_to_be_between",
|
|
|
|
|
"columnValueMaxToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"31.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_max_to_be_between_no_min",
|
|
|
|
|
"columnValueMaxToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(TestCaseResult, None, None, TestCaseStatus.Failed, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_mean_to_be_between",
|
|
|
|
|
"columnValueMeanToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_mean_to_be_between_no_max",
|
|
|
|
|
"columnValueMeanToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_median_to_be_between",
|
|
|
|
|
"columnValueMedianToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_min_to_be_between",
|
|
|
|
|
"columnValueMinToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_min_to_be_between_no_min",
|
|
|
|
|
"columnValueMinToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_stddev_to_be_between",
|
|
|
|
|
"columnValueStdDevToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-11-10 12:13:27 +01:00
|
|
|
"0.5",
|
2023-12-27 13:38:51 +01:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_stddev_to_be_between_no_min",
|
|
|
|
|
"columnValueStdDevToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_in_set",
|
|
|
|
|
"columnValuesToBeInSet",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
4000.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
12000.0,
|
|
|
|
|
25,
|
|
|
|
|
75,
|
2023-12-27 13:38:51 +01:00
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_missing_count_to_be_equal",
|
|
|
|
|
"columnValuesMissingCount",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
2023-02-22 09:42:34 +01:00
|
|
|
"test_case_column_values_missing_count_to_be_equal_missing_values",
|
2023-01-31 15:57:51 +01:00
|
|
|
"columnValuesMissingCount",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_not_in_set",
|
|
|
|
|
"columnValuesToBeNotInSet",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
2025-10-30 14:07:45 +01:00
|
|
|
12000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
4000.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
75.0,
|
|
|
|
|
25.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_sum_to_be_between",
|
|
|
|
|
"columnValuesSumToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"366000.0",
|
2023-12-27 13:38:51 +01:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_between",
|
|
|
|
|
"columnValuesToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
2025-10-30 14:07:45 +01:00
|
|
|
16000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_not_null",
|
|
|
|
|
"columnValuesToBeNotNull",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
2025-10-30 14:07:45 +01:00
|
|
|
14000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
2000.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
87.5,
|
|
|
|
|
12.5,
|
2023-12-27 13:38:51 +01:00
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_unique",
|
|
|
|
|
"columnValuesToBeUnique",
|
2023-02-22 09:42:34 +01:00
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"14000",
|
2023-12-27 13:38:51 +01:00
|
|
|
"0",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
0.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
14000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
2023-02-22 09:42:34 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_match_regex",
|
|
|
|
|
"columnValuesToMatchRegex",
|
|
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"6000",
|
|
|
|
|
None,
|
2025-10-30 14:07:45 +01:00
|
|
|
TestCaseStatus.Failed,
|
2023-12-27 13:38:51 +01:00
|
|
|
6000.0,
|
|
|
|
|
0.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
37.5,
|
|
|
|
|
62.5,
|
2023-12-27 13:38:51 +01:00
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-02-22 09:42:34 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_not_match_regex",
|
|
|
|
|
"columnValuesToNotMatchRegex",
|
|
|
|
|
"COLUMN",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
2025-10-30 14:07:45 +01:00
|
|
|
16000.0,
|
2023-12-27 13:38:51 +01:00
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-02-22 09:42:34 +01:00
|
|
|
),
|
2023-01-31 15:57:51 +01:00
|
|
|
(
|
|
|
|
|
"test_case_table_column_count_to_be_between",
|
|
|
|
|
"tableColumnCountToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2024-11-06 11:17:13 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-07-25 15:17:38 +02:00
|
|
|
"11",
|
2024-11-06 11:17:13 +01:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_table_column_count_to_equal",
|
|
|
|
|
"tableColumnCountToEqual",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2025-07-25 15:17:38 +02:00
|
|
|
(TestCaseResult, "11", None, TestCaseStatus.Failed, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_table_column_name_to_exist",
|
|
|
|
|
"tableColumnNameToExist",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(TestCaseResult, "1", None, TestCaseStatus.Success, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_to_match_set",
|
|
|
|
|
"tableColumnToMatchSet",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(TestCaseResult, "0", None, TestCaseStatus.Failed, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_to_match_set_ordered",
|
|
|
|
|
"tableColumnToMatchSet",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(TestCaseResult, None, None, TestCaseStatus.Failed, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
2023-02-22 09:42:34 +01:00
|
|
|
(
|
|
|
|
|
"test_case_table_custom_sql_query_failed_dl",
|
|
|
|
|
"tableCustomSQLQuery",
|
|
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(TestCaseResult, None, None, TestCaseStatus.Failed, None, None, None, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-02-22 09:42:34 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_table_custom_sql_query_success_dl",
|
|
|
|
|
"tableCustomSQLQuery",
|
|
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-02-22 09:42:34 +01:00
|
|
|
),
|
2023-01-31 15:57:51 +01:00
|
|
|
(
|
|
|
|
|
"test_case_table_row_count_to_be_between",
|
|
|
|
|
"tableRowCountToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"16000",
|
2023-12-27 13:38:51 +01:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_table_row_count_to_be_equal",
|
|
|
|
|
"tableRowCountToEqual",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"16000",
|
2023-12-27 13:38:51 +01:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_table_row_inserted_count_to_be_between",
|
|
|
|
|
"tableRowInsertedCountToBeBetween",
|
2023-02-22 09:42:34 +01:00
|
|
|
"TABLE",
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2023-01-31 15:57:51 +01:00
|
|
|
),
|
2024-11-06 11:17:13 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_at_expected_location",
|
|
|
|
|
"columnValuesToBeAtExpectedLocation",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"16000",
|
2024-11-06 11:17:13 +01:00
|
|
|
"0",
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2024-11-06 11:17:13 +01:00
|
|
|
),
|
2025-07-25 15:17:38 +02:00
|
|
|
(
|
|
|
|
|
"test_case_column_value_in_set_boolean",
|
|
|
|
|
"columnValuesToBeInSet",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
2025-10-30 14:07:45 +01:00
|
|
|
"14000",
|
2025-07-25 15:17:38 +02:00
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
2025-10-30 14:07:45 +01:00
|
|
|
14000.0,
|
2025-07-25 15:17:38 +02:00
|
|
|
0.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
87.5,
|
2025-07-25 15:17:38 +02:00
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
2025-07-25 15:17:38 +02:00
|
|
|
),
|
2025-08-19 06:40:49 +02:00
|
|
|
(
|
|
|
|
|
"test_case_table_custom_sql_query_success_dl_with_partition_expression",
|
|
|
|
|
"tableCustomSQLQuery",
|
|
|
|
|
"TABLE",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
2000,
|
|
|
|
|
0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_in_set_dimensional_match_enum",
|
|
|
|
|
"columnValuesToBeInSet",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
4000.0,
|
|
|
|
|
0.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
25.0,
|
2025-10-27 18:05:51 +01:00
|
|
|
0.0,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-10-30 14:07:45 +01:00
|
|
|
(
|
|
|
|
|
"fullname=Alice Smith",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
0,
|
|
|
|
|
2000,
|
|
|
|
|
0,
|
|
|
|
|
100,
|
|
|
|
|
0.6667,
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"fullname=Bob Johnson",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
0,
|
|
|
|
|
2000,
|
|
|
|
|
0,
|
|
|
|
|
100,
|
|
|
|
|
0.6667,
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"fullname=Charlie Brown",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
0,
|
|
|
|
|
2000,
|
|
|
|
|
0,
|
|
|
|
|
100,
|
|
|
|
|
0.6667,
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"fullname=Diana Prince",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
0,
|
|
|
|
|
2000,
|
|
|
|
|
0,
|
|
|
|
|
100,
|
|
|
|
|
0.6667,
|
|
|
|
|
),
|
|
|
|
|
("fullname=Eve Wilson", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
(
|
|
|
|
|
"fullname=Others",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
4000,
|
|
|
|
|
2000,
|
|
|
|
|
66.67,
|
|
|
|
|
33.33,
|
|
|
|
|
0.0741,
|
|
|
|
|
),
|
2025-10-27 18:05:51 +01:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_in_set_dimensional_no_match_enum",
|
|
|
|
|
"columnValuesToBeInSet",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
4000.0,
|
|
|
|
|
0.0,
|
2025-10-30 14:07:45 +01:00
|
|
|
25.00,
|
2025-10-27 18:05:51 +01:00
|
|
|
0.0,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-10-30 14:07:45 +01:00
|
|
|
("fullname=Alice Smith", TestCaseStatus.Failed, 0, 0, 0, 0, None),
|
|
|
|
|
("fullname=Bob Johnson", TestCaseStatus.Failed, 0, 0, 0, 0, None),
|
|
|
|
|
("fullname=Charlie Brown", TestCaseStatus.Failed, 0, 0, 0, 0, None),
|
|
|
|
|
("fullname=Diana Prince", TestCaseStatus.Failed, 0, 0, 0, 0, None),
|
|
|
|
|
("fullname=Eve Wilson", TestCaseStatus.Failed, 0, 0, 0, 0, None),
|
|
|
|
|
("fullname=Others", TestCaseStatus.Success, 4000, 0, 100, 0, None),
|
2025-10-27 18:05:51 +01:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_unique_dimensional",
|
|
|
|
|
"columnValuesToBeUnique",
|
|
|
|
|
"COLUMN",
|
2025-10-30 14:07:45 +01:00
|
|
|
(TestCaseResult, "16000", "0", TestCaseStatus.Failed, 0, 16000, 0.0, 100.0),
|
2025-10-27 18:05:51 +01:00
|
|
|
[
|
2025-10-30 14:07:45 +01:00
|
|
|
("name=Alice", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Eve", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Failed, 0, 6000, 0, 100, 0.6667),
|
2025-10-27 18:05:51 +01:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_mean_to_be_between_dimensional",
|
|
|
|
|
"columnValueMeanToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-10-30 14:07:45 +01:00
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-10-27 18:05:51 +01:00
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-10-30 14:07:45 +01:00
|
|
|
("name=Others", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-10-27 18:05:51 +01:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_mean_to_be_between_dimensional_without_max",
|
|
|
|
|
"columnValueMeanToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-10-30 14:07:45 +01:00
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=John", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Success, None, None, None, None, 0.0),
|
|
|
|
|
("name=Diana", TestCaseStatus.Success, None, None, None, None, 0.0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0.0),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_max_to_be_between_dimensional",
|
|
|
|
|
"columnValueMaxToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"31.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
2025-11-03 10:17:52 +01:00
|
|
|
"test_case_column_value_max_to_be_between_dimensional_without_max",
|
2025-10-30 14:07:45 +01:00
|
|
|
"columnValueMaxToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"31.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-10-27 18:05:51 +01:00
|
|
|
("name=John", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-10-30 14:07:45 +01:00
|
|
|
("name=Bob", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Diana", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0),
|
2025-10-27 18:05:51 +01:00
|
|
|
],
|
2025-08-19 06:40:49 +02:00
|
|
|
),
|
2025-11-03 10:17:52 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_value_min_to_be_between_dimensional",
|
|
|
|
|
"columnValueMinToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_min_to_be_between_dimensional_without_min",
|
|
|
|
|
"columnValueMinToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-04 10:26:39 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_value_length_to_be_between_dimensional",
|
|
|
|
|
"columnValueLengthsToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2",
|
|
|
|
|
"14",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
14000,
|
|
|
|
|
2000,
|
|
|
|
|
87.5,
|
|
|
|
|
12.5,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-11-17 15:19:41 +01:00
|
|
|
("name=John", TestCaseStatus.Failed, 2000, 2000, 50, 50, 0.1667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Bob", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Diana", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, 4000, 0, 100, 0, 0),
|
2025-11-04 10:26:39 +01:00
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_value_length_to_be_between_dimensional_without_min",
|
|
|
|
|
"columnValueLengthsToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2",
|
|
|
|
|
"3",
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
16000,
|
|
|
|
|
0,
|
|
|
|
|
100,
|
|
|
|
|
0,
|
|
|
|
|
),
|
|
|
|
|
[
|
2025-11-17 15:19:41 +01:00
|
|
|
("name=Alice", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Bob", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Diana", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Eve", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, 6000, 0, 100, 0, 0),
|
2025-11-04 10:26:39 +01:00
|
|
|
],
|
|
|
|
|
),
|
2025-11-05 12:42:58 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_value_median_to_be_between_dimensional",
|
|
|
|
|
"columnValueMedianToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-11-05 16:37:42 +01:00
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_sum_to_be_between_dimensional",
|
|
|
|
|
"columnValuesSumToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"366000.0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
2025-11-05 12:42:58 +01:00
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-06 12:12:14 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_not_in_set_dimensional",
|
|
|
|
|
"columnValuesToBeNotInSet",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
12000.0,
|
|
|
|
|
4000.0,
|
|
|
|
|
75.0,
|
|
|
|
|
25.0,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("age=NULL", TestCaseStatus.Failed, 2000, 2000, 50, 50, 0.1667),
|
|
|
|
|
("age=30.0", TestCaseStatus.Failed, 4000, 2000, 66.67, 33.33, 0.0741),
|
|
|
|
|
("age=31.0", TestCaseStatus.Success, 6000, 0, 100, 0, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-06 16:32:31 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_match_regex_dimensional",
|
|
|
|
|
"columnValuesToMatchRegex",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"6000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
6000.0,
|
|
|
|
|
0.0,
|
|
|
|
|
37.5,
|
|
|
|
|
62.5,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("age=30.0", TestCaseStatus.Failed, 2000, 4000, 33.33, 66.67, 0.2963),
|
|
|
|
|
("age=31.0", TestCaseStatus.Failed, 2000, 4000, 33.33, 66.67, 0.2963),
|
|
|
|
|
("age=NULL", TestCaseStatus.Failed, 2000, 2000, 50, 50, 0.1667),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_not_match_regex_dimensional",
|
|
|
|
|
"columnValuesToNotMatchRegex",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"0",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
16000.0,
|
|
|
|
|
0.0,
|
|
|
|
|
100.0,
|
|
|
|
|
0.0,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("age=NULL", TestCaseStatus.Success, 4000, 0, 100, 0, 0),
|
|
|
|
|
("age=30.0", TestCaseStatus.Success, 6000, 0, 100, 0, 0),
|
|
|
|
|
("age=31.0", TestCaseStatus.Success, 6000, 0, 100, 0, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-07 14:44:58 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_not_null_dimensional",
|
|
|
|
|
"columnValuesToBeNotNull",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
12000.0,
|
|
|
|
|
4000.0,
|
|
|
|
|
75.0,
|
|
|
|
|
25.0,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Eve", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=John", TestCaseStatus.Failed, 2000, 2000, 50, 50, 0.1667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Bob", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, 4000, 0, 100, 0, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_missing_count_to_be_equal_dimensional",
|
|
|
|
|
"columnValuesMissingCount",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"2000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Eve", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, None, None, None, None, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"test_case_column_values_missing_count_to_be_equal_missing_values_dimensional",
|
|
|
|
|
"columnValuesMissingCount",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"4000",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Eve", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Failed, None, None, None, None, 0.0741),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-10 08:03:07 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_between_dimensional",
|
|
|
|
|
"columnValuesToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"30.0",
|
|
|
|
|
"31.0",
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
10000,
|
|
|
|
|
6000,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, 0, 2000, 0, 100, 0.6667),
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, 4000, 0, 100, 0, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-10 12:13:27 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_value_stddev_to_be_between_dimensional",
|
|
|
|
|
"columnValueStdDevToBeBetween",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"0.5",
|
|
|
|
|
None,
|
|
|
|
|
TestCaseStatus.Failed,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Bob", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Diana", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Jane", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
("name=Others", TestCaseStatus.Failed, None, None, None, None, 0.6667),
|
|
|
|
|
],
|
|
|
|
|
),
|
2025-11-10 15:00:06 +01:00
|
|
|
(
|
|
|
|
|
"test_case_column_values_to_be_at_expected_location_dimensional",
|
|
|
|
|
"columnValuesToBeAtExpectedLocation",
|
|
|
|
|
"COLUMN",
|
|
|
|
|
(
|
|
|
|
|
TestCaseResult,
|
|
|
|
|
"16000",
|
|
|
|
|
"0",
|
|
|
|
|
TestCaseStatus.Success,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
[
|
|
|
|
|
("name=Alice", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Bob", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Charlie", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Diana", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Eve", TestCaseStatus.Success, 2000, 0, 100, 0, 0),
|
|
|
|
|
("name=Others", TestCaseStatus.Success, 6000, 0, 100, 0, 0),
|
|
|
|
|
],
|
|
|
|
|
),
|
2023-01-31 15:57:51 +01:00
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
def test_suite_validation_datalake(
|
|
|
|
|
test_case_name,
|
|
|
|
|
test_case_type,
|
2023-02-22 09:42:34 +01:00
|
|
|
test_type,
|
2023-01-31 15:57:51 +01:00
|
|
|
expected,
|
2025-10-27 18:05:51 +01:00
|
|
|
expected_dimension,
|
2023-01-31 15:57:51 +01:00
|
|
|
request,
|
|
|
|
|
):
|
|
|
|
|
"""Generic test runner for test validations"""
|
2023-04-11 20:58:31 +05:30
|
|
|
|
2023-01-31 15:57:51 +01:00
|
|
|
test_case = request.getfixturevalue(test_case_name)
|
2023-12-27 13:38:51 +01:00
|
|
|
(
|
|
|
|
|
type_,
|
|
|
|
|
val_1,
|
|
|
|
|
val_2,
|
|
|
|
|
status,
|
|
|
|
|
passed_rows,
|
|
|
|
|
failed_rows,
|
|
|
|
|
passed_percentage,
|
|
|
|
|
failed_percentage,
|
|
|
|
|
) = expected
|
2023-01-31 15:57:51 +01:00
|
|
|
|
2025-08-19 06:40:49 +02:00
|
|
|
if test_case_type in TEST_CASE_SUPPORT_ROW_LEVEL_PASS_FAILED:
|
|
|
|
|
test_case.computePassedFailedRowCount = True
|
|
|
|
|
|
2023-02-22 09:42:34 +01:00
|
|
|
test_handler_obj = import_test_case_class(
|
|
|
|
|
test_type,
|
|
|
|
|
"pandas",
|
|
|
|
|
test_case_type,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
test_handler = test_handler_obj(
|
2023-04-12 07:46:29 +02:00
|
|
|
[DATALAKE_DATA_FRAME(1_000), DATALAKE_DATA_FRAME(1_000)],
|
2023-01-31 15:57:51 +01:00
|
|
|
test_case=test_case,
|
|
|
|
|
execution_date=EXECUTION_DATE.timestamp(),
|
|
|
|
|
)
|
|
|
|
|
|
2024-06-20 16:54:12 +02:00
|
|
|
res = test_handler.run_validation()
|
2023-02-22 09:42:34 +01:00
|
|
|
|
2023-01-31 15:57:51 +01:00
|
|
|
assert isinstance(res, type_)
|
|
|
|
|
if val_1:
|
|
|
|
|
assert res.testResultValue[0].value == val_1
|
|
|
|
|
if val_2:
|
|
|
|
|
assert res.testResultValue[1].value == val_2
|
2023-12-27 13:38:51 +01:00
|
|
|
if passed_rows:
|
|
|
|
|
assert res.passedRows == passed_rows
|
|
|
|
|
if failed_rows:
|
|
|
|
|
assert res.failedRows == failed_rows
|
|
|
|
|
if passed_percentage:
|
|
|
|
|
assert round(res.passedRowsPercentage, 2) == passed_percentage
|
|
|
|
|
if failed_percentage:
|
|
|
|
|
assert round(res.failedRowsPercentage, 2) == failed_percentage
|
2023-06-06 12:09:16 +02:00
|
|
|
assert res.testCaseStatus == status
|
2025-08-19 06:40:49 +02:00
|
|
|
if test_case_type in TEST_CASE_SUPPORT_ROW_LEVEL_PASS_FAILED:
|
|
|
|
|
assert res.failedRows is not None
|
|
|
|
|
assert res.failedRowsPercentage is not None
|
|
|
|
|
assert res.passedRows is not None
|
|
|
|
|
assert res.passedRowsPercentage is not None
|
2025-10-27 18:05:51 +01:00
|
|
|
|
|
|
|
|
if expected_dimension:
|
|
|
|
|
assert res.dimensionResults is not None
|
|
|
|
|
assert len(res.dimensionResults) == len(expected_dimension)
|
|
|
|
|
for expected_dim in expected_dimension:
|
|
|
|
|
dim = next(
|
|
|
|
|
(
|
|
|
|
|
dim
|
|
|
|
|
for dim in res.dimensionResults
|
|
|
|
|
if dim.dimensionKey == expected_dim[0]
|
|
|
|
|
),
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
assert dim is not None
|
|
|
|
|
assert dim.testCaseStatus == expected_dim[1]
|
|
|
|
|
assert dim.passedRows == expected_dim[2]
|
|
|
|
|
assert dim.failedRows == expected_dim[3]
|
|
|
|
|
|
|
|
|
|
if expected_dim[4]:
|
|
|
|
|
assert round(dim.passedRowsPercentage, 2) == expected_dim[4]
|
|
|
|
|
else:
|
|
|
|
|
assert dim.passedRowsPercentage == expected_dim[4]
|
|
|
|
|
|
|
|
|
|
if expected_dim[5]:
|
|
|
|
|
assert round(dim.failedRowsPercentage, 2) == expected_dim[5]
|
|
|
|
|
else:
|
|
|
|
|
assert dim.failedRowsPercentage == expected_dim[5]
|
|
|
|
|
|
|
|
|
|
assert dim.impactScore == expected_dim[6]
|