client = $this->prophesize(Client::class); $this->ipResolver = new IpApiLocationResolver($this->client->reveal()); } /** * @test */ public function correctIpReturnsDecodedInfo() { $actual = [ 'countryCode' => 'bar', 'lat' => 5, 'lon' => 10, ]; $expected = [ 'country_code' => 'bar', 'country_name' => '', 'region_name' => '', 'city' => '', 'latitude' => 5, 'longitude' => 10, 'time_zone' => '', ]; $response = new Response(); $response->getBody()->write(\json_encode($actual)); $response->getBody()->rewind(); $this->client->get('http://ip-api.com/json/1.2.3.4')->willReturn($response) ->shouldBeCalledTimes(1); $this->assertEquals($expected, $this->ipResolver->resolveIpLocation('1.2.3.4')); } /** * @test * @expectedException \Shlinkio\Shlink\Common\Exception\WrongIpException */ public function guzzleExceptionThrowsShlinkException() { $this->client->get('http://ip-api.com/json/1.2.3.4')->willThrow(new TransferException()) ->shouldBeCalledTimes(1); $this->ipResolver->resolveIpLocation('1.2.3.4'); } /** * @test */ public function getApiIntervalReturnsExpectedValue() { $this->assertEquals(65, $this->ipResolver->getApiInterval()); } /** * @test */ public function getApiLimitReturnsExpectedValue() { $this->assertEquals(145, $this->ipResolver->getApiLimit()); } }