def _get_internal(self, api_key_str, latitude_str, longitude_str): request = ApiRequest(api_key_str, latitude_str, longitude_str) validation_result = request.validate() if validation_result != returncode.OK: self._return_error(validation_result, "Invalid Request Parameters") return try: data_request = self.builder.build(request) except ValueError as err: self._return_error(returncode.ERROR_BUILDING_REQUEST, str(err)) return if not self.validator.is_valid(api_key_str): self._return_error(returncode.INVALID_API_KEY, "Invalid Api Key") return try: data_response = self.retriever.retrieve(data_request) except TransmissionError as err: self._return_error(returncode.EXTERNAL_API_ERROR, str(err)) return self._read_data_response_data(data_response) self._return_code = returncode.OK
def test_creates_data_request(self): request = ApiRequest("123", "80.12", "-110.30") data_request = self.builder.build(request) self.assertEquals(80.12, data_request.latitude) self.assertEquals(-110.3, data_request.longitude)
def test_creation(self): request = ApiRequest("api key", "234.30", "34.99") self.assertIsNotNone(request) self.assertEquals("api key", request.api_key) self.assertEquals("234.30", request.latitude_str) self.assertEquals("34.99", request.longitude_str)
def test_invalid_longitude(self): invalid_coordinates = [ None, "", "a", "2" * 101, "-2", "-90.211", "99.0", "3.99.99", "-6.9", "-201.00" ] for longitude in invalid_coordinates: self._error_code_should_be(returncode.PARAM_LONG_ERROR, ApiRequest("abc", "4.99", longitude))
def test_returns_invalid_request_validation_error_code_for_longitude(self): expected_returncode = str(ApiRequest("API", "50.00", "23").validate()) controller = DataRetrieverController(None, None, None) response = controller.get("API", "50.00", "23") self.assertEquals(expected_returncode, response.result) self.assertEquals("Invalid Request Parameters", response.errormsg) self._verify_no_data(response)
def test_str(self): request = ApiRequest("api key", "90.30", "4.99") actual_str = str(request) self.assertTrue(request.__class__.__name__ in actual_str) self.assertTrue("api_key='api key'" in actual_str) self.assertTrue("latitude_str='90.30'" in actual_str) self.assertTrue("longitude_str='4.99'" in actual_str)
def test_valid_request(self): l_requests = [ ApiRequest("abc", "90.30", "4.99"), ApiRequest("abc", "90.30", "184.99"), ApiRequest("a" * 100, "90.30", "184.99"), ApiRequest("123", "-90.30", "184.99"), ApiRequest("a", "-90.30", "-184.99"), ApiRequest("aAb4Rf", "-0.30", "1.99") ] for request in l_requests: self._should_be_valid(request)
def test_raises_value_error_for_invalid_request(self): request = ApiRequest(None, None, None) with self.assertRaises(ValueError): self.builder.build(request)
def test_invalid_api_key(self): invalid_keys = [None, "", "a" * 101, "-", "#$%#$%@"] for api_key in invalid_keys: self._error_code_should_be(returncode.PARAM_KEY_ERROR, ApiRequest(api_key, "90.30", "4.99"))