99
1010# --- BASIC TEST CASES ---
1111
12+
1213def test_valid_list_of_dicts ():
1314 input_data = [
1415 {"Task" : "A" , "Start" : "2020-01-01" , "Finish" : "2020-01-02" },
@@ -51,8 +52,18 @@ def test_valid_list_with_extra_keys():
5152def test_valid_dataframe_with_extra_keys ():
5253 df = pd .DataFrame (
5354 [
54- {"Task" : "A" , "Start" : "2020-01-01" , "Finish" : "2020-01-02" , "Resource" : "X" },
55- {"Task" : "B" , "Start" : "2020-01-03" , "Finish" : "2020-01-04" , "Resource" : "Y" },
55+ {
56+ "Task" : "A" ,
57+ "Start" : "2020-01-01" ,
58+ "Finish" : "2020-01-02" ,
59+ "Resource" : "X" ,
60+ },
61+ {
62+ "Task" : "B" ,
63+ "Start" : "2020-01-03" ,
64+ "Finish" : "2020-01-04" ,
65+ "Resource" : "Y" ,
66+ },
5667 ]
5768 )
5869 result = validate_gantt (df )
@@ -62,6 +73,7 @@ def test_valid_dataframe_with_extra_keys():
6273
6374# --- EDGE TEST CASES ---
6475
76+
6577def test_missing_required_key_in_list ():
6678 input_data = [
6779 {"Task" : "A" , "Start" : "2020-01-01" }, # Missing "Finish"
@@ -73,9 +85,11 @@ def test_missing_required_key_in_list():
7385
7486@pytest .mark .skipif (pd is None , reason = "pandas is not available" )
7587def test_missing_required_key_in_dataframe ():
76- df = pd .DataFrame ([
77- {"Task" : "A" , "Start" : "2020-01-01" }, # Missing "Finish"
78- ])
88+ df = pd .DataFrame (
89+ [
90+ {"Task" : "A" , "Start" : "2020-01-01" }, # Missing "Finish"
91+ ]
92+ )
7993 with pytest .raises (exceptions .PlotlyError ):
8094 validate_gantt (df )
8195
@@ -119,19 +133,26 @@ def test_list_with_dict_missing_all_keys():
119133
120134@pytest .mark .skipif (pd is None , reason = "pandas is not available" )
121135def test_dataframe_with_only_required_keys ():
122- df = pd .DataFrame ([
123- {"Task" : "A" , "Start" : "2020-01-01" , "Finish" : "2020-01-02" },
124- ])
136+ df = pd .DataFrame (
137+ [
138+ {"Task" : "A" , "Start" : "2020-01-01" , "Finish" : "2020-01-02" },
139+ ]
140+ )
125141 result = validate_gantt (df )
126142 assert len (result ) == 1
127143 assert set (result [0 ].keys ()) == set (REQUIRED_GANTT_KEYS )
128144
129145
130146# --- LARGE SCALE TEST CASES ---
131147
148+
132149def test_large_list_of_dicts ():
133150 input_data = [
134- {"Task" : f"Task{ i } " , "Start" : f"2020-01-{ i % 30 + 1 :02d} " , "Finish" : f"2020-02-{ i % 28 + 1 :02d} " }
151+ {
152+ "Task" : f"Task{ i } " ,
153+ "Start" : f"2020-01-{ i % 30 + 1 :02d} " ,
154+ "Finish" : f"2020-02-{ i % 28 + 1 :02d} " ,
155+ }
135156 for i in range (1000 )
136157 ]
137158 result = validate_gantt (input_data )
@@ -141,10 +162,16 @@ def test_large_list_of_dicts():
141162
142163@pytest .mark .skipif (pd is None , reason = "pandas is not available" )
143164def test_large_dataframe ():
144- df = pd .DataFrame ([
145- {"Task" : f"Task{ i } " , "Start" : f"2020-01-{ i % 30 + 1 :02d} " , "Finish" : f"2020-02-{ i % 28 + 1 :02d} " }
146- for i in range (1000 )
147- ])
165+ df = pd .DataFrame (
166+ [
167+ {
168+ "Task" : f"Task{ i } " ,
169+ "Start" : f"2020-01-{ i % 30 + 1 :02d} " ,
170+ "Finish" : f"2020-02-{ i % 28 + 1 :02d} " ,
171+ }
172+ for i in range (1000 )
173+ ]
174+ )
148175 result = validate_gantt (df )
149176 assert isinstance (result , list )
150177 assert len (result ) == 1000
@@ -153,10 +180,15 @@ def test_large_dataframe():
153180
154181@pytest .mark .skipif (pd is None , reason = "pandas is not available" )
155182def test_large_dataframe_missing_key ():
156- df = pd .DataFrame ([
157- {"Task" : f"Task{ i } " , "Start" : f"2020-01-{ i % 30 + 1 :02d} " } # Missing "Finish"
158- for i in range (1000 )
159- ])
183+ df = pd .DataFrame (
184+ [
185+ {
186+ "Task" : f"Task{ i } " ,
187+ "Start" : f"2020-01-{ i % 30 + 1 :02d} " ,
188+ } # Missing "Finish"
189+ for i in range (1000 )
190+ ]
191+ )
160192 with pytest .raises (exceptions .PlotlyError ):
161193 validate_gantt (df )
162194
@@ -165,7 +197,11 @@ def test_large_list_with_non_dict_first_element():
165197 input_data = [
166198 "Not a dict" ,
167199 * [
168- {"Task" : f"Task{ i } " , "Start" : f"2020-01-{ i % 30 + 1 :02d} " , "Finish" : f"2020-02-{ i % 28 + 1 :02d} " }
200+ {
201+ "Task" : f"Task{ i } " ,
202+ "Start" : f"2020-01-{ i % 30 + 1 :02d} " ,
203+ "Finish" : f"2020-02-{ i % 28 + 1 :02d} " ,
204+ }
169205 for i in range (999 )
170206 ],
171207 ]
@@ -176,7 +212,11 @@ def test_large_list_with_non_dict_first_element():
176212def test_large_list_with_non_dict_later_element ():
177213 input_data = [
178214 * [
179- {"Task" : f"Task{ i } " , "Start" : f"2020-01-{ i % 30 + 1 :02d} " , "Finish" : f"2020-02-{ i % 28 + 1 :02d} " }
215+ {
216+ "Task" : f"Task{ i } " ,
217+ "Start" : f"2020-01-{ i % 30 + 1 :02d} " ,
218+ "Finish" : f"2020-02-{ i % 28 + 1 :02d} " ,
219+ }
180220 for i in range (999 )
181221 ],
182222 "Not a dict" ,
@@ -189,6 +229,7 @@ def test_large_list_with_non_dict_later_element():
189229
190230# --- Additional determinism/robustness checks ---
191231
232+
192233def test_determinism_multiple_calls_list ():
193234 input_data = [
194235 {"Task" : "A" , "Start" : "2023-01-01" , "Finish" : "2023-01-02" },
@@ -202,14 +243,15 @@ def test_determinism_multiple_calls_list():
202243
203244@pytest .mark .skipif (pd is None , reason = "pandas is not available" )
204245def test_dataframe_column_order_and_index ():
205- df = pd .DataFrame ([
206- {"Finish" : "2023-01-02" , "Start" : "2023-01-01" , "Task" : "A" },
207- {"Finish" : "2023-01-03" , "Start" : "2023-01-02" , "Task" : "B" },
208- ], index = ["x" , "y" ])
246+ df = pd .DataFrame (
247+ [
248+ {"Finish" : "2023-01-02" , "Start" : "2023-01-01" , "Task" : "A" },
249+ {"Finish" : "2023-01-03" , "Start" : "2023-01-02" , "Task" : "B" },
250+ ],
251+ index = ["x" , "y" ],
252+ )
209253 result = validate_gantt (df )
210254 assert len (result ) == 2
211255 # Ensure values preserved regardless of order/index
212256 assert result [0 ]["Task" ] == "A"
213- assert set (result [0 ].keys ()) == set (["Task" , "Start" , "Finish" ])
214-
215-
257+ assert set (result [0 ].keys ()) == set (["Task" , "Start" , "Finish" ])
0 commit comments