Skip to content

Commit

Permalink
Feature is pk (#124)
Browse files Browse the repository at this point in the history
* Added is_legit test cases for the rest of the libraries

* Added pk tests
  • Loading branch information
canimus authored Oct 1, 2023
1 parent 506c65c commit 96d52bb
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 2 deletions.
12 changes: 12 additions & 0 deletions cuallee/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,11 +257,23 @@ def is_unique(self, column: str, pct: float = 1.0):
"""Validation for unique values in column"""
Rule("is_unique", column, "N/A", CheckDataType.AGNOSTIC, pct) >> self._rule
return self

def is_primary_key(self, column: str, pct: float = 1.0):
"""Validation for unique values in column"""
Rule("is_unique", column, "N/A", CheckDataType.AGNOSTIC, pct) >> self._rule
return self


def are_unique(self, column: Union[List[str], Tuple[str, str]], pct: float = 1.0):
"""Validation for unique values in a group of columns"""
Rule("are_unique", column, "N/A", CheckDataType.AGNOSTIC, pct) >> self._rule
return self

def is_composite_key(self, column: Union[List[str], Tuple[str, str]], pct: float = 1.0):
"""Validation for unique values in a group of columns"""
Rule("are_unique", column, "N/A", CheckDataType.AGNOSTIC, pct) >> self._rule
return self


def is_greater_than(self, column: str, value: float, pct: float = 1.0):
"""Validation for numeric greater than value"""
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "cuallee"
version = "0.5.4"
version = "0.5.5"
authors = [
{ name="Herminio Vazquez", email="[email protected]"},
{ name="Virginie Grosboillot", email="[email protected]" }
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[metadata]
name = cuallee
version = 0.5.4
version = 0.5.5
[options]
packages = find:
12 changes: 12 additions & 0 deletions test/unit/duckdb_dataframe/test_has_pattern.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,25 @@ def test_positive(check: Check, db: duckdb.DuckDBPyConnection):
check.table_name = "df"
assert check.validate(db).status.str.match("PASS").all()

def test_is_legit(check: Check, db: duckdb.DuckDBPyConnection):
check.is_legit("id")
df = pd.DataFrame({"id": ["Herminio", "Hola", "Heroe"]})
check.table_name = "df"
assert check.validate(db).status.str.match("PASS").all()


def test_negative(check: Check, db: duckdb.DuckDBPyConnection):
check.has_pattern("id", r"^H.*")
df = pd.DataFrame({"id": ["Herminio", "Hola", "Villain"]})
check.table_name = "df"
assert check.validate(db).status.str.match("FAIL").all()

def test_is_not_legit(check: Check, db: duckdb.DuckDBPyConnection):
check.is_legit("id")
df = pd.DataFrame({"id": ["Herminio", "Hola", ""]})
check.table_name = "df"
assert check.validate(db).status.str.match("FAIL").all()


@pytest.mark.parametrize(
"pattern", ["^H.*", "^H.*"], ids=("single_quote", "double_quote")
Expand Down
10 changes: 10 additions & 0 deletions test/unit/pandas_dataframe/test_has_pattern.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,22 @@ def test_positive(check: Check):
df = pd.DataFrame({"id": ["Herminio", "Hola", "Heroe"]})
assert check.validate(df).status.str.match("PASS").all()

def test_is_legit(check: Check):
check.is_legit("id")
df = pd.DataFrame({"id": ["Herminio", "Hola", "Heroe"]})
assert check.validate(df).status.str.match("PASS").all()


def test_negative(check: Check):
check.has_pattern("id", r"^H.*")
df = pd.DataFrame({"id": ["Herminio", "Hola", "Villain"]})
assert check.validate(df).status.str.match("FAIL").all()

def test_is_not_legit(check: Check):
check.is_legit("id")
df = pd.DataFrame({"id": ["Herminio", "Hola", ""]})
assert check.validate(df).status.str.match("FAIL").all()


@pytest.mark.parametrize(
"pattern", ["^H.*", "^H.*"], ids=("single_quote", "double_quote")
Expand Down
12 changes: 12 additions & 0 deletions test/unit/polars_dataframe/test_has_pattern.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,15 @@ def test_positive(check: Check):
check.has_pattern("id", r"^H.*")
result = check.validate(df).select(pl.col("status")) == "PASS"
assert all(result.to_series().to_list())

def test_is_legit(check: Check):
df = pl.DataFrame({"id": ["Herminio", "Herbert", "Harry"]})
check.is_legit("id")
result = check.validate(df).select(pl.col("status")) == "PASS"
assert all(result.to_series().to_list())

def test_is_not_legit(check: Check):
df = pl.DataFrame({"id": ["Herminio", "Herbert", ""]})
check.is_legit("id")
result = check.validate(df).select(pl.col("status")) == "FAIL"
assert all(result.to_series().to_list())
7 changes: 7 additions & 0 deletions test/unit/pyspark_dataframe/test_are_unique.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ def test_positive(spark):
rs = check.validate(df)
assert rs.first().status == "PASS"

def test_is_composite_key(spark):
df = spark.range(10).withColumn("id2", F.col("id") + 10)
check = Check(CheckLevel.WARNING, "pytest")
check.are_unique(("id", "id2"))
rs = check.validate(df)
assert rs.first().status == "PASS"


def test_negative(spark):
df = spark.createDataFrame(
Expand Down
8 changes: 8 additions & 0 deletions test/unit/pyspark_dataframe/test_is_unique.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ def test_positive(spark):
assert rs.first().violations == 0.0
assert rs.first().pass_rate == 1.0

def test_is_primary_key(spark):
df = spark.range(10)
check = Check(CheckLevel.WARNING, "pytest")
check.is_primary_key("id")
rs = check.validate(df)
assert rs.first().status == "PASS"
assert rs.first().violations == 0.0
assert rs.first().pass_rate == 1.0

def test_negative(spark):
df = spark.createDataFrame([[0], [2], [2], [3]], ["id"])
Expand Down

0 comments on commit 96d52bb

Please sign in to comment.