Skip to content

Commit 6d42b86

Browse files
use syrupy for snapshotting
1 parent 5a5b721 commit 6d42b86

File tree

4 files changed

+185
-157
lines changed

4 files changed

+185
-157
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dev = [
1919
"pre-commit~=4.1",
2020
"pytest~=8.3",
2121
"ruff>=0.11.4",
22+
"syrupy~=4.0",
2223
"types-requests~=2.32",
2324
]
2425

src/test/test_menu_parser.py

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from datetime import date
66
from typing import Dict
77

8+
import pytest
89
from lxml import html # nosec: https://github.com/TUM-Dev/eat-api/issues/19
10+
from syrupy.extensions.json import JSONSnapshotExtension
911

1012
from src import main
1113
from src.entities import Canteen, Menu, Week
@@ -19,6 +21,11 @@
1921
from src.utils import file_util, json_util
2022

2123

24+
@pytest.fixture
25+
def snapshot_json(snapshot):
26+
return snapshot.with_defaults(extension_class=JSONSnapshotExtension)
27+
28+
2229
def test_get_date():
2330
assert MenuParser.get_date(2017, 44, 1) == date(2017, 10, 30)
2431
assert MenuParser.get_date(2018, 1, 1) == date(2018, 1, 1)
@@ -66,24 +73,20 @@ def test_get_all_dates(self) -> None:
6673
dates.append(self.studentenwerk_menu_parser.extract_date_from_html(html_menu))
6774
assert dates == working_days
6875

69-
def test_studentenwerk(self) -> None:
76+
def test_studentenwerk(self, snapshot_json):
7077
canteens = [Canteen.MENSA_ARCISSTR, Canteen.STUBISTRO_BUTENANDSTR, Canteen.MENSA_GARCHING]
7178
for canteen in canteens:
72-
self.__test_studentenwerk_canteen(canteen)
79+
self.__test_studentenwerk_canteen(canteen, snapshot_json)
7380

74-
def __test_studentenwerk_canteen(self, canteen: Canteen) -> None:
81+
def __test_studentenwerk_canteen(self, canteen, snapshot_json):
7582
menus = self.__get_menus(canteen)
7683
weeks = Week.to_weeks(menus)
7784

7885
# create temp dir for testing
7986
with tempfile.TemporaryDirectory() as temp_dir:
8087
# store output in the tempdir
8188
main.jsonify(weeks, temp_dir, canteen, True)
82-
generated = file_util.load_ordered_json(os.path.join(temp_dir, "combined", "combined.json"))
83-
reference = file_util.load_ordered_json(
84-
f"{self.base_path_canteen.format(canteen=canteen.canteen_id)}/reference/combined.json",
85-
)
86-
assert generated == reference
89+
assert file_util.load_ordered_json(os.path.join(temp_dir, "combined", "combined.json")) == snapshot_json
8790

8891
def __get_menus(self, canteen: Canteen) -> Dict[date, Menu]:
8992
menus = {}
@@ -109,23 +112,19 @@ def test_should_return_weeks_when_converting_menu_to_week_objects(self):
109112
week_length = len(week.days)
110113
assert week_length == 5
111114

112-
def test_should_convert_week_to_json(self):
115+
def test_should_convert_week_to_json(self, snapshot_json):
113116
calendar_weeks = [31, 32]
114117
menus = self.__get_menus(Canteen.MENSA_GARCHING)
115118
weeks = Week.to_weeks(menus)
116119
for calendar_week in calendar_weeks:
117-
reference_week = file_util.load_ordered_json(
118-
f"{self.base_path_canteen.format(canteen=Canteen.MENSA_GARCHING.canteen_id)}"
119-
f"/reference/week_{calendar_week}.json",
120-
)
121120
generated_week = json_util.order_json_objects(weeks[calendar_week].to_json_obj())
122-
assert generated_week == reference_week
121+
assert generated_week == snapshot_json
123122

124123

125124
class TestFMIBistroParser:
126125
bistro_parser = FMIBistroMenuParser()
127126

128-
def test_fmi_bistro(self):
127+
def test_fmi_bistro(self, snapshot_json):
129128
for_generation_path = "src/test/assets/fmi/for-generation/calendar_week_2023_{calendar_week}.txt"
130129
menus = {}
131130
for calendar_week in range(21, 23):
@@ -138,15 +137,13 @@ def test_fmi_bistro(self):
138137
# store output in the tempdir
139138
main.jsonify(weeks, temp_dir, Canteen.FMI_BISTRO, True)
140139
generated = file_util.load_ordered_json(os.path.join(temp_dir, "combined", "combined.json"))
141-
reference = file_util.load_ordered_json("src/test/assets/fmi/reference/combined.json")
142-
143-
assert generated == reference
140+
assert generated == snapshot_json
144141

