SS 2025
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
"""
|
||||
Unit tests for the `checks` module, which validate various input verification functions.
|
||||
"""
|
||||
import sys
|
||||
import pandas as pd
|
||||
import geopandas as gpd
|
||||
from shapely.geometry import Point
|
||||
import pytest
|
||||
import checks
|
||||
|
||||
|
||||
def test_check_empty():
|
||||
"""
|
||||
Test that check_empty raises ValueError for empty or None inputs, and
|
||||
passes for valid inputs.
|
||||
"""
|
||||
checks.check_empty("hello")
|
||||
checks.check_empty([1, 2, 3])
|
||||
|
||||
try:
|
||||
checks.check_empty("")
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for empty string"
|
||||
|
||||
try:
|
||||
checks.check_empty([])
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for empty list"
|
||||
|
||||
try:
|
||||
checks.check_empty(None)
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for None"
|
||||
|
||||
|
||||
def test_check_path(local_tmp_path):
|
||||
"""
|
||||
Test that check_path passes for existing files and raises FileNotFoundError
|
||||
for missing files.
|
||||
"""
|
||||
tmp_file = local_tmp_path / "file.txt"
|
||||
tmp_file.write_text("test")
|
||||
checks.check_path(str(tmp_file))
|
||||
|
||||
with pytest.raises(FileNotFoundError):
|
||||
checks.check_path(str(local_tmp_path / "nonexistent.txt"))
|
||||
|
||||
|
||||
def test_check_dir(local_tmp_path):
|
||||
"""Test that check_dir verifies if the directory part of a path exists."""
|
||||
some_file = local_tmp_path / "some_file.txt"
|
||||
checks.check_dir(str(some_file))
|
||||
|
||||
with pytest.raises(FileNotFoundError):
|
||||
checks.check_dir("/non/existing/parent_dir/file.txt")
|
||||
|
||||
|
||||
def test_check_args():
|
||||
"""Test that check_args validates the number of command-line arguments."""
|
||||
original_argv = sys.argv
|
||||
sys.argv = ['prog', 'arg1', 'arg2']
|
||||
|
||||
checks.check_args(3, "Wrong args count")
|
||||
|
||||
try:
|
||||
checks.check_args(2, "Wrong args count")
|
||||
except RuntimeError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected RuntimeError for wrong arg count"
|
||||
|
||||
sys.argv = original_argv
|
||||
|
||||
|
||||
def test_check_crs():
|
||||
"""
|
||||
Test that check_crs passes for matching CRS values and raises ValueError
|
||||
on mismatch.
|
||||
"""
|
||||
checks.check_crs("EPSG:4326", "EPSG:4326")
|
||||
|
||||
try:
|
||||
checks.check_crs("EPSG:4326", "EPSG:3857")
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for CRS mismatch"
|
||||
|
||||
|
||||
def test_check_df():
|
||||
"""Test that check_df validates input as non-empty pandas DataFrame with non-NaN data."""
|
||||
df = pd.DataFrame({"a": [1, 2]})
|
||||
checks.check_df(df)
|
||||
|
||||
try:
|
||||
checks.check_df([1, 2, 3])
|
||||
except TypeError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected TypeError for non-DataFrame"
|
||||
|
||||
try:
|
||||
checks.check_df(pd.DataFrame())
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for empty DataFrame"
|
||||
|
||||
try:
|
||||
checks.check_df(pd.DataFrame({"a": [None, None]}))
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for DataFrame all NaNs"
|
||||
|
||||
|
||||
def test_check_gdf():
|
||||
"""Test that check_gdf validates input as non-empty GeoDataFrame with valid geometries."""
|
||||
gdf = gpd.GeoDataFrame({'geometry': [Point(0, 0)]})
|
||||
checks.check_gdf(gdf)
|
||||
|
||||
try:
|
||||
checks.check_gdf(pd.DataFrame())
|
||||
except TypeError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected TypeError for non-GeoDataFrame"
|
||||
|
||||
try:
|
||||
checks.check_gdf(gpd.GeoDataFrame())
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for empty GeoDataFrame"
|
||||
|
||||
empty_geom = gpd.GeoDataFrame({'geometry': [None, None]})
|
||||
try:
|
||||
checks.check_gdf(empty_geom)
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for GeoDataFrame with empty geometries"
|
||||
|
||||
|
||||
def test_check_member():
|
||||
"""Test that check_member confirms presence of a member in a collection."""
|
||||
checks.check_member('a', ['a', 'b', 'c'])
|
||||
|
||||
try:
|
||||
checks.check_member('d', ['a', 'b', 'c'])
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
assert False, "Expected ValueError for invalid member"
|
||||
Reference in New Issue
Block a user