Skip to content

Commit 0ea3aae

Browse files
committed
Update tests
1 parent 770c003 commit 0ea3aae

File tree

2 files changed

+80
-52
lines changed

2 files changed

+80
-52
lines changed
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
models: ["NorESM2-LM"]
2-
downloader_kwargs:
3-
variables: ["tas", "CO2", "CH4"]
4-
experiments: ["historical", "ssp126"]
1+
CMIP6:
2+
model: "NorESM2-LM"
3+
variables: ["tas"]
4+
experiments: ["historical","ssp126"]
5+
input4MIPs:
6+
variables: ["CO2", "CH4"]
7+
experiments: ["historical","ssp126"]

tests/test_download/test_downloader.py

Lines changed: 73 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
1+
import shutil
12
from unittest.mock import call, patch
23

34
import pytest
45

56
from climateset import TEST_DIR
6-
from climateset.download.downloader import Downloader, download_from_config_file
7-
from climateset.utils import get_yaml_config
7+
from climateset.download.cmip6_downloader import CMIP6Downloader
8+
from climateset.download.constants.esgf import CMIP6, INPUT4MIPS
9+
from climateset.download.downloader import download_from_config_file
10+
from climateset.download.downloader_config import (
11+
create_cmip6_downloader_config_from_file,
12+
create_input4mips_downloader_config_from_file,
13+
)
14+
from climateset.download.input4mips_downloader import Input4MipsDownloader
815

916
MINIMAL_DATASET_CONFIG_PATH = TEST_DIR / "resources/test_minimal_dataset.yaml"
17+
TEST_TMP_DIR = TEST_DIR / "resources/.tmp"
1018

11-
DOWNLOAD_RAW_INPUT_SINGLE_VAR = "climateset.download.downloader.Downloader.download_raw_input_single_var"
19+
DOWNLOAD_RAW_INPUT_SINGLE_VAR = (
20+
"climateset.download.input4mips_downloader.Input4MipsDownloader.download_raw_input_single_var"
21+
)
1222
DOWNLOAD_META_HISTORIC_SINGLE_VAR = (
13-
"climateset.download.downloader.Downloader.download_meta_historic_biomassburning_single_var"
23+
"climateset.download.input4mips_downloader.Input4MipsDownloader.download_meta_historic_biomassburning_single_var"
1424
)
15-
DOWNLOAD_MODEL_SINGLE_VAR = "climateset.download.downloader.Downloader.download_from_model_single_var"
25+
DOWNLOAD_MODEL_SINGLE_VAR = "climateset.download.cmip6_downloader.CMIP6Downloader.download_from_model_single_var"
1626
SUBPROCESS_RUN = "subprocess.run"
1727

1828
EXPECTED_MINIMAL_RAW_INPUT_CALLS = [
@@ -36,11 +46,15 @@
3646
]
3747

3848
EXPECTED_MINIMAL_MODEL_CALLS = [
39-
call(variable="tas", experiment="historical"),
40-
call(variable="tas", experiment="ssp126"),
49+
call(project="CMIP6", variable="tas", experiment="historical"),
50+
call(project="CMIP6", variable="tas", experiment="ssp126"),
4151
]
4252

4353

54+
def delete_tmp_dir():
55+
shutil.rmtree(TEST_TMP_DIR, ignore_errors=True)
56+
57+
4458
@pytest.fixture()
4559
def mock_raw_input_single_var():
4660
with patch(DOWNLOAD_RAW_INPUT_SINGLE_VAR) as mock_function:
@@ -66,71 +80,83 @@ def mock_subprocess_run():
6680

6781

6882
@pytest.fixture
69-
def simple_downloader_object():
83+
def input4mips_downloader_object():
7084
config_source = MINIMAL_DATASET_CONFIG_PATH
71-
config = get_yaml_config(config_source)
72-
model = config["models"][0]
73-
downloader_kwargs = config["downloader_kwargs"]
74-
return Downloader(model=model, **downloader_kwargs)
85+
config = create_input4mips_downloader_config_from_file(config_source)
86+
config.data_dir = TEST_TMP_DIR
87+
yield Input4MipsDownloader(config=config)
88+
delete_tmp_dir()
7589

7690

