/**
  * Test if we get pack right config if a default config was
  * set before. It should merge the config together, but the
  * config, which was set by the request will overwrite the default
  * config
  *
  */
 function testMergingWithDefaultConfig()
 {
     $request = $this->createRequestMockWithConfig(['level1' => ['level2' => ['level3' => null, 'other' => 'otherValue']]]);
     $default = array('type' => 'defaultType', 'level1' => array('level2' => array('level3' => 'notWorth', 'type' => 'defaultLevel2Type')));
     /**
      * both array should be merged together to this
      *
      * array(
      *   'type' => 'defaultType',
      *   'level1' => array(
      *     'level2' => array(
      *       'level3' => null,
      *       'type' => 'defaultLevel2Type',
      *       'other' => 'otherValue'
      *     )
      *   )
      * );
      *
      */
     $configParser = new ConfigParser();
     $configParser->parse($request);
     $configParser->setDefault($default);
     $this->assertEquals('defaultType', $configParser->get('type'));
     $this->assertArraySubset(array('level3' => null, 'other' => 'otherValue', 'type' => 'defaultLevel2Type'), $configParser->get('level1.level2'));
 }
 public function getPreviewResponse($resource, ConfigParser $config)
 {
     $service = $config->get('service');
     if ($service === null) {
         throw new PreviewException('You choose the strategy service, but you didn\'t pass any service to call. Please use the service parameter with "service_id:functionName" notation');
     }
     $parts = preg_split('#:#', $service);
     if (count($parts) !== 2) {
         throw new PreviewException(sprintf('The service parameter need a notation like "service_id:functionName" but you got "%s"', $service));
     }
     $serviceName = $parts[0];
     $invokeService = null;
     try {
         $invokeService = $this->container->get($serviceName);
     } catch (ServiceNotFoundException $e) {
         throw new PreviewException(sprintf('The service parameter in preview route should be an existing service, got "%s"', $serviceName));
     }
     $invokeFunction = $parts[1];
     if (!method_exists($invokeService, $invokeFunction)) {
         throw new PreviewException(sprintf('The defined function "%s " in service "%s" for preview route does not exists, check your service config "%s"', $invokeFunction, $serviceName, $service));
     }
     return call_user_func(array($invokeService, $invokeFunction), $resource);
 }
 /**
  * @param mixed $config
  */
 public function setConfig($config)
 {
     $this->config = $config;
     $this->config->setDefault($this->getDefaultConfig());
 }