mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-11-04 04:29:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			749 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			749 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#  Copyright 2025 Collate
 | 
						|
#  Licensed under the Collate Community License, Version 1.0 (the "License");
 | 
						|
#  you may not use this file except in compliance with the License.
 | 
						|
#  You may obtain a copy of the License at
 | 
						|
#  https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE
 | 
						|
#  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.
 | 
						|
 | 
						|
"""
 | 
						|
shared test cases
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
from datetime import datetime, timedelta
 | 
						|
from unittest.mock import patch
 | 
						|
from uuid import uuid4
 | 
						|
 | 
						|
import pytest
 | 
						|
import sqlalchemy as sqa
 | 
						|
from sqlalchemy.orm import declarative_base
 | 
						|
 | 
						|
from metadata.data_quality.builders.validator_builder import ValidatorBuilder
 | 
						|
from metadata.data_quality.interface.sqlalchemy.sqa_test_suite_interface import (
 | 
						|
    SQATestSuiteInterface,
 | 
						|
)
 | 
						|
from metadata.generated.schema.entity.data.table import Column, DataType, Table
 | 
						|
from metadata.generated.schema.entity.services.connections.database.sqliteConnection import (
 | 
						|
    SQLiteConnection,
 | 
						|
    SQLiteScheme,
 | 
						|
)
 | 
						|
from metadata.generated.schema.tests.testCase import TestCase, TestCaseParameterValue
 | 
						|
from metadata.generated.schema.type.entityReference import EntityReference
 | 
						|
from metadata.sampler.sqlalchemy.sampler import SQASampler
 | 
						|
 | 
						|
Base = declarative_base()
 | 
						|
 | 
						|
TEST_CASE_NAME = "my_test_case"
 | 
						|
ENTITY_LINK_NICKNAME = "<#E::table::service.db.users::columns::nickname>"
 | 
						|
ENTITY_LINK_FNAME = "<#E::table::service.db.users::columns::first name>"
 | 
						|
ENTITY_LINK_AGE = "<#E::table::service.db.users::columns::age>"
 | 
						|
ENTITY_LINK_NAME = "<#E::table::service.db.users::columns::name>"
 | 
						|
ENTITY_LINK_USER = "<#E::table::service.db.users>"
 | 
						|
ENTITY_LINK_INSERTED_DATE = "<#E::table::service.db.users::columns::inserted_date>"
 | 
						|
ENTITY_LINK_EXPECTED_LOCATION = "<#E::table::service.db.users::columns::postal_code>"
 | 
						|
 | 
						|
TABLE = Table(
 | 
						|
    id=uuid4(),
 | 
						|
    name="users",
 | 
						|
    fullyQualifiedName="service.db.users",
 | 
						|
    columns=[
 | 
						|
        Column(name="id", dataType=DataType.INT),  # type: ignore
 | 
						|
        Column(name="name", dataType=DataType.STRING),  # type: ignore
 | 
						|
        Column(name="first name", dataType=DataType.STRING),  # type: ignore
 | 
						|
        Column(name="fullname", dataType=DataType.STRING),  # type: ignore
 | 
						|
        Column(name="nickname", dataType=DataType.STRING),  # type: ignore
 | 
						|
        Column(name="age", dataType=DataType.INT),  # type: ignore
 | 
						|
        Column(name="inserted_date", dataType=DataType.DATE),  # type: ignore
 | 
						|
        Column(name="postal_code", dataType=DataType.INT),  # type: ignore
 | 
						|
        Column(name="lat", dataType=DataType.DECIMAL),  # type: ignore
 | 
						|
        Column(name="lon", dataType=DataType.DECIMAL),  # type: ignore
 | 
						|
    ],
 | 
						|
    database=EntityReference(id=uuid4(), name="db", type="database"),  # type: ignore
 | 
						|
)  # type: ignore
 | 
						|
 | 
						|
 | 
						|
class User(Base):
 | 
						|
    __tablename__ = "users"
 | 
						|
    id = sqa.Column(sqa.Integer, primary_key=True)
 | 
						|
    name = sqa.Column(sqa.String(256))
 | 
						|
    first_name = sqa.Column("first name", sqa.String(256))
 | 
						|
    fullname = sqa.Column(sqa.String(256))
 | 
						|
    nickname = sqa.Column(sqa.String(256))
 | 
						|
    age = sqa.Column(sqa.Integer)
 | 
						|
    inserted_date = sqa.Column(sqa.DATE)
 | 
						|
    postal_code = sqa.Column(sqa.INT)
 | 
						|
    lat = sqa.Column(sqa.DECIMAL)
 | 
						|
    lon = sqa.Column(sqa.DECIMAL)
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def create_sqlite_table():
 | 
						|
    """create and delete sqlite table"""
 | 
						|
    db_path = os.path.join(
 | 
						|
        os.path.dirname(__file__), f"{os.path.splitext(__file__)[0]}.db"
 | 
						|
    )
 | 
						|
    sqlite_conn = SQLiteConnection(
 | 
						|
        scheme=SQLiteScheme.sqlite_pysqlite,
 | 
						|
        databaseMode=db_path + "?check_same_thread=False",
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
    with patch.object(SQASampler, "build_table_orm", return_value=User):
 | 
						|
        sampler = SQASampler(
 | 
						|
            service_connection_config=sqlite_conn,
 | 
						|
            ometa_client=None,
 | 
						|
            entity=TABLE,
 | 
						|
        )
 | 
						|
    sqa_profiler_interface = SQATestSuiteInterface(
 | 
						|
        sqlite_conn,
 | 
						|
        None,
 | 
						|
        sampler,
 | 
						|
        TABLE,
 | 
						|
        validator_builder=ValidatorBuilder,
 | 
						|
    )
 | 
						|
 | 
						|
    runner = sqa_profiler_interface.runner
 | 
						|
    engine = sqa_profiler_interface.session.get_bind()
 | 
						|
    session = sqa_profiler_interface.session
 | 
						|
 | 
						|
    User.__table__.create(bind=engine)
 | 
						|
    for i in range(10):
 | 
						|
        data = [
 | 
						|
            User(
 | 
						|
                name="John",
 | 
						|
                first_name="Jo",
 | 
						|
                fullname="John Doe",
 | 
						|
                nickname="",
 | 
						|
                age=30,
 | 
						|
                inserted_date=datetime.today() - timedelta(days=i),
 | 
						|
                postal_code=60001,
 | 
						|
                lat=49.6852237,
 | 
						|
                lon=1.7743058,
 | 
						|
            ),
 | 
						|
            User(
 | 
						|
                name="Jane",
 | 
						|
                first_name="Ja",
 | 
						|
                fullname="Jone Doe",
 | 
						|
                nickname="Johnny d",
 | 
						|
                age=31,
 | 
						|
                inserted_date=datetime.today() - timedelta(days=i),
 | 
						|
                postal_code=19005,
 | 
						|
                lat=45.2589385,
 | 
						|
                lon=1.4731471,
 | 
						|
            ),
 | 
						|
            User(
 | 
						|
                name="John",
 | 
						|
                first_name="Joh",
 | 
						|
                fullname="John Doe",
 | 
						|
                nickname=None,
 | 
						|
                age=None,
 | 
						|
                inserted_date=datetime.today() - timedelta(days=i),
 | 
						|
                postal_code=11008,
 | 
						|
                lat=42.9974445,
 | 
						|
                lon=2.2518325,
 | 
						|
            ),
 | 
						|
        ]
 | 
						|
        session.add_all(data)
 | 
						|
        session.commit()
 | 
						|
 | 
						|
    yield runner
 | 
						|
    # clean up
 | 
						|
    User.__table__.drop(bind=engine)
 | 
						|
    os.remove(db_path)
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_length_to_be_between():
 | 
						|
    """Test case for test column_value_length_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NICKNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minLength", value="1"),
 | 
						|
            TestCaseParameterValue(name="maxLength", value="10"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_length_to_be_between_col_space():
 | 
						|
    """Test case for test column_value_length_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_FNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minLength", value="1"),
 | 
						|
            TestCaseParameterValue(name="maxLength", value="10"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_length_to_be_between_no_min():
 | 
						|
    """Test case for test column_value_length_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_FNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="maxLength", value="10"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_max_to_be_between():
 | 
						|
    """Test case for test column_value_max_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForMaxInCol", value="1"),
 | 
						|
            TestCaseParameterValue(name="maxValueForMaxInCol", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_max_to_be_between_no_min():
 | 
						|
    """Test case for test column_value_max_to_be_between_no_min"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="maxValueForMaxInCol", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_mean_to_be_between():
 | 
						|
    """Test case for test column_value_mean_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForMeanInCol", value="1"),
 | 
						|
            TestCaseParameterValue(name="maxValueForMeanInCol", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_mean_to_be_between_no_max():
 | 
						|
    """Test case for test column_value_mean_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForMeanInCol", value="1"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_median_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForMedianInCol", value="1"),
 | 
						|
            TestCaseParameterValue(name="maxValueForMedianInCol", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_min_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForMinInCol", value="25"),
 | 
						|
            TestCaseParameterValue(name="maxValueForMinInCol", value="40"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_min_to_be_between_no_min():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="maxValueForMinInCol", value="40"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_stddev_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForStdDevInCol", value="20"),
 | 
						|
            TestCaseParameterValue(name="maxValueForStdDevInCol", value="40"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_stddev_to_be_between_no_min():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="maxValueForStdDevInCol", value="40"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_value_in_set():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="allowedValues", value="['John']"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_missing_count_to_be_equal():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NICKNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="missingCountValue", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_missing_count_to_be_equal_missing_values():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NICKNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="missingCountValue", value="10"),
 | 
						|
            TestCaseParameterValue(name="missingValueMatch", value="['Johnny d']"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_not_in_set():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="forbiddenValues", value="['John']"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_sum_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValueForColSum", value="10"),
 | 
						|
            TestCaseParameterValue(name="maxValueForColSum", value="100"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_AGE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValue", value="29"),
 | 
						|
            TestCaseParameterValue(name="maxValue", value="33"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_not_null():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NICKNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_unique():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NICKNAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_match_regex():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="regex", value="J.*"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_not_match_regex():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="forbiddenRegex", value="X%"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_column_count_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minColValue", value="2"),
 | 
						|
            TestCaseParameterValue(name="maxColValue", value="11"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_column_count_to_equal():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[TestCaseParameterValue(name="columnCount", value="8")],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_column_name_to_exist():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[TestCaseParameterValue(name="columnName", value="id")],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_to_match_set():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="columnNames", value="id,name,nickname")
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_to_match_set_ordered():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="columnNames", value="id,name,nickname,fullname,age"
 | 
						|
            ),
 | 
						|
            TestCaseParameterValue(name="ordered", value="True"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_query():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_NAME,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="sqlExpression", value="SELECT * FROM users WHERE age > 20"
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_query_success():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="sqlExpression", value="SELECT * FROM users WHERE age < 0"
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_query_with_threshold_success():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="sqlExpression", value="SELECT COUNT(*) FROM users WHERE age > 30"
 | 
						|
            ),
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="strategy",
 | 
						|
                value="COUNT",
 | 
						|
            ),
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="threshold",
 | 
						|
                value="20",
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_unsafe_query_aborted():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="sqlExpression",
 | 
						|
                value="DELETE FROM airflow_task_instance WHERE dag_id = 'test_dag_id'",
 | 
						|
            ),
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="strategy",
 | 
						|
                value="COUNT",
 | 
						|
            ),
 | 
						|
            TestCaseParameterValue(
 | 
						|
                name="threshold",
 | 
						|
                value="20",
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_row_count_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValue", value="10"),
 | 
						|
            TestCaseParameterValue(name="maxValue", value="35"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_row_count_to_be_equal():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="value", value="10"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_row_inserted_count_to_be_between():
 | 
						|
    """Test case for test column_value_median_to_be_between"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="min", value="3"),
 | 
						|
            TestCaseParameterValue(name="columnName", value="inserted_date"),
 | 
						|
            TestCaseParameterValue(name="rangeType", value="DAY"),
 | 
						|
            TestCaseParameterValue(name="rangeInterval", value="1"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_query_failed_dl():
 | 
						|
    """Test case for test custom SQL table test"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="sqlExpression", value="age > 30"),
 | 
						|
        ],
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_table_custom_sql_query_success_dl():
 | 
						|
    """Test case for test custom SQL table test"""
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_USER,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="sqlExpression", value="age < 0"),
 | 
						|
        ],
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_between_date():
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_INSERTED_DATE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValue", value="1625127852000"),
 | 
						|
            TestCaseParameterValue(name="maxValue", value="1625127852000"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_between_datetime():
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_INSERTED_DATE,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="minValue", value="1625127852000"),
 | 
						|
            TestCaseParameterValue(name="maxValue", value="1625171052000"),
 | 
						|
        ],
 | 
						|
    )  # type: ignore
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def test_case_column_values_to_be_at_expected_location():
 | 
						|
    return TestCase(
 | 
						|
        name=TEST_CASE_NAME,
 | 
						|
        entityLink=ENTITY_LINK_EXPECTED_LOCATION,
 | 
						|
        testSuite=EntityReference(id=uuid4(), type="TestSuite"),  # type: ignore
 | 
						|
        testDefinition=EntityReference(id=uuid4(), type="TestDefinition"),  # type: ignore
 | 
						|
        parameterValues=[
 | 
						|
            TestCaseParameterValue(name="locationReferenceType", value="POSTAL_CODE"),
 | 
						|
            TestCaseParameterValue(name="longitudeColumnName", value="lon"),
 | 
						|
            TestCaseParameterValue(name="latitudeColumnName", value="lat"),
 | 
						|
            TestCaseParameterValue(name="radius", value="1000"),
 | 
						|
        ],
 | 
						|
        computePassedFailedRowCount=True,
 | 
						|
    )  # type: ignore
 |