public function testAppCRUD() { $developer = new Developer(self::$orgConfig); $mail = 'phpunit-' . $this->randomString() . '@example.com'; // Create a developer to test on $developer->blankValues(); $developer->setEmail($mail); $developer->setFirstName($this->randomString()); $developer->setLastName($this->randomString()); $developer->setUserName($this->randomString()); try { $developer->save(); } catch (\Exception $e) { $this->fail('Cannot save developer at create time: [' . $e->getCode() . '] ' . $e->getMessage()); } $apiproduct = new APIProduct(self::$orgConfig); $products = $apiproduct->listProducts(); shuffle($products); $product = array_shift($products); $new_product = array_shift($products); // Begin create $app = new DeveloperApp(self::$orgConfig, $mail); $app->setName('phpunit test'); $app->setAccessType('read'); $app->setCallbackUrl('http://example.com/'); $app->setApiProducts(array($product->getName())); $app->setAttribute('foo', 'bar'); try { $app->save(); } catch (\Exception $e) { $this->fail('Cannot save app at creation time'); } $this->assertNotEmpty($app->getConsumerKey()); $this->assertNotEmpty($app->getAppId()); $this->assertEquals('bar', $app->getAttribute('foo')); // End create // Begin load $app->blankValues(); try { $app->load('phpunit test'); } catch (\Exception $e) { $this->fail('Cannot load app.'); return; } $this->assertNotEmpty($app->getConsumerKey()); $this->assertEquals($app->getDeveloperId(), $developer->getDeveloperId()); // End load // Begin update $app->setAttribute('foo', 'baz'); try { $app->save(FALSE); } catch (\Exception $e) { $this->fail('Cannot save app at update time'); return; } $app->blankValues(); try { $app->load('phpunit test'); } catch (\Exception $e) { $this->fail('Cannot reload app after update'); return; } $this->assertEquals('baz', $app->getAttribute('foo')); // End update // Update key $key = $app->getConsumerKey(); $new_product_name = $new_product->getName(); $app->setApiProducts(array($new_product_name)); try { $app->save(); } catch (\Exception $e) { $this->fail('Cannot save app when updating API Products.'); } $api_products = $app->getApiProducts(); $cred_api_products = $app->getCredentialApiProducts(); if (count($api_products) != 1 || $api_products[0] != $new_product_name) { $this->fail('Failed to update API Products list'); } if (count($cred_api_products) != 1 || $cred_api_products[0]['apiproduct'] != $new_product_name) { $this->fail('Failed to update Credential API Products list'); } $this->assertEquals($key, $app->getConsumerKey(), 'Consumer Key changed when API Product changed.'); // End update key // Create key $key = $this->randomString(16); $secret = $this->randomString(16); try { $app->createKey($key, $secret); } catch (\Exception $e) { $this->fail('Cannot create key: ' . $e->getMessage()); return; } $app->blankValues(); $app->load('phpunit test'); $this->assertEquals($key, $app->getConsumerKey(), 'Consumer Key changed to our custom value.'); // End create key // Begin delete try { $app->delete(); } catch (\Exception $e) { $this->fail('Cannot delete app'); } $app->blankValues(); try { $app->load($mail); // If we succeed in the load, the developer was not deleted. $this->fail('App deletion failed.'); } catch (\Exception $e) { $this->assertEquals(404, $e->getCode()); } // End delete // Clean up try { $developer->delete(); } catch (\Exception $e) { } }
/** * Implements DrupalEntityControllerInterface::load(). * * @param array $names * @param array $conditions * @return array */ public function load($ids = array(), $conditions = array()) { $orgs = self::getOrgs($conditions); $disableLogging = isset($conditions['disableLogging']) && $conditions['disableLogging'] === TRUE; $list = array(); foreach ($orgs as $org) { $config = devconnect_default_org_config($org); if ($disableLogging) { $config->logger = new \Psr\Log\NullLogger(); $config->subscribers = array(); } if (array_key_exists('mail', $conditions)) { $identifier = $conditions['mail']; } elseif (array_key_exists('developerId', $conditions)) { $identifier = $conditions['developerId']; } else { $identifier = NULL; } if (isset($identifier) && empty($ids)) { $dev_app = new DeveloperApp($config, $identifier); if (variable_get('devconnect_paging_enabled', FALSE) && method_exists($dev_app, 'usePaging')) { $dev_app->usePaging(); } if (array_key_exists('name', $conditions)) { try { $dev_app->load($conditions['name']); $list += array($dev_app); } catch (ResponseException $e) { self::$lastException = $e; } } else { try { $list += $dev_app->getListDetail(); } catch (ResponseException $e) { self::$lastException = $e; } } } elseif (empty($ids)) { // Fetch all apps in the org. $dev_app = new DeveloperApp($config, ''); if (variable_get('devconnect_paging_enabled', FALSE) && method_exists($dev_app, 'usePaging')) { $dev_app->usePaging(); } try { $list += $dev_app->listAllApps(); $this->addListToCache($list, $ids); } catch (ResponseException $e) { self::$lastException = $e; } } else { $sub_list = array(); // We have a list of appIds. Fetch them now. foreach ($ids as $id) { if (isset($this->appCache[$id])) { $sub_list[$id] = $this->appCache[$id]; } } if (count($list) < count($ids)) { $remaining_ids = array_diff($ids, array_keys($list)); $dev_app = new DeveloperApp($config, ''); foreach ($remaining_ids as $id) { $app = clone $dev_app; try { $app->loadByAppId($id, TRUE); $sub_list[] = $app; } catch (ResponseException $e) { self::$lastException = $e; } catch (ParameterException $e) { self::$lastException = $e; } } } $list += array_values($sub_list); } } $this->addListToCache($list, $ids); $uids = array(); foreach ($list as $dev_app) { if ($dev_app instanceof Apigee\ManagementAPI\DeveloperApp) { $email = $dev_app->getDeveloperMail(); if (!array_key_exists($email, $uids)) { $uids[strtolower($email)] = NULL; } } } if (!empty($uids)) { $stmt = db_select('users', 'u'); $stmt->addExpression('LOWER(mail)', 'mail'); $uids = $stmt->fields('u', array('uid'))->condition('mail', array_keys($uids))->execute()->fetchAllKeyed(); } $uids = array_flip($uids); $app_entities = array(); $include_debug_data = count($list) == 1; foreach ($list as $dev_app) { if ($dev_app instanceof Apigee\ManagementAPI\DeveloperApp) { $id = $dev_app->getAppId(); $mail = strtolower($dev_app->getDeveloperMail()); $array = $dev_app->toArray($include_debug_data); $array['orgName'] = $dev_app->getConfig()->orgName; $array['uid'] = array_key_exists($mail, $uids) ? $uids[$mail] : NULL; $app_entity = new DeveloperAppEntity($array); $app_entity->checkStatusChange(); $app_entities[$id] = $app_entity; } } return $app_entities; }