File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -69,7 +69,12 @@ def format_output(statsmodels_dict):
6969def compute_anova (dep_var , indep_vars , data , design = 'factorial' ):
7070 formula = generate_formula (dep_var , indep_vars , design )
7171 logging .info ("Formula: %s" % formula )
72- lm = ols (data = DataFrame (data ), formula = formula ).fit ()
72+ data = DataFrame (data )
73+
74+ if data .empty :
75+ raise errors .UserError ('SQL returned no data, check your dataset and null values.' )
76+
77+ lm = ols (data = data , formula = formula ).fit ()
7378 logging .info (lm .summary ())
7479 return anova_lm (lm )
7580
Original file line number Diff line number Diff line change 11import pytest
2- from anova import generate_formula
2+ import mock
3+ import json
4+ from anova import generate_formula , main
35from mip_helper import errors
6+ from mip_helper import testing as t
47
58
69def test_generate_formula ():
@@ -9,3 +12,52 @@ def test_generate_formula():
912 indep_vars = [{'name' : str (i )} for i in range (10 )]
1013 with pytest .raises (errors .UserError ):
1114 generate_formula (dep_var , indep_vars , 'factorial' )
15+
16+
17+ @mock .patch ('anova.io_helper.fetch_data' )
18+ @mock .patch ('anova.io_helper.save_results' )
19+ def test_main (mock_save_results , mock_fetch_data ):
20+ mock_fetch_data .return_value = t .inputs_regression (include_nominal = False )
21+ main ()
22+ result = json .loads (mock_save_results .call_args [0 ][0 ])
23+ assert t .round_dict (result ) == {
24+ 'Residual' : {
25+ 'F' : 'NaN' ,
26+ 'PR(>F)' : 'NaN' ,
27+ 'df' : 1.0 ,
28+ 'mean_sq' : 0.019 ,
29+ 'sum_sq' : 0.019
30+ },
31+ 'minimentalstate' : {
32+ 'F' : 12.831 ,
33+ 'PR(>F)' : 0.173 ,
34+ 'df' : 1.0 ,
35+ 'mean_sq' : 0.248 ,
36+ 'sum_sq' : 0.248
37+ },
38+ 'subjectage' : {
39+ 'F' : 0.958 ,
40+ 'PR(>F)' : 0.507 ,
41+ 'df' : 1.0 ,
42+ 'mean_sq' : 0.019 ,
43+ 'sum_sq' : 0.019
44+ },
45+ 'subjectage:minimentalstate' : {
46+ 'F' : 0.096 ,
47+ 'PR(>F)' : 0.808 ,
48+ 'df' : 1.0 ,
49+ 'mean_sq' : 0.002 ,
50+ 'sum_sq' : 0.002
51+ }
52+ }
53+
54+
55+ @mock .patch ('anova.io_helper.fetch_data' )
56+ @mock .patch ('anova.io_helper.save_error' )
57+ @mock .patch ('sys.exit' )
58+ def test_main_empty_input (mock_exit , mock_save_error , mock_fetch_data ):
59+ mock_fetch_data .return_value = t .inputs_regression (limit_to = 0 )
60+ main ()
61+
62+ mock_exit .assert_called_once_with (1 )
63+ mock_save_error .assert_called_once ()
You can’t perform that action at this time.
0 commit comments