Coverage for test/writer/csv_writer_test.py: 98%
42 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-22 17:59 +0530
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-22 17:59 +0530
1"""File Writer Test case."""
2from __future__ import annotations
4import csv
5import inspect
6import json
7from pathlib import Path
8from test.esxport._export_test import TestExport
9from typing import TYPE_CHECKING, Any
11from faker import Faker
13from src.writer import Writer
15if TYPE_CHECKING:
16 from typing_extensions import Self
18fake = Faker("en_IN")
21class TestWriter:
22 """File Writer Test case."""
24 no_of_records = 10
25 csv_header = ["age", "name"]
26 fake_data: list[dict[str, Any]] = []
28 @staticmethod
29 def _gen_fake_json(file_name: str) -> None:
30 """Generate fake data."""
31 with Path(f"{file_name}.tmp").open(mode="w", encoding="utf-8") as tmp_file:
32 for _ in range(TestWriter.no_of_records):
33 cur_dict = {key: fake.name() for key in TestWriter.csv_header}
34 TestWriter.fake_data.append(cur_dict)
35 tmp_file.write(json.dumps(cur_dict))
36 tmp_file.write("\n")
38 @staticmethod
39 def setup_data(file_name: str) -> None:
40 """Create resources."""
41 Path(f"{file_name}.tmp").unlink(missing_ok=True)
42 TestWriter._gen_fake_json(file_name)
44 def test_write_to_csv(self: Self) -> None:
45 """Test write_to_csv function."""
46 out_file = f"{inspect.stack()[0].function}.csv"
47 TestWriter.setup_data(out_file)
48 kwargs = {"delimiter": ","}
49 Writer.write(self.no_of_records, out_file, self.csv_header, **kwargs)
50 assert Path(out_file).exists(), "File does not exist"
51 with Path(out_file).open() as file:
52 reader = csv.reader(file)
53 headers = next(reader)
54 assert headers == self.csv_header, "Headers do not match"
55 csv_data = [dict(zip(headers, i)) for i in reader]
57 assert len(csv_data) == self.no_of_records, "Record count does not match"
58 assert csv_data == self.fake_data, "Generated data does not match with written data"
60 TestExport.rm_csv_export_file(out_file)