getMockBuilder(Provider::class) ->disableOriginalConstructor() ->getMock(); $nominatimGeocoder->method('geocodeQuery') ->willThrowException(new InvalidServerResponse()); $geoProvider = new GeoProvider($nominatimGeocoder, new NominatimToAddressAdapter()); $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Unable to get geoloc'); $geoProvider->getAddressCollection('foo', 1); } public function testEmptyCollectionSuccess(): void { $nominatimGeocoder = $this->getMockBuilder(Provider::class) ->disableOriginalConstructor() ->getMock(); $nominatimGeocoder->method('geocodeQuery') ->willReturn(new AddressCollection()); $geoProvider = new GeoProvider($nominatimGeocoder, new NominatimToAddressAdapter()); self::assertNull($geoProvider->getAddress('foo')); } public function testGetAddressSuccess(): void { $nominatimAddress = new NominatimAddress( providedBy: 'mock', adminLevels: new AdminLevelCollection(), coordinates: new Coordinates(50.63, 3.01), locality: 'Lille', ); $nominatimAddress = $nominatimAddress ->withOSMId(6576374058) ->withOSMType('node'); $addressCollection = new AddressCollection([$nominatimAddress]); $nominatimGeocoder = $this->getMockBuilder(Provider::class) ->disableOriginalConstructor() ->getMock(); $nominatimGeocoder->method('geocodeQuery') ->willReturn($addressCollection); $geoProvider = new GeoProvider($nominatimGeocoder, new NominatimToAddressAdapter()); self::assertNotNull($geoProvider->getAddress('Lille')); } }