77-
def test_downloader_init(simple_downloader_object):
78-
assert isinstance(simple_downloader_object, Downloader)
91+
@pytest.fixture
92+
def cmip6_downloader_object():
93+
config_source = MINIMAL_DATASET_CONFIG_PATH
94+
config = create_cmip6_downloader_config_from_file(config_source)
95+
config.data_dir = TEST_TMP_DIR
96+
yield CMIP6Downloader(config=config)
97+
delete_tmp_dir()
98+
7999

100+
def test_downloader_init(input4mips_downloader_object, cmip6_downloader_object):
101+
assert isinstance(input4mips_downloader_object, Input4MipsDownloader)
102+
assert isinstance(cmip6_downloader_object, CMIP6Downloader)
80103

81-
def test_downloader_base_params(simple_downloader_object):
82-
assert simple_downloader_object.model == "NorESM2-LM"
83-
assert simple_downloader_object.experiments == ["historical", "ssp126"]
84104

105+
def test_downloader_base_params(input4mips_downloader_object, cmip6_downloader_object):
106+
assert input4mips_downloader_object.config.project == INPUT4MIPS
107+
assert input4mips_downloader_object.config.experiments == ["historical", "ssp126"]
108+
assert cmip6_downloader_object.config.project == CMIP6
109+
assert cmip6_downloader_object.config.model == ["NorESM2-LM"]
110+
assert cmip6_downloader_object.config.experiments == ["historical", "ssp126"]
85111

86-
def test_downloader_max_possible_member_number(simple_downloader_object):
87-
assert simple_downloader_object.max_ensemble_members == 1
88112

113+
def test_downloader_max_possible_member_number(cmip6_downloader_object):
114+
assert cmip6_downloader_object.config.max_ensemble_members == 10
89115

