Coverage for tests\test_race.py: 100%
78 statements
« prev ^ index » next coverage.py v7.0.5, created at 2023-01-18 13:04 +0200
« prev ^ index » next coverage.py v7.0.5, created at 2023-01-18 13:04 +0200
1"""Tests for Race class.
3This module have tests for Race class and it's methods.
5Functions:
6"""
7from datetime import datetime
8from dataclasses import dataclass, field
9from unittest.mock import patch, mock_open
10import pytest
12from report.race import Race
15def test_init_race_without_argument():
16 with pytest.raises(TypeError):
17 r = Race()
20@pytest.mark.parametrize("err, arg", [
21 (UserWarning, {"abbreviations": "file"}),
22 (UserWarning, {"one": "path/to/abbreviations.txt",
23 "two": "path/to/start.log",
24 "three": "path/to/end.log"}),
25 (UserWarning, {"abbreviations": "path/to/abbr.txt",
26 "start": "path/to/start.log",
27 "end": "path/to/end.log"}),
28 (FileNotFoundError, {"abbreviations": "path/to/abbreviations.txt",
29 "start": "path/to/start.log",
30 "end": "path/to/end.log"})])
31def test_init_race_with_invalid_log_files(err, arg):
32 with pytest.raises(err):
33 r = Race(log_files=arg)
36class TestRaceGetMethods:
37 @pytest.fixture(scope="session")
38 def report_file_paths(self, tmp_path_factory):
39 path = tmp_path_factory.mktemp("sub")
40 abbr = path / "abbreviations.txt"
41 abbr.write_text("""DRR_Daniel Ricciardo_RED BULL RACING TAG HEUER
42 EOF_Esteban Ocon_FORCE INDIA MERCEDES
43 SPF_Sergio Perez_FORCE INDIA MERCEDES""")
44 start = path / "start.log"
45 start.write_text("""DRR2018-05-24_12:11:24.067
46 EOF2018-05-24_12:12:11.838
47 SPF2018-05-24_12:12:01.035""")
48 end = path / "end.log"
49 end.write_text("""DRR2018-05-24_12:14:12.054
50 EOF2018-05-24_12:17:58.810
51 SPF2018-05-24_12:13:13.883""")
52 return {"abbreviations": abbr, "start": start, "end": end}
54 @pytest.fixture(scope="session")
55 def setup(self, report_file_paths):
56 race = Race(report_file_paths)
57 return race
59 def test_non_existent_file_path(self, report_file_paths):
60 with patch("builtins.open", mock_open()) as mo:
61 mo.side_effect = PermissionError
62 with pytest.raises(PermissionError):
63 race = Race(report_file_paths)
65 def test_racers_attribute(self, setup):
66 assert setup.racers == {"DRR":
67 {"name": "Daniel Ricciardo",
68 "team": "RED BULL RACING TAG HEUER",
69 "q1_start": datetime.strptime("2018-05-24_12:11:24.067", "%Y-%m-%d_%H:%M:%S.%f"),
70 "q1_end": datetime.strptime("2018-05-24_12:14:12.054", "%Y-%m-%d_%H:%M:%S.%f")},
71 "EOF":
72 {"name": "Esteban Ocon",
73 "team": "FORCE INDIA MERCEDES",
74 "q1_start": datetime.strptime("2018-05-24_12:12:11.838", "%Y-%m-%d_%H:%M:%S.%f"),
75 "q1_end": datetime.strptime("2018-05-24_12:17:58.810", "%Y-%m-%d_%H:%M:%S.%f")},
76 "SPF":
77 {"name": "Sergio Perez",
78 "team": "FORCE INDIA MERCEDES",
79 "q1_start": datetime.strptime("2018-05-24_12:12:01.035", "%Y-%m-%d_%H:%M:%S.%f"),
80 "q1_end": datetime.strptime("2018-05-24_12:13:13.883", "%Y-%m-%d_%H:%M:%S.%f")},
81 }
83 def test_get_number_of_racers(self, setup):
84 assert setup.get_number_of_racers() == 3
86 def test_get_date_of_race(self, setup):
87 assert str(setup.get_date_of_race()) == "2018-05-24"
89 def test_get_start_time_of_q1(self, setup):
90 assert str(setup.get_start_time_of_q1()) == "12:11:24.067000"
92 @pytest.mark.parametrize("reverse, result", [
93 (False, ["Daniel Ricciardo", "Esteban Ocon", "Sergio Perez"]),
94 (True, ["Sergio Perez", "Esteban Ocon", "Daniel Ricciardo"])
95 ])
96 def test_get_names_of_racers(self, setup, reverse, result):
97 assert setup.get_names_of_racers(reverse) == result
99 def test_get_names_of_racers_without_arguments(self, setup):
100 assert setup.get_names_of_racers() == ["Daniel Ricciardo",
101 "Esteban Ocon",
102 "Sergio Perez"]
104 @pytest.mark.parametrize("reverse, result", [
105 (False, ["FORCE INDIA MERCEDES", "RED BULL RACING TAG HEUER"]),
106 (True, ["RED BULL RACING TAG HEUER", "FORCE INDIA MERCEDES"])
107 ])
108 def test_get_teams(self, setup, reverse, result):
109 assert setup.get_teams(reverse) == result
111 def test_get_teams_without_arguments(self, setup):
112 assert setup.get_teams() == ["FORCE INDIA MERCEDES",
113 "RED BULL RACING TAG HEUER"]
115 @pytest.fixture(scope="session")
116 def driver_time(self):
117 esteban_start = datetime.strptime("2018-05-24_12:12:11.838",
118 "%Y-%m-%d_%H:%M:%S.%f")
119 esteban_end = datetime.strptime("2018-05-24_12:17:58.810",
120 "%Y-%m-%d_%H:%M:%S.%f")
121 esteban_timedelta = esteban_end - esteban_start
122 sergio_start = datetime.strptime("2018-05-24_12:12:01.035",
123 "%Y-%m-%d_%H:%M:%S.%f")
124 sergio_end = datetime.strptime("2018-05-24_12:13:13.883",
125 "%Y-%m-%d_%H:%M:%S.%f")
126 sergio_timedelta = sergio_end - sergio_start
127 daniel_start = datetime.strptime("2018-05-24_12:11:24.067",
128 "%Y-%m-%d_%H:%M:%S.%f")
129 daniel_end = datetime.strptime("2018-05-24_12:14:12.054",
130 "%Y-%m-%d_%H:%M:%S.%f")
131 daniel_timedelta = daniel_end - daniel_start
132 return {"esteban": esteban_timedelta,
133 "sergio": sergio_timedelta,
134 "daniel": daniel_timedelta}
136 def test_get_report(self, setup, driver_time):
137 assert setup.get_report() == [["Sergio Perez",
138 "FORCE INDIA MERCEDES",
139 driver_time["sergio"]],
140 ["Daniel Ricciardo",
141 "RED BULL RACING TAG HEUER",
142 driver_time["daniel"]],
143 ["Esteban Ocon",
144 "FORCE INDIA MERCEDES",
145 driver_time["esteban"]]
146 ]
148 def test_get_racer(self, setup, driver_time):
149 assert setup.get_racer("Sergio Perez") == ["SPF",
150 "Sergio Perez",
151 "FORCE INDIA MERCEDES",
152 str(driver_time["sergio"])[3: -3]]
154 def test_get_racer_no_racer_name(self, setup):
155 with pytest.raises(UserWarning):
156 setup.get_racer("Elon Mask")
158 def test_get_racers_in_team_desc(self, setup, driver_time):
159 assert setup.get_racers_in_team("FORCE INDIA MERCEDES", order=True) == [["SPF",
160 "Sergio Perez",
161 "FORCE INDIA MERCEDES",
162 str(driver_time["sergio"])[3: -3]],
163 ["EOF",
164 "Esteban Ocon",
165 "FORCE INDIA MERCEDES",
166 str(driver_time["esteban"])[3: -3]]]
168 def test_get_racers_in_team_asc(self, setup, driver_time):
169 assert setup.get_racers_in_team("force india mercedes", order=False) == [["EOF",
170 "Esteban Ocon",
171 "FORCE INDIA MERCEDES",
172 str(driver_time["esteban"])[3: -3]],
173 ["SPF",
174 "Sergio Perez",
175 "FORCE INDIA MERCEDES",
176 str(driver_time["sergio"])[3: -3]]]
178 def test_get_racers_in_team_no_order_argument(self, setup, driver_time):
179 assert setup.get_racers_in_team("FORCE INDIA MERCEDES") == [["EOF",
180 "Esteban Ocon",
181 "FORCE INDIA MERCEDES",
182 str(driver_time["esteban"])[3: -3]],
183 ["SPF",
184 "Sergio Perez",
185 "FORCE INDIA MERCEDES",
186 str(driver_time["sergio"])[3: -3]]]
188 def test_get_racers_in_team_no_team_name(self, setup, driver_time):
189 with pytest.raises(UserWarning):
190 assert setup.get_racers_in_team("SpaceX")