55from datetime import date
66from typing import Dict
77
8+ import pytest
89from lxml import html # nosec: https://github.com/TUM-Dev/eat-api/issues/19
10+ from syrupy .extensions .json import JSONSnapshotExtension
911
1012from src import main
1113from src .entities import Canteen , Menu , Week
1921from 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+
2229def 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
125124class 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
146143class 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
197171class 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
0 commit comments