55import pytest
66
77from qolmat .utils import data
8+ from pytest_mock .plugin import MockerFixture
89
910columns = ["No" , "year" , "month" , "day" , "hour" , "a" , "b" , "wd" , "station" ]
1011df = pd .DataFrame (
2829 [[1 , 2 ], [3 , np .nan ], [np .nan , 6 ]], columns = ["a" , "b" ], index = index_preprocess
2930)
3031
32+ urllink = "https://archive.ics.uci.edu/ml/machine-learning-databases/00501/"
33+ zipname = "PRSA2017_Data_20130301-20170228"
34+
35+
36+ # @pytest.mark.parametrize("zipname, urllink", [(zipname, urllink)])
37+ # def test_utils_data_download_data(zipname: str, urllink: str, mocker: MockerFixture) -> None:
38+ # mocker.patch("urllib.request.urlretrieve")
39+ # mocker.patch("zipfile.ZipFile")
40+ # list_df_result = data.download_data(zipname, urllink)
41+
3142
3243@pytest .mark .parametrize ("name_data" , ["Beijing" , "Artificial" , "Bug" ])
33- def test_utils_data_get_data (name_data : str ) -> None :
44+ def test_utils_data_get_data (name_data : str , mocker : MockerFixture ) -> None :
45+ mock_download = mocker .patch ("qolmat.utils.data.download_data" , return_value = [df ])
46+ mocker .patch ("qolmat.utils.data.preprocess_data" , return_value = df_preprocess )
47+ try :
48+ df_result = data .get_data (name_data = name_data )
49+ except ValueError :
50+ assert name_data not in ["Beijing" , "Artificial" ]
51+ np .testing .assert_raises (ValueError , data .get_data , name_data )
52+ return
53+
3454 if name_data == "Beijing" :
35- df = data .get_data (name_data = name_data )
36- expected_columns = [
37- "PM2.5" ,
38- "PM10" ,
39- "SO2" ,
40- "NO2" ,
41- "CO" ,
42- "O3" ,
43- "TEMP" ,
44- "PRES" ,
45- "DEWP" ,
46- "RAIN" ,
47- "WSPM" ,
48- ]
49- assert isinstance (df , pd .DataFrame )
50- assert df .columns .tolist () == expected_columns
55+ assert mock_download .call_count == 1
56+ pd .testing .assert_frame_equal (df_result , df_preprocess )
5157 elif name_data == "Artificial" :
52- df = data .get_data (name_data = name_data )
5358 expected_columns = ["signal" , "X" , "A" , "E" ]
54- assert isinstance (df , pd .DataFrame )
55- assert df .columns .tolist () == expected_columns
59+ assert isinstance (df_result , pd .DataFrame )
60+ assert df_result .columns .tolist () == expected_columns
5661 else :
57- np . testing . assert_raises ( ValueError , data . get_data , name_data )
62+ assert False
5863
5964
6065@pytest .mark .parametrize ("df" , [df ])
@@ -72,11 +77,15 @@ def test_utils_data_add_holes(df: pd.DataFrame) -> None:
7277
7378
7479@pytest .mark .parametrize ("name_data" , ["Beijing" ])
75- def test_utils_data_get_data_corrupted (name_data : str ) -> None :
80+ def test_utils_data_get_data_corrupted (name_data : str , mocker : MockerFixture ) -> None :
81+ mock_download = mocker .patch ("qolmat.utils.data.download_data" , return_value = [df ])
82+ mocker .patch ("qolmat.utils.data.preprocess_data" , return_value = df_preprocess )
7683 df_out = data .get_data_corrupted ()
77- size_df_out = df_out .shape
78- n = size_df_out [0 ] * size_df_out [1 ]
79- np .testing .assert_allclose (df_out .isna ().sum ().sum () / n , 0.2 , atol = 0.1 )
84+ df_result = pd .DataFrame (
85+ [[1 , 2 ], [np .nan , np .nan ], [np .nan , 6 ]], columns = ["a" , "b" ], index = index_preprocess
86+ )
87+ assert mock_download .call_count == 1
88+ pd .testing .assert_frame_equal (df_result , df_out )
8089
8190
8291@pytest .mark .parametrize ("df" , [df_preprocess ])
0 commit comments