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

1"""File Writer Test case.""" 

2from __future__ import annotations 

3 

4import csv 

5import inspect 

6import json 

7from pathlib import Path 

8from test.esxport._export_test import TestExport 

9from typing import TYPE_CHECKING, Any 

10 

11from faker import Faker 

12 

13from src.writer import Writer 

14 

15if TYPE_CHECKING: 

16 from typing_extensions import Self 

17 

18fake = Faker("en_IN") 

19 

20 

21class TestWriter: 

22 """File Writer Test case.""" 

23 

24 no_of_records = 10 

25 csv_header = ["age", "name"] 

26 fake_data: list[dict[str, Any]] = [] 

27 

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") 

37 

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) 

43 

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] 

56 

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" 

59 

60 TestExport.rm_csv_export_file(out_file)