/**
  * {@inheritDoc}
  */
 public function execute($request)
 {
     /** @var $request ObtainTokenRequest */
     if (false == $this->supports($request)) {
         throw RequestNotSupportedException::createActionNotSupported($this, $request);
     }
     $model = ArrayObject::ensureArrayObject($request->getModel());
     if ($model['card']) {
         throw new LogicException('The token has already been set.');
     }
     $getHttpRequest = new GetRequestRequest();
     $this->payment->execute($getHttpRequest);
     if ($getHttpRequest->method == 'POST' && isset($getHttpRequest->request['stripeToken'])) {
         $model['card'] = $getHttpRequest->request['stripeToken'];
         return;
     }
     $this->payment->execute($renderTemplate = new RenderTemplateRequest($this->templateName, array('model' => $model, 'publishable_key' => $this->keys->getPublishableKey())));
     throw new ResponseInteractiveRequest($renderTemplate->getResult());
 }
 /**
  * @test
  */
 public function shouldAllowGetResultPreviouslySet()
 {
     $request = new RenderTemplateRequest('aTemplate', array());
     $request->setResult('theResult');
     $this->assertEquals('theResult', $request->getResult());
 }