import pytest import os from datetime import datetime, timedelta from netCDF4 import Dataset import numpy as np import random import string from tests.TestUtils import TestUtils from SDToolBox import extract_waves, data_acquisition from SDToolBox.data_acquisition import OutputData import SDToolBox.outputmessages as output_messages class Test_create: @pytest.mark.unittest def test_when_no_list_of_variables_given_then_exception_risen(self): output_result = None expected_error_message = \ output_messages.error_missing_list_of_variables with pytest.raises(IOError) as e_info: output_result = OutputData(None) error_message = str(e_info.value) assert output_result is None assert error_message == expected_error_message, \ 'Expected {}'.format(expected_error_message) + \ 'but got {}'.format(error_message) @pytest.mark.unittest def test_when_list_of_variables_given_then_sets_data_dict(self): # 1. Given. var_list = ['dum', 'my'] data_result = [] # 2. When try: output_data = OutputData(var_list) data_result = output_data.get_data_dict() except Exception as e_info: pytest.fail( 'Exception thrown but not expected. {}'.format(str(e_info))) # 3. Then assert data_result is not None assert data_result[output_data.var_time_key] is not None assert data_result[output_data.var_lon_key] is not None assert data_result[output_data.var_lat_key] is not None assert data_result[output_data.var_val_key] is not None variables_data = data_result[output_data.var_val_key] assert variables_data is not None assert set(variables_data.keys()) == set(var_list) class Test_generate_wave_netcdf: @pytest.mark.systemtest def test_when_given_wave_cases_generates_output(self): # 1. Given # When using local data you can just replace the comment in these lines # dir_test_data = TestUtils.get_local_test_data_dir('netCDF_Waves_data') dir_test_data = 'P:\\metocean-data\\open\\ERA5\\data\\Global' input_data = data_acquisition.InputData() input_data.coord_list = [(4.2, 2.4), ] # 2. When extract_wave = extract_waves.ExtractWaves(input_data) output_data = extract_wave.subset_era_5(dir_test_data, 1981, 1982) try: netcdf = output_data.generate_wave_netcdf( dir_path=dir_test_data, base_name='test_wave', dataset_code=None, file_format='CF' ) except Exception as e_info: pytest.fail( 'Exception thrown but not expected. {}'.format(str(e_info))) # 3. Then assert netcdf is not None