AdSenseTest.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <?php
  2. /*
  3. * Copyright 2012 Google Inc.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. class AdSenseManagementTest extends BaseTest
  18. {
  19. public $adsense;
  20. public function __construct()
  21. {
  22. parent::__construct();
  23. $this->adsense = new Google_Service_AdSense($this->getClient());
  24. }
  25. public function testAccountsList()
  26. {
  27. if (!$this->checkToken()) {
  28. return;
  29. }
  30. $accounts = $this->adsense->accounts->listAccounts();
  31. $this->assertArrayHasKey('kind', $accounts);
  32. $this->assertEquals($accounts['kind'], 'adsense#accounts');
  33. $account = $this->getRandomElementFromArray($accounts['items']);
  34. $this->checkAccountElement($account);
  35. }
  36. /**
  37. * @depends testAccountsList
  38. */
  39. public function testAccountsGet()
  40. {
  41. $accounts = $this->adsense->accounts->listAccounts();
  42. $account = $this->getRandomElementFromArray($accounts['items']);
  43. $retrievedAccount = $this->adsense->accounts->get($account['id']);
  44. $this->checkAccountElement($retrievedAccount);
  45. }
  46. /**
  47. * @depends testAccountsList
  48. */
  49. public function testAccountsReportGenerate()
  50. {
  51. $startDate = '2011-01-01';
  52. $endDate = '2011-01-31';
  53. $optParams = $this->getReportOptParams();
  54. $accounts = $this->adsense->accounts->listAccounts();
  55. $accountId = $accounts['items'][0]['id'];
  56. $report = $this->adsense->accounts_reports->generate(
  57. $accountId,
  58. $startDate,
  59. $endDate,
  60. $optParams
  61. );
  62. $this->checkReport($report);
  63. }
  64. /**
  65. * @depends testAccountsList
  66. */
  67. public function testAccountsAdClientsList()
  68. {
  69. $accounts = $this->adsense->accounts->listAccounts();
  70. $account = $this->getRandomElementFromArray($accounts['items']);
  71. $adClients =
  72. $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  73. $this->checkAdClientsCollection($adClients);
  74. }
  75. /**
  76. * @depends testAccountsList
  77. * @depends testAccountsAdClientsList
  78. */
  79. public function testAccountsAdUnitsList()
  80. {
  81. $accounts = $this->adsense->accounts->listAccounts();
  82. foreach ($accounts['items'] as $account) {
  83. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  84. foreach ($adClients['items'] as $adClient) {
  85. $adUnits = $this->adsense->accounts_adunits->listAccountsAdunits(
  86. $account['id'],
  87. $adClient['id']
  88. );
  89. $this->checkAdUnitsCollection($adUnits);
  90. break 2;
  91. }
  92. }
  93. }
  94. /**
  95. * @depends testAccountsList
  96. * @depends testAccountsAdClientsList
  97. */
  98. public function testAccountsAdUnitsGet()
  99. {
  100. $accounts = $this->adsense->accounts->listAccounts();
  101. foreach ($accounts['items'] as $account) {
  102. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  103. foreach ($adClients['items'] as $adClient) {
  104. $adUnits = $this->adsense->accounts_adunits->listAccountsAdunits(
  105. $account['id'],
  106. $adClient['id']
  107. );
  108. if (array_key_exists('items', $adUnits)) {
  109. $adUnit = $this->getRandomElementFromArray($adUnits['items']);
  110. $this->checkAdUnitElement($adUnit);
  111. break 2;
  112. }
  113. }
  114. }
  115. }
  116. /**
  117. * @depends testAccountsList
  118. * @depends testAccountsAdClientsList
  119. */
  120. public function testAccountsCustomChannelsList()
  121. {
  122. $accounts = $this->adsense->accounts->listAccounts();
  123. foreach ($accounts['items'] as $account) {
  124. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  125. foreach ($adClients['items'] as $adClient) {
  126. $customChannels = $this->adsense->accounts_customchannels
  127. ->listAccountsCustomchannels($account['id'], $adClient['id']);
  128. $this->checkCustomChannelsCollection($customChannels);
  129. break 2;
  130. }
  131. }
  132. }
  133. /**
  134. * @depends testAccountsList
  135. * @depends testAccountsAdClientsList
  136. */
  137. public function testAccountsCustomChannelsGet()
  138. {
  139. $accounts = $this->adsense->accounts->listAccounts();
  140. foreach ($accounts['items'] as $account) {
  141. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  142. foreach ($adClients['items'] as $adClient) {
  143. $customChannels =
  144. $this->adsense->accounts_customchannels->listAccountsCustomchannels(
  145. $account['id'],
  146. $adClient['id']
  147. );
  148. if (array_key_exists('items', $customChannels)) {
  149. $customChannel =
  150. $this->getRandomElementFromArray($customChannels['items']);
  151. $this->checkCustomChannelElement($customChannel);
  152. break 2;
  153. }
  154. }
  155. }
  156. }
  157. /**
  158. * @depends testAccountsList
  159. * @depends testAccountsAdClientsList
  160. */
  161. public function testAccountsUrlChannelsList()
  162. {
  163. $accounts = $this->adsense->accounts->listAccounts();
  164. foreach ($accounts['items'] as $account) {
  165. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  166. foreach ($adClients['items'] as $adClient) {
  167. $urlChannels =
  168. $this->adsense->accounts_urlchannels->listAccountsUrlchannels(
  169. $account['id'],
  170. $adClient['id']
  171. );
  172. $this->checkUrlChannelsCollection($urlChannels);
  173. break 2;
  174. }
  175. }
  176. }
  177. /**
  178. * @depends testAccountsList
  179. * @depends testAccountsAdClientsList
  180. * @depends testAccountsAdUnitsList
  181. */
  182. public function testAccountsAdUnitsCustomChannelsList()
  183. {
  184. $accounts = $this->adsense->accounts->listAccounts();
  185. foreach ($accounts['items'] as $account) {
  186. $adClients = $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  187. foreach ($adClients['items'] as $adClient) {
  188. $adUnits =
  189. $this->adsense->accounts_adunits->listAccountsAdunits($account['id'], $adClient['id']);
  190. if (array_key_exists('items', $adUnits)) {
  191. foreach ($adUnits['items'] as $adUnit) {
  192. $customChannels =
  193. $this->adsense->accounts_adunits_customchannels->listAccountsAdunitsCustomchannels(
  194. $account['id'],
  195. $adClient['id'],
  196. $adUnit['id']
  197. );
  198. $this->checkCustomChannelsCollection($customChannels);
  199. // it's too expensive to go through each, if one is correct good
  200. break 3;
  201. }
  202. }
  203. }
  204. }
  205. }
  206. /**
  207. * @depends testAccountsList
  208. * @depends testAccountsAdClientsList
  209. * @depends testAccountsCustomChannelsList
  210. */
  211. public function testAccountsCustomChannelsAdUnitsList()
  212. {
  213. $accounts = $this->adsense->accounts->listAccounts();
  214. foreach ($accounts['items'] as $account) {
  215. $adClients =
  216. $this->adsense->accounts_adclients->listAccountsAdclients($account['id']);
  217. foreach ($adClients['items'] as $adClient) {
  218. $customChannels =
  219. $this->adsense->accounts_customchannels->listAccountsCustomchannels(
  220. $account['id'],
  221. $adClient['id']
  222. );
  223. if (array_key_exists('items', $customChannels)) {
  224. foreach ($customChannels['items'] as $customChannel) {
  225. $adUnits =
  226. $this->adsense->accounts_customchannels_adunits->listAccountsCustomchannelsAdunits(
  227. $account['id'],
  228. $adClient['id'],
  229. $customChannel['id']
  230. );
  231. $this->checkAdUnitsCollection($adUnits);
  232. // it's too expensive to go through each, if one is correct good
  233. break 3;
  234. }
  235. }
  236. }
  237. }
  238. }
  239. public function testAdClientsList()
  240. {
  241. if (!$this->checkToken()) {
  242. return;
  243. }
  244. $adClients = $this->adsense->adclients->listAdclients();
  245. $this->checkAdClientsCollection($adClients);
  246. }
  247. /**
  248. * @depends testAdClientsList
  249. */
  250. public function testAdUnitsList()
  251. {
  252. $adClients = $this->adsense->adclients->listAdclients();
  253. foreach ($adClients['items'] as $adClient) {
  254. $adUnits = $this->adsense->adunits->listAdunits($adClient['id']);
  255. $this->checkAdUnitsCollection($adUnits);
  256. }
  257. }
  258. /**
  259. * @depends testAdClientsList
  260. */
  261. public function testAdUnitsGet()
  262. {
  263. $adClients = $this->adsense->adclients->listAdclients();
  264. foreach ($adClients['items'] as $adClient) {
  265. $adUnits = $this->adsense->adunits->listAdunits($adClient['id']);
  266. if (array_key_exists('items', $adUnits)) {
  267. $adUnit = $this->getRandomElementFromArray($adUnits['items']);
  268. $this->checkAdUnitElement($adUnit);
  269. break 1;
  270. }
  271. }
  272. }
  273. /**
  274. * @depends testAdClientsList
  275. * @depends testAdUnitsList
  276. */
  277. public function testAdUnitsCustomChannelsList()
  278. {
  279. $adClients = $this->adsense->adclients->listAdclients();
  280. foreach ($adClients['items'] as $adClient) {
  281. $adUnits = $this->adsense->adunits->listAdunits($adClient['id']);
  282. if (array_key_exists('items', $adUnits)) {
  283. foreach ($adUnits['items'] as $adUnit) {
  284. $customChannels =
  285. $this->adsense->adunits_customchannels->listAdunitsCustomchannels(
  286. $adClient['id'],
  287. $adUnit['id']
  288. );
  289. $this->checkCustomChannelsCollection($customChannels);
  290. break 2;
  291. }
  292. }
  293. }
  294. }
  295. /**
  296. * @depends testAdClientsList
  297. */
  298. public function testCustomChannelsList()
  299. {
  300. $adClients = $this->adsense->adclients->listAdclients();
  301. foreach ($adClients['items'] as $adClient) {
  302. $customChannels =
  303. $this->adsense->customchannels->listCustomchannels($adClient['id']);
  304. $this->checkCustomChannelsCollection($customChannels);
  305. }
  306. }
  307. /**
  308. * @depends testAdClientsList
  309. */
  310. public function testCustomChannelsGet()
  311. {
  312. $adClients = $this->adsense->adclients->listAdclients();
  313. foreach ($adClients['items'] as $adClient) {
  314. $customChannels = $this->adsense->customchannels->listCustomchannels($adClient['id']);
  315. if (array_key_exists('items', $customChannels)) {
  316. $customChannel = $this->getRandomElementFromArray($customChannels['items']);
  317. $this->checkCustomChannelElement($customChannel);
  318. break 1;
  319. }
  320. }
  321. }
  322. /**
  323. * @depends testAdClientsList
  324. * @depends testCustomChannelsList
  325. */
  326. public function testCustomChannelsAdUnitsList()
  327. {
  328. $adClients = $this->adsense->adclients->listAdclients();
  329. foreach ($adClients['items'] as $adClient) {
  330. $customChannels = $this->adsense->customchannels->listCustomchannels($adClient['id']);
  331. if (array_key_exists('items', $customChannels)) {
  332. foreach ($customChannels['items'] as $customChannel) {
  333. $adUnits =
  334. $this->adsense->customchannels_adunits->listCustomchannelsAdunits(
  335. $adClient['id'],
  336. $customChannel['id']
  337. );
  338. $this->checkAdUnitsCollection($adUnits);
  339. break 2;
  340. }
  341. }
  342. }
  343. }
  344. /**
  345. * @depends testAdClientsList
  346. */
  347. public function testUrlChannelsList()
  348. {
  349. $adClients = $this->adsense->adclients->listAdclients();
  350. foreach ($adClients['items'] as $adClient) {
  351. $urlChannels = $this->adsense->urlchannels->listUrlchannels($adClient['id']);
  352. $this->checkUrlChannelsCollection($urlChannels);
  353. }
  354. }
  355. public function testReportsGenerate()
  356. {
  357. if (!$this->checkToken()) {
  358. return;
  359. }
  360. $startDate = '2011-01-01';
  361. $endDate = '2011-01-31';
  362. $optParams = $this->getReportOptParams();
  363. $report = $this->adsense->reports->generate($startDate, $endDate, $optParams);
  364. $this->checkReport($report);
  365. }
  366. private function checkAccountElement($account)
  367. {
  368. $this->assertArrayHasKey('kind', $account);
  369. $this->assertArrayHasKey('id', $account);
  370. $this->assertArrayHasKey('name', $account);
  371. }
  372. private function checkAdClientsCollection($adClients)
  373. {
  374. $this->assertArrayHasKey('kind', $adClients);
  375. $this->assertEquals($adClients['kind'], 'adsense#adClients');
  376. foreach ($adClients['items'] as $adClient) {
  377. $this->assertArrayHasKey('id', $adClient);
  378. $this->assertArrayHasKey('kind', $adClient);
  379. $this->assertArrayHasKey('productCode', $adClient);
  380. $this->assertArrayHasKey('supportsReporting', $adClient);
  381. }
  382. }
  383. private function checkAdUnitsCollection($adUnits)
  384. {
  385. $this->assertArrayHasKey('kind', $adUnits);
  386. $this->assertEquals($adUnits['kind'], 'adsense#adUnits');
  387. if (array_key_exists('items', $adUnits)) {
  388. foreach ($adUnits['items'] as $adUnit) {
  389. $this->checkAdUnitElement($adUnit);
  390. }
  391. }
  392. }
  393. private function checkAdUnitElement($adUnit)
  394. {
  395. $this->assertArrayHasKey('code', $adUnit);
  396. $this->assertArrayHasKey('id', $adUnit);
  397. $this->assertArrayHasKey('kind', $adUnit);
  398. $this->assertArrayHasKey('name', $adUnit);
  399. $this->assertArrayHasKey('status', $adUnit);
  400. }
  401. private function checkCustomChannelsCollection($customChannels)
  402. {
  403. $this->assertArrayHasKey('kind', $customChannels);
  404. $this->assertEquals($customChannels['kind'], 'adsense#customChannels');
  405. if (array_key_exists('items', $customChannels)) {
  406. foreach ($customChannels['items'] as $customChannel) {
  407. $this->checkCustomChannelElement($customChannel);
  408. }
  409. }
  410. }
  411. private function checkCustomChannelElement($customChannel)
  412. {
  413. $this->assertArrayHasKey('kind', $customChannel);
  414. $this->assertArrayHasKey('id', $customChannel);
  415. $this->assertArrayHasKey('code', $customChannel);
  416. $this->assertArrayHasKey('name', $customChannel);
  417. }
  418. private function checkUrlChannelsCollection($urlChannels)
  419. {
  420. $this->assertArrayHasKey('kind', $urlChannels);
  421. $this->assertEquals($urlChannels['kind'], 'adsense#urlChannels');
  422. if (array_key_exists('items', $urlChannels)) {
  423. foreach ($urlChannels['items'] as $urlChannel) {
  424. $this->assertArrayHasKey('kind', $urlChannel);
  425. $this->assertArrayHasKey('id', $urlChannel);
  426. $this->assertArrayHasKey('urlPattern', $urlChannel);
  427. }
  428. }
  429. }
  430. private function getReportOptParams()
  431. {
  432. return array(
  433. 'metric' => array('PAGE_VIEWS', 'AD_REQUESTS'),
  434. 'dimension' => array ('DATE', 'AD_CLIENT_ID'),
  435. 'sort' => array('DATE'),
  436. 'filter' => array('COUNTRY_NAME==United States'),
  437. );
  438. }
  439. private function checkReport($report)
  440. {
  441. $this->assertArrayHasKey('kind', $report);
  442. $this->assertEquals($report['kind'], 'adsense#report');
  443. $this->assertArrayHasKey('totalMatchedRows', $report);
  444. $this->assertGreaterThan(0, count($report->headers));
  445. foreach ($report['headers'] as $header) {
  446. $this->assertArrayHasKey('name', $header);
  447. $this->assertArrayHasKey('type', $header);
  448. }
  449. if (array_key_exists('items', $report)) {
  450. foreach ($report['items'] as $row) {
  451. $this->assertCount(4, $row);
  452. }
  453. }
  454. $this->assertArrayHasKey('totals', $report);
  455. $this->assertArrayHasKey('averages', $report);
  456. }
  457. private function getRandomElementFromArray($array)
  458. {
  459. $elementKey = array_rand($array);
  460. return $array[$elementKey];
  461. }
  462. }