import pytest import os from os import path import netCDF4 from tests.TestUtils import TestUtils from netCDF4 import Dataset from SDToolBox import main as main from SDToolBox.extract_data_era5 import ExtractDataEra5 from SDToolBox import data_acquisition from SDToolBox import outputmessages as om class Test_subset_waves: @pytest.mark.systemtest def test_given_waves_folder_then_subset_collection_is_extracted(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.input_variables = ['swh'] input_data.coord_list = [(4.2, 2.4), ] # 2. When extract_data = ExtractDataEra5(input_data) output_data = extract_data.subset_waves(dir_test_data, 1981, 1982) # 3. Then assert output_data is not None data_dict = output_data.get_data_dict() assert data_dict is not None assert data_dict[output_data.var_time_key] is not None assert data_dict[output_data.var_lon_key] is not None assert data_dict[output_data.var_lat_key] is not None assert data_dict[output_data.var_val_key] is not None assert data_dict[output_data.var_val_key]['swh'] is not None @pytest.mark.systemtest def test_given_waves_folder_then_subset_collection_is_extracted_with_coord_list(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.input_variables = ['swh'] input_data.coord_list = [(4.2, 2.4), (42, 2.4), (42, 24), (4.2, 24)] # 2. When extract_data = ExtractDataEra5(input_data) dataset_list = extract_data.subset_waves(dir_test_data, 1981, 1982) # 3. Then assert dataset_list is not None """ Checks that the longitude is normalized if a value higher than 180 is passed """ @pytest.mark.unittest def test_given_longitude_higher_than_180_returns_normalized_longitude(self): # setup longitude = 400 normalized_longitude = longitude - 180 dir_test_data = 'P:\\metocean-data\\open\\ERA5\\data\\Global\\Hs' filename = 'era5_Global_Hs_1980.nc' path = dir_test_data + filename with Dataset(path, 'r', format='netCDF4') as case_dataset: input_data = data_acquisition.InputData() input_data.coord_list = [(4.2, 2.4)] extract_data = ExtractDataEra5(input_data) # call result = extract_data.check_for_longitude(longitude) # assert assert result == normalized_longitude """ Checks that the longitude is unchanged if a value lower than 180 is passed """ @pytest.mark.unittest def test_given_longitude_lower_than_180_returns_normalized_unchanged(self): longitude = 30 dir_test_data = 'P:\\metocean-data\\open\\ERA5\\data\\Global\\Hs' filename = 'era5_Global_Hs_1980.nc' path = dir_test_data + filename with Dataset(path, 'r', format='netCDF4') as case_dataset: input_data = data_acquisition.InputData() input_data.input_variables = ['swh'] input_data.coord_list = [(4.2, 2.4)] extractwaves = ExtractDataEra5(input_data) # call result = extractwaves.check_for_longitude(longitude) # assert assert result == 30 """ Checks that array of years if correctly generated """ @pytest.mark.unittest def test_years_array_is_correctly_generated(self): # setup year1 = 1980 yearN = 1983 result_array = [1980, 1981, 1982, 1983] result = [] dir_test_data = 'P:\\metocean-data\\open\\ERA5\\data\\Global\\Hs' filename = 'era5_Global_Hs_1980.nc' path = dir_test_data + filename with Dataset(path, 'r', format='netCDF4') as case_dataset: input_data = data_acquisition.InputData() input_data.input_variables = ['swh'] input_data.coord_list = [(4.2, 2.4)] extractwaves = ExtractDataEra5(input_data) # call result = extractwaves.generate_years_array(year1, yearN) # assert assert result[0] == result_array[0] assert result[1] == result_array[1] assert result[2] == result_array[2] assert result[3] == result_array[3]