diff --git a/src/Service/Geocoder.php b/src/Service/Geocoder.php index fe422ac..6ba10e0 100644 --- a/src/Service/Geocoder.php +++ b/src/Service/Geocoder.php @@ -15,17 +15,20 @@ class Geocoder public function __construct(private HttpClientInterface $client) {} /** - * Convert a postcode into latitude and longitude + * Convert a postcode into latitude and longitude. Returns null if conversion failed. * * @param string $postcode - * @return LatLongModel + * @return null|LatLongModel */ - public function geocodePostcode(string $postcode): LatLongModel + public function geocodePostcode(string $postcode): ?LatLongModel { $client = $this->createClient(); $response = $this->makeApiRequest($client, $postcode); $data = $this->getDataFromResponse($response); - $this->throwIfDataIsEmpty($data); + + if (empty($data)) { + return null; + } return $this->createLatLongModel($data); } @@ -56,12 +59,6 @@ class Geocoder return $response->toArray(false); } - private function throwIfDataIsEmpty(array $data): void - { - if (empty($data)) - throw new \Exception("No data was received from API response! Were the arguments valid?"); - } - private function createLatLongModel(array $data): LatLongModel { $lat = $this->getLatitudeFromData($data); diff --git a/tests/Service/GeocodeTest.php b/tests/Service/GeocodeTest.php index bcb6cae..4662f23 100644 --- a/tests/Service/GeocodeTest.php +++ b/tests/Service/GeocodeTest.php @@ -33,11 +33,10 @@ class GeocodeTest extends KernelTestCase $this->assertInstanceOf(Geocoder::class, $this->geocoder); } - public function testGeocodePostcodeThrowsOnInvalidInput(): void + public function testGeocodePostcodeReturnsNullOnInvalidInput(): void { sleep(1); - $this->expectException(\Exception::class); - $this->geocoder->geocodePostcode('aaaaaaaa'); + $this->assertNull($this->geocoder->geocodePostcode('')); } public function testGeocodePostcodeReturnsLatLonModel(): void