45 lines
1.5 KiB
PHP
45 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Weerscherm\Tests;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use Weerscherm\OpenMeteoClient;
|
|
use Weerscherm\UpstreamException;
|
|
|
|
final class OpenMeteoClientTest extends TestCase
|
|
{
|
|
public function testRequestsSixDaysWithAllDailyVariables(): void
|
|
{
|
|
$http = new FakeHttp();
|
|
$http->queue(200, json_decode((string) file_get_contents(__DIR__ . '/fixtures/forecast.json'), true));
|
|
|
|
$daily = (new OpenMeteoClient($http))->dailyForecast(51.82, 6.55, 'Europe/Berlin');
|
|
|
|
self::assertCount(6, $daily['time']);
|
|
self::assertSame('https://api.open-meteo.com/v1/forecast', $http->requests[0]['url']);
|
|
self::assertSame([
|
|
'latitude' => 51.82,
|
|
'longitude' => 6.55,
|
|
'daily' => 'weather_code,temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max',
|
|
'timezone' => 'Europe/Berlin',
|
|
'forecast_days' => 6,
|
|
], $http->requests[0]['params']);
|
|
}
|
|
|
|
public function testErrorStatusIsUpstreamException(): void
|
|
{
|
|
$http = (new FakeHttp())->queue(429, ['reason' => 'rate limit']);
|
|
$this->expectException(UpstreamException::class);
|
|
(new OpenMeteoClient($http))->dailyForecast(1, 2, 'UTC');
|
|
}
|
|
|
|
public function testMissingDailyIsUpstreamException(): void
|
|
{
|
|
$http = (new FakeHttp())->queue(200, ['hourly' => []]);
|
|
$this->expectException(UpstreamException::class);
|
|
(new OpenMeteoClient($http))->dailyForecast(1, 2, 'UTC');
|
|
}
|
|
}
|