aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Schofield <git@ajschof.me>2025-02-18 23:00:19 +0000
committerAlex Schofield <git@ajschof.me>2025-02-18 23:00:19 +0000
commitebb884f21106a574d1ab5b61e3d2a34080f0b9a3 (patch)
treee84d0944f79afc178835891d460213a4cf5f8738
parent31d01d5efbccbf923e9131c0b67aa916be873e9e (diff)
downloadgdpr-obfuscator-ebb884f21106a574d1ab5b61e3d2a34080f0b9a3.tar.gz
gdpr-obfuscator-ebb884f21106a574d1ab5b61e3d2a34080f0b9a3.zip
add tests for read_s3 in CSVReader
-rw-r--r--test/test_csv_reader.py96
1 files changed, 95 insertions, 1 deletions
diff --git a/test/test_csv_reader.py b/test/test_csv_reader.py
index 27abea0..540e172 100644
--- a/test/test_csv_reader.py
+++ b/test/test_csv_reader.py
@@ -73,7 +73,7 @@ def test_csv_with_quoted_fields_should_run_as_expected():
def setup_s3(s3_client, bucket: str, key: str, content: str):
s3_client.create_bucket(
- Bucket="test-bucket",
+ Bucket=bucket,
CreateBucketConfiguration={"LocationConstraint": "eu-west-2"},
)
s3_client.put_object(Bucket=bucket, Key=key, Body=content)
@@ -108,3 +108,97 @@ def test_read_s3_valid_csv_returns_expected():
]
assert data == expected
+
+
+def test_read_s3_empty_csv_returns_empty_list():
+ with mock_aws():
+ s3 = boto3.client("s3", region_name="eu-west-2")
+ bucket = "empty-bucket"
+ key = "data/empty.csv"
+ csv_content = "student_id,name,course\n"
+ setup_s3(s3, bucket, key, csv_content)
+ path = f"s3://{bucket}/{key}"
+
+ data = CSVReader.read_s3(path)
+ assert data == []
+
+
+def test_read_s3_nonexistent_bucket_raises_exception():
+ with mock_aws():
+ bucket = "nonexistent-bucket"
+ key = "data/mock.csv"
+ path = f"s3://{bucket}/{key}"
+ with pytest.raises(Exception):
+ CSVReader.read_s3(path)
+
+
+def test_read_s3_nonexistent_key_raises_exception():
+ with mock_aws():
+ s3 = boto3.client("s3", region_name="eu-west-2")
+ bucket = "test-bucket"
+ s3.create_bucket(
+ Bucket=bucket,
+ CreateBucketConfiguration={"LocationConstraint": "eu-west-2"},
+ )
+ key = "data/nonexistent.csv"
+ path = f"s3://{bucket}/{key}"
+ with pytest.raises(Exception):
+ CSVReader.read_s3(path)
+
+
+def test_read_s3_malformed_csv_returns_expected():
+ with mock_aws():
+ s3 = boto3.client("s3", region_name="eu-west-2")
+ bucket = "test-bucket"
+ key = "data/malformed.csv"
+ csv_content = "1234,Student 1,Course 1\n" "5678,Student 2,Course 2\n"
+ setup_s3(s3, bucket, key, csv_content)
+ path = f"s3://{bucket}/{key}"
+
+ data = CSVReader.read_s3(path)
+ expected = [{"1234": "5678", "Student 1": "Student 2", "Course 1": "Course 2"}]
+ assert data == expected
+
+
+def test_read_s3_csv_with_extra_empty_lines():
+ with mock_aws():
+ s3 = boto3.client("s3", region_name="eu-west-2")
+ bucket = "test-bucket"
+ key = "data/extra_lines.csv"
+ csv_content = (
+ "student_id,name,course\n"
+ "1234,Student 1,Course 1\n"
+ "\n"
+ "5678,Student 2,Course 2\n"
+ "\n"
+ )
+ setup_s3(s3, bucket, key, csv_content)
+ path = f"s3://{bucket}/{key}"
+
+ data = CSVReader.read_s3(path)
+ expected = [
+ {"student_id": "1234", "name": "Student 1", "course": "Course 1"},
+ {"student_id": "5678", "name": "Student 2", "course": "Course 2"},
+ ]
+ assert data == expected
+
+
+def test_read_s3_csv_with_whitespace_in_fields():
+ with mock_aws():
+ s3 = boto3.client("s3", region_name="eu-west-2")
+ bucket = "test-bucket"
+ key = "data/whitespace.csv"
+ csv_content = (
+ "student_id, name , course \n"
+ " 1234 , Student 1 , Course 1 \n"
+ "5678,Student 2,Course 2\n"
+ )
+ setup_s3(s3, bucket, key, csv_content)
+ path = f"s3://{bucket}/{key}"
+
+ data = CSVReader.read_s3(path)
+ expected = [
+ {"student_id": " 1234 ", " name ": " Student 1 ", " course ": " Course 1 "},
+ {"student_id": "5678", " name ": "Student 2", " course ": "Course 2"},
+ ]
+ assert data == expected
git.ajschof.me — hosted by ajschofield — powered by cgit