145142

146143
class TestMedizinerMensaParser:
147144
mediziner_mensa_parser = MedizinerMensaMenuParser()
148145

149-
def test_mediziner_mensa(self):
146+
def test_mediziner_mensa(self, snapshot_json):
150147
# parse the menu
151148
for calendar_week in [44, 47]:
152149
for_generation = file_util.load_txt(
@@ -168,36 +165,13 @@ def test_mediziner_mensa(self):
168165
main.jsonify(weeks, temp_dir, Canteen.MEDIZINER_MENSA, True)
169166
# open the generated file
170167
generated = file_util.load_ordered_json(os.path.join(temp_dir, "combined", "combined.json"))
171-
reference = file_util.load_ordered_json(
172-
f"src/test/assets/mediziner-mensa/reference/week_2018_{calendar_week}.json",
173-
)
174-
assert generated == reference
175-
176-
# """
177-
# just for generating reference json files
178-
def test_gen_file(self):
179-
# parse the menu
180-
for_generation = file_util.load_txt(
181-
"src/test/assets/mediziner-mensa/for-generation/week_2018_44.txt",
182-
)
183-
menus = self.mediziner_mensa_parser.get_menus(
184-
for_generation,
185-
2018,
186-
47,
187-
)
188-
assert menus is not None
189-
if not menus:
190-
return
191-
weeks = Week.to_weeks(menus)
192-
main.jsonify(weeks, "/tmp/eat-api_test_output", Canteen.MEDIZINER_MENSA, True) # noqa: S108
193-
194-
# """
168+
assert generated == snapshot_json
195169

196170

197171
class TestStraubingMensaMenuParser:
198172
straubing_mensa_parser = StraubingMensaMenuParser()
199173

200-
def test_straubing_mensa(self):
174+
def test_straubing_mensa(self, snapshot_json):
201175
for calendar_week in [16, 17]:
202176
with open(f"src/test/assets/straubing/for-generation/{calendar_week}.csv", encoding="cp1252") as f:
203177
for_generation = f.read()
@@ -213,7 +187,4 @@ def test_straubing_mensa(self):
213187
main.jsonify(weeks, temp_dir, Canteen.MENSA_STRAUBING, True)
214188
# open the generated file
215189
generated = file_util.load_ordered_json(os.path.join(temp_dir, "2022", f"{calendar_week}.json"))
216-
reference = file_util.load_ordered_json(
217-
f"src/test/assets/straubing/reference/{calendar_week}.json",
218-
)
219-
assert generated == reference
190+
assert generated == snapshot_json

src/test/test_translate.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
import pathlib
22
import tempfile
33

4+
import pytest
5+
from syrupy.extensions.json import JSONSnapshotExtension
6+
47
from src.entities import Canteen
58
from src.translate import Translator, translate_file
69
from src.utils.file_util import load_ordered_json
710

811

12+
@pytest.fixture
13+
def snapshot_json(snapshot):
14+
return snapshot.with_defaults(extension_class=JSONSnapshotExtension)
15+
16+
917
class TestTranslate:
1018
base_path = pathlib.Path("src/test/assets/studentenwerk") / Canteen.MENSA_GARCHING.canteen_id
1119

12-
def test_week(self):
20+
def test_week(self, snapshot_json):
1321
input_file = self.base_path / "reference/week_31.json"
14-
expected_file = self.base_path / "en/week_31.json"
1522

1623
translator = Translator("DUMMY", self.base_path / "en/translations.json")
1724
translator.load_cache()
@@ -20,12 +27,10 @@ def test_week(self):
2027
translate_file(input_file, output, translator)
2128
translated = load_ordered_json(output)
2229

23-
expected = load_ordered_json(expected_file)
24-
assert translated == expected
30+
assert translated == snapshot_json
2531

26-
def test_combined(self):
32+
def test_combined(self, snapshot_json):
2733
input_file = self.base_path / "reference/combined.json"
28-
expected_file = self.base_path / "en/combined.json"
2934

3035
translator = Translator("DUMMY", self.base_path / "en/translations.json")
3136
translator.load_cache()
@@ -34,5 +39,4 @@ def test_combined(self):
3439
translate_file(input_file, output, translator)
3540
translated = load_ordered_json(output)
3641

37-
expected = load_ordered_json(expected_file)
38-
assert translated == expected
42+
assert translated == snapshot_json

0 commit comments

Comments
 (0)