Files
Data_engineer_test_task/tests/test_generate_data.py
T

56 lines
1.9 KiB
Python

import csv
from collections import defaultdict
from datetime import date, datetime
from src.generate_data import generate_data
def test_record_count_and_header(tmp_path):
path = tmp_path / "orders.csv"
generate_data(path)
with path.open(encoding="utf-8", newline="") as source:
records = csv.reader(source)
assert next(records) == ["order_id", "order_date", "category", "quantity", "unit_price"]
assert sum(1 for _ in records) == 1500
def test_repeated_generation_is_byte_identical(tmp_path):
path = tmp_path / "orders.csv"
generate_data(path)
first_run = path.read_bytes()
generate_data(path)
assert path.read_bytes() == first_run
def test_planned_examples_are_present_in_generated_csv(tmp_path):
path = tmp_path / "orders.csv"
generate_data(path)
with path.open(encoding="utf-8", newline="") as source:
rows = list(csv.DictReader(source))
expected_values = {
"order_id": {""},
"order_date": {"", "2024-02-30", "03/15/2024"},
"category": {"", " тОВАРЫ для ДОМА "},
"quantity": {"", "1.5", "0", "-2", "три"},
"unit_price": {"", "0", "-12.50", "бесплатно", "12.340", "12,50"},
}
for field, expected in expected_values.items():
assert expected <= {row[field] for row in rows}, field
by_id = defaultdict(list)
for row in rows:
by_id[row["order_id"]].append(row)
first, repeat = by_id["1"]
assert first == repeat
iso, local = sorted(by_id["2"], key=lambda row: "." in row["order_date"])
assert date.fromisoformat(iso["order_date"]) == datetime.strptime(
local["order_date"], "%d.%m.%Y"
).date()
assert iso == local | {"order_date": iso["order_date"]}
first, conflict = by_id["3"]
assert int(first["quantity"]) != int(conflict["quantity"])
assert first == conflict | {"quantity": first["quantity"]}