public function setUp()
 {
     parent::setUp();
     if (!is_dir('build/test')) {
         mkdir('build/test', 0755, true);
     }
     file_put_contents('build/test/testgroup.json', Json::encode($this->builderConfig));
 }
 /**
  * @expectedException \OutOfBoundsException
  */
 public function testNestedCollectionNotFound()
 {
     $data = array('invalidProperty' => array(array('name' => 'value1')));
     $response = new \Guzzle\Http\Message\Response(200);
     $response->setBody(Json::encode($data));
     $mock = new \Guzzle\Plugin\Mock\MockPlugin();
     $mock->addResponse($response);
     $client = new Client('http://example.com');
     $client->addSubscriber($mock);
     $request = $client->get('/test');
     $collection = new DummyCollection($request);
     foreach ($collection as $element) {
         // We should never get here ...
     }
 }
 /**
  * @param string $group
  * @param boolean $overwrite
  *
  * @throws \Symfony\Component\Filesystem\Exception\IOException
  *
  * @see http://guzzlephp.org/webservice-client/using-the-service-builder.html#sourcing-from-a-json-document
  */
 public function saveServiceGroup($group, $overwrite = false)
 {
     $filename = $this->getConfigFilename($group);
     $hasConfigFile = $this->hasConfigFile($group);
     // This sucks, but it is the only way to get the builder config.
     // @todo Create a Guzzle issue to add a getBuilderConfig() method.
     $builder = $this[$group];
     $builderConfig = Json::decode($builder->serialize());
     // @todo Add validation.
     if (!$overwrite && $hasConfigFile) {
         $groupJson = file_get_contents($filename);
         $groupData = Json::decode($groupJson);
         $builderConfig = array_merge($groupData['services'], $builderConfig);
     }
     // Unset the services that are flagged to be removed then clear the
     // remove flag since action was taken.
     foreach ($this->removed[$group] as $name) {
         unset($builderConfig[$name]);
     }
     $this->removed[$group] = array();
     $json = Json::encode(array('class' => get_class($builder), 'services' => $builderConfig));
     $filesystem = $this->getFilesystem();
     if (!$hasConfigFile) {
         $filesystem->mkdir(dirname($filename), 0755);
     }
     $filesystem->dumpFile($filename, $json, 0600);
 }
 /**
  * Moves domains atomically from one environment to another.
  *
  * @param string $site
  *   The site.
  * @param string|array $domains
  *   The domain name(s) as an array of strings, or the string '*' to move all
  *   domains.
  * @param string $sourceEnv
  *   The environment which currently has this domain.
  * @param string $targetEnv
  *   The destination environment for the domain.
  * @param bool $skipSiteUpdate
  *   Optional. If set to TRUE this will inhibit running
  *   fields-config-web.php for this domain move.
  *
  * @return \Acquia\Cloud\Api\Response\Task
  *
  * @throws \Guzzle\Http\Exception\ClientErrorResponseException
  *
  * @see http://cloudapi.acquia.com/#POST__sites__site_domain_move__source__target-instance_route
  */
 public function moveDomain($site, $domains, $sourceEnv, $targetEnv, $skipSiteUpdate = FALSE)
 {
     $paths = '{+base_path}/sites/{site}/domain-move/{source}/{target}.json';
     $update_site = '';
     if ($skipSiteUpdate) {
         $update_site = '1';
         $paths .= '?skip_site_update={update_site}';
     }
     $variables = array('site' => $site, 'source' => $sourceEnv, 'target' => $targetEnv, 'update_site' => $update_site);
     $body = Json::encode(array('domains' => (array) $domains));
     $request = $this->post(array($paths, $variables), null, $body);
     return new Response\Task($request);
 }