90-
def test_downloader_variables(simple_downloader_object):
91-
assert simple_downloader_object.raw_vars == [
116+
117+
def test_downloader_variables(input4mips_downloader_object, cmip6_downloader_object):
118+
assert cmip6_downloader_object.config.variables == ["tas"]
119+
assert input4mips_downloader_object.config.variables == [
92120
"CO2_em_anthro",
93121
"CO2_em_AIR_anthro",
94122
"CH4_em_openburning",
95123
"CH4_em_anthro",
96124
"CH4_em_AIR_anthro",
97125
]
98-
assert simple_downloader_object.biomass_vars == ["CO2", "CH4"]
99-
assert simple_downloader_object.model_vars == ["tas"]
100-
assert simple_downloader_object.meta_vars_percentage == [
126+
assert input4mips_downloader_object.config.biomass_vars == ["CO2", "CH4"]
127+
assert input4mips_downloader_object.config.meta_vars_percentage == [
101128
"CH4_percentage_AGRI",
102129
"CH4_percentage_BORF",
103130
"CH4_percentage_DEFO",
104131
"CH4_percentage_PEAT",
105132
"CH4_percentage_SAVA",
106133
"CH4_percentage_TEMF",
107134
]
108-
assert simple_downloader_object.meta_vars_share == ["CH4_openburning_share"]
135+
assert input4mips_downloader_object.config.meta_vars_share == ["CH4_openburning_share"]
109136

110137

111-
def test_downloader_model_params(simple_downloader_object):
112-
assert simple_downloader_object.model_node_link == "https://esgf-data.dkrz.de/esg-search"
113-
assert simple_downloader_object.model_source_center == "NCC"
138+
def test_downloader_model_params(cmip6_downloader_object):
139+
assert cmip6_downloader_object.config.node_link == "http://esgf-node.llnl.gov/esg-search/"
114140

115141

116-
def test_download_raw_input(simple_downloader_object, mock_raw_input_single_var, mock_meta_historic_single_var):
117-
simple_downloader_object.download_raw_input()
142+
def test_download_raw_input(input4mips_downloader_object, mock_raw_input_single_var, mock_meta_historic_single_var):
143+
input4mips_downloader_object.download()
118144
assert mock_raw_input_single_var.call_args_list == EXPECTED_MINIMAL_RAW_INPUT_CALLS
119145
assert mock_raw_input_single_var.call_count == 8
120146
assert mock_meta_historic_single_var.call_args_list == EXPECTED_MINIMAL_META_HISTORIC_CALLS
121147
assert mock_meta_historic_single_var.call_count == 6
122148

123149

124-
def test_download_from_model(simple_downloader_object, mock_model_single_var):
125-
simple_downloader_object.download_from_model()
150+
def test_download_from_model(cmip6_downloader_object, mock_model_single_var):
151+
cmip6_downloader_object.download()
126152
assert mock_model_single_var.call_args_list == EXPECTED_MINIMAL_MODEL_CALLS
127153
assert mock_model_single_var.call_count == 2
128154

129155

130156
def test_download_from_config_file(
131-
simple_downloader_object, mock_raw_input_single_var, mock_meta_historic_single_var, mock_model_single_var
157+
input4mips_downloader_object, mock_raw_input_single_var, mock_meta_historic_single_var, mock_model_single_var
132158
):
133-
download_from_config_file(config=MINIMAL_DATASET_CONFIG_PATH)
159+
download_from_config_file(config_file=MINIMAL_DATASET_CONFIG_PATH)
134160

135161
assert mock_raw_input_single_var.call_args_list == EXPECTED_MINIMAL_RAW_INPUT_CALLS
136162
assert mock_raw_input_single_var.call_count == 8
@@ -153,26 +179,25 @@ def _assert_content_is_in_wget_script(mock_call, string_content):
153179
assert string_content in wget_script_content
154180

155181

156-
def test_download_raw_input_single_var(simple_downloader_object, mock_subprocess_run):
182+
def test_download_raw_input_single_var(input4mips_downloader_object, mock_subprocess_run):
157183
download_subprocess = mock_subprocess_run
158-
simple_downloader_object.download_raw_input_single_var(variable="CO2_em_anthro", institution_id="PNNL-JGCRI")
184+
input4mips_downloader_object.download_raw_input_single_var(variable="CO2_em_anthro", institution_id="PNNL-JGCRI")
159185

160186
expected_files = [
161-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_175001-179912.nc",
162-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_180001-184912.nc",
163-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_185001-185012.nc",
164-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_185101-189912.nc",
165-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_190001-194912.nc",
166-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_195001-199912.nc",
167-
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-2017-05-18_gn_200001-201412.nc",
187+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_175001-179912.nc",
188+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_180001-184912.nc",
189+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_185001-189912.nc",
190+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_190001-194912.nc",
191+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_195001-199912.nc",
192+
"CO2-em-anthro_input4MIPs_emissions_CMIP_CEDS-CMIP-2024-11-25_gn_200001-202212.nc",
168193
]
169194
download_subprocess.assert_called_once()
170195
for f in expected_files:
171196
_assert_content_is_in_wget_script(download_subprocess, f)
172197

173198

174-
def test_download_meta_historic_biomassburning_single_var(simple_downloader_object, mock_subprocess_run):
175-
simple_downloader_object.download_meta_historic_biomassburning_single_var(
199+
def test_download_meta_historic_biomassburning_single_var(input4mips_downloader_object, mock_subprocess_run):
200+
input4mips_downloader_object.download_meta_historic_biomassburning_single_var(
176201
variable="CH4_percentage_AGRI", institution_id="VUA"
177202
)
178203

@@ -184,8 +209,8 @@ def test_download_meta_historic_biomassburning_single_var(simple_downloader_obje
184209
_assert_content_is_in_wget_script(mock_call=mock_subprocess_run, string_content=f)
185210

186211

187-
def test_download_from_model_single_var(simple_downloader_object, mock_subprocess_run):
188-
simple_downloader_object.download_from_model_single_var(variable="tas", experiment="ssp126")
212+
def test_download_from_model_single_var(cmip6_downloader_object, mock_subprocess_run):
213+
cmip6_downloader_object.download_from_model_single_var(variable="tas", experiment="ssp126")
189214

190215
expected_files = [
191216
"tas_Amon_NorESM2-LM_ssp126_r1i1p1f1_gn_201501-202012.nc",
@@ -198,6 +223,6 @@ def test_download_from_model_single_var(simple_downloader_object, mock_subproces
198223
"tas_Amon_NorESM2-LM_ssp126_r1i1p1f1_gn_208101-209012.nc",
199224
"tas_Amon_NorESM2-LM_ssp126_r1i1p1f1_gn_209101-210012.nc",
200225
]
201-
mock_subprocess_run.assert_called_once()
226+
mock_subprocess_run.assert_called()
202227
for f in expected_files:
203228
_assert_content_is_in_wget_script(mock_call=mock_subprocess_run, string_content=f)

0 commit comments

Comments
 (0)