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"]}