44
55namespace Keboola \GoogleAnalyticsExtractor \GoogleAnalytics ;
66
7+ use GuzzleHttp \Exception \ClientException ;
78use Keboola \Google \ClientBundle \Google \RestApi ;
8- use Keboola \ GoogleAnalyticsExtractor \ Configuration \ Config ;
9- use Keboola \ GoogleAnalyticsExtractor \ Configuration \ ConfigDefinition ;
9+ use Monolog \ Handler \ TestHandler ;
10+ use Monolog \ Logger ;
1011use PHPUnit \Framework \Assert ;
1112use PHPUnit \Framework \TestCase ;
1213use Psr \Log \NullLogger ;
@@ -16,14 +17,22 @@ class ClientTest extends TestCase
1617 /** @var Client */
1718 protected $ client ;
1819
20+ /** @var \Monolog\Logger */
21+ private Logger $ logger ;
22+
1923 public function setUp (): void
2024 {
25+ $ testHandler = new TestHandler ();
26+ $ this ->logger = new Logger ('Google Analytics API tests ' );
27+ $ this ->logger ->pushHandler ($ testHandler );
28+
2129 $ this ->client = new Client (
2230 new RestApi (
2331 (string ) getenv ('CLIENT_ID ' ),
2432 (string ) getenv ('CLIENT_SECRET ' ),
2533 (string ) getenv ('ACCESS_TOKEN ' ),
26- (string ) getenv ('REFRESH_TOKEN ' )
34+ (string ) getenv ('REFRESH_TOKEN ' ),
35+ $ this ->logger ,
2736 ),
2837 new NullLogger (),
2938 []
@@ -89,4 +98,47 @@ public function testGetBatch(): void
8998 Assert::assertNotEmpty ($ reports [1 ]['data ' ]);
9099 Assert::assertEquals ('sessions ' , $ reports [1 ]['query ' ]['name ' ]);
91100 }
101+
102+ public function testRetryOnUnknownMetric (): void
103+ {
104+ $ query = [
105+ 'name ' => 'sessions ' ,
106+ 'endpoint ' => Client::REPORTS_URL ,
107+ 'query ' => [
108+ 'viewId ' => getenv ('VIEW_ID ' ),
109+ 'metrics ' => [
110+ ['expression ' => 'ga:metric2 ' ],
111+ ['expression ' => 'ga:metric1 ' ],
112+ ['expression ' => 'ga:goal11Completions ' ],
113+ ],
114+ 'dimensions ' => [
115+ ['name ' => 'ga:date ' ],
116+ ['name ' => 'ga:source ' ],
117+ ['name ' => 'ga:country ' ],
118+ ['name ' => 'ga:pagePath ' ],
119+ ],
120+ 'dateRanges ' => [[
121+ 'startDate ' => date ('Y-m-d ' , strtotime ('-12 months ' )),
122+ 'endDate ' => date ('Y-m-d ' , strtotime ('now ' )),
123+ ]],
124+ ],
125+ ];
126+
127+ try {
128+ $ this ->client ->getBatch ($ query );
129+ } catch (ClientException $ e ) {
130+ $ this ->assertStringContainsString ('400 Bad Request ' , $ e ->getMessage ());
131+ }
132+
133+ /** @var TestHandler $testHandler */
134+ $ testHandler = $ this ->logger ->getHandlers ()[0 ];
135+ for ($ i = 1 ; $ i <= 6 ; $ i ++) {
136+ /** @var \Monolog\LogRecord $record */
137+ $ record = $ testHandler ->getRecords ()[$ i ];
138+ $ this ->assertEquals (
139+ sprintf ('Retrying request (%dx) - reason: Bad Request ' , $ i ),
140+ $ record ['message ' ]
141+ );
142+ }
143+ }
92144}
0 commit comments