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 import ExtractData from SDToolBox.data_acquisition import InputData import SDToolBox.outputmessages as om class Test_create: @pytest.mark.unittest def test_given_no_input_data_then_exception_is_risen(self): # 1. Given input_data = None output_result = None expected_error = om.error_no_valid_input_data # 2. When with pytest.raises(IOError) as e_info: output_result = ExtractData(input_data) # 3. Then error_message = str(e_info.value) assert output_result is None assert error_message == expected_error, '' + \ 'Expected exception message {},'.format(expected_error) + \ 'retrieved {}'.format(error_message) @pytest.mark.unittest def test_given_no_input_coords_then_exception_is_risen(self): # 1. Given input_data = InputData() input_data.input_coordinates = [] input_data.input_years = [2014] input_data.input_variables = ['var'] data_extractor = None expected_error = om.error_not_enough_coordinates # 2. When with pytest.raises(IOError) as e_info: data_extractor = ExtractData(input_data) # 3. Then error_message = str(e_info.value) assert data_extractor is None assert error_message == expected_error, '' + \ 'Expected exception message {},'.format(expected_error) + \ 'retrieved {}'.format(error_message) @pytest.mark.unittest def test_given_no_list_of_vars_then_exception_is_risen(self): # 1. Given input_data = InputData() input_data.input_coordinates = [(4.2, 42)] input_data.input_years = [2014] input_data.input_variables = None data_extractor = None expected_error = om.error_no_valid_list_of_vars # 2. When with pytest.raises(IOError) as e_info: data_extractor = ExtractData(input_data) # 3. Then error_message = str(e_info.value) assert data_extractor is None assert error_message == expected_error, '' + \ 'Expected exception message {},'.format(expected_error) + \ 'retrieved {}'.format(error_message) @pytest.mark.unittest def test_given_no_list_of_years_then_exception_is_risen(self): # 1. Given input_data = InputData() input_data.input_coordinates = [(4.2, 42)] input_data.input_variables = ['var'] input_data.input_years = None data_extractor = None expected_error = om.error_no_valid_list_of_years # 2. When with pytest.raises(IOError) as e_info: data_extractor = ExtractData(input_data) # 3. Then error_message = str(e_info.value) assert data_extractor is None assert error_message == expected_error, '' + \ 'Expected exception message {},'.format(expected_error) + \ 'retrieved {}'.format(error_message) @pytest.mark.unittest def test_given_valid_input_args_then_data_is_set(self): # 1. Given input_data = InputData() input_data.input_coordinates = [(42, 4.2)] input_data.input_variables = ['swh'] input_data.input_years = [1942] data_extractor = None expected_lon_list, expected_lat_list = \ zip(*input_data.input_coordinates) # 2. When try: data_extractor = ExtractData(input_data) except Exception as e_info: pytest.fail( 'Exception risen {}'.format(str(e_info)) + ' but not expected.') # 3. Then assert data_extractor is not None assert data_extractor._input_variables == input_data.input_variables assert data_extractor._input_years == input_data.input_years assert data_extractor._input_lon == expected_lon_list assert data_extractor._input_lat == expected_lat_list