1+ <?php
2+
3+ namespace ProgrammatorDev \OpenWeatherMap \Test \Integration ;
4+
5+ use Nyholm \Psr7 \Response ;
6+ use PHPUnit \Framework \Attributes \DataProvider ;
7+ use ProgrammatorDev \Api \Method ;
8+ use ProgrammatorDev \OpenWeatherMap \Exception \BadRequestException ;
9+ use ProgrammatorDev \OpenWeatherMap \Exception \NotFoundException ;
10+ use ProgrammatorDev \OpenWeatherMap \Exception \TooManyRequestsException ;
11+ use ProgrammatorDev \OpenWeatherMap \Exception \UnauthorizedException ;
12+ use ProgrammatorDev \OpenWeatherMap \Exception \UnexpectedErrorException ;
13+ use ProgrammatorDev \OpenWeatherMap \Resource \Resource ;
14+ use ProgrammatorDev \OpenWeatherMap \Test \AbstractTest ;
15+ use ProgrammatorDev \OpenWeatherMap \Test \MockResponse ;
16+
17+ class ResourceTest extends AbstractTest
18+ {
19+ private Resource $ resource ;
20+
21+ protected function setUp (): void
22+ {
23+ parent ::setUp ();
24+
25+ $ this ->resource = new class ($ this ->api ) extends Resource {
26+ public function request (): void
27+ {
28+ $ this ->api ->request (
29+ method: Method::GET ,
30+ path: '/test '
31+ );
32+ }
33+ };
34+ }
35+
36+ #[DataProvider(methodName: 'provideApiErrorData ' )]
37+ public function testApiError (int $ statusCode , string $ exception ): void
38+ {
39+ $ this ->mockClient ->addResponse (new Response (
40+ status: $ statusCode ,
41+ body: MockResponse::API_ERROR
42+ ));
43+
44+ $ this ->expectException ($ exception );
45+ $ this ->resource ->request ();
46+ }
47+
48+ public static function provideApiErrorData (): \Generator
49+ {
50+ yield 'bad request ' => [400 , BadRequestException::class];
51+ yield 'unauthorized ' => [401 , UnauthorizedException::class];
52+ yield 'not found ' => [404 , NotFoundException::class];
53+ yield 'too many requests ' => [429 , TooManyRequestsException::class];
54+ yield 'unexpected error ' => [500 , UnexpectedErrorException::class];
55+ }
56+ }
0 commit comments