Skip to content

Commit

Permalink
Refactor functional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
psrpinto committed Jan 27, 2017
1 parent 8ea0b3a commit 99579f2
Show file tree
Hide file tree
Showing 11 changed files with 184 additions and 138 deletions.
5 changes: 1 addition & 4 deletions Form/ChoosePaymentMethodType.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)

// To maintain BC, we instantiate a new ChoosePaymentMethodTransformer in
// case it hasn't been supplied.
$transformer = $this->transformer
? $this->transformer
: new ChoosePaymentMethodTransformer()
;
$transformer = $this->transformer ?: new ChoosePaymentMethodTransformer();

$transformer->setOptions($options);
$builder->addModelTransformer($transformer);
Expand Down
51 changes: 0 additions & 51 deletions Tests/Functional/BasePaymentWorkflowTest.php

This file was deleted.

52 changes: 52 additions & 0 deletions Tests/Functional/PaymentWorkflow/BasePaymentWorkflowTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

namespace JMS\Payment\CoreBundle\Tests\Functional\PaymentWorkflow;

use JMS\Payment\CoreBundle\Tests\Functional\BaseTestCase;
use JMS\Payment\CoreBundle\Tests\Functional\TestBundle\Entity\Order;

abstract class BasePaymentWorkflowTest extends BaseTestCase
{
protected function getRawExtendedData($order)
{
$em = self::$kernel->getContainer()->get('em');

$stmt = $em->getConnection()->prepare('
SELECT extended_data
FROM payment_instructions
WHERE id = '.$order->getPaymentInstruction()->getId()
);

$stmt->execute();
$result = $stmt->fetchAll();

return unserialize($result[0]['extended_data']);
}

protected function doRequest($order, $route)
{
$client = $this->createClient();
$this->importDatabaseSchema();

$em = self::$kernel->getContainer()->get('em');
$router = self::$kernel->getContainer()->get('router');

$em->persist($order);
$em->flush();

$crawler = $client->request('GET', $router->generate($route, array('id' => $order->getId())));
$form = $crawler->selectButton('submit_btn')->form();
$form['jms_choose_payment_method[method]']->select('paypal_express_checkout');
$client->submit($form);

return $client->getResponse();
}

protected function refreshOrder($order)
{
$em = self::$kernel->getContainer()->get('em');
$em->clear();

return $em->getRepository('TestBundle:Order')->find($order->getId());
}
}
43 changes: 43 additions & 0 deletions Tests/Functional/PaymentWorkflow/PaymentWorkflowMcryptTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace JMS\Payment\CoreBundle\Tests\Functional\PaymentWorkflow;

use JMS\Payment\CoreBundle\Tests\Functional\TestBundle\Entity\Order;
use JMS\Payment\CoreBundle\Util\Number;

class PaymentWorkflowMcryptTest extends PaymentWorkflowTest
{
protected static function createKernel(array $options = array())
{
return parent::createKernel(array('config' => 'config_mcrypt.yml'));
}

public function setUp()
{
if (version_compare(phpversion(), '7.1', '>=')) {
$this->markTestSkipped('mcrypt is deprecated since PHP 7.1');
}

parent::setUp();
}

/**
* @runInSeparateProcess
*/
public function testPayment()
{
$amount = 123.45;
$order = new Order($amount);

$response = parent::doRequest($order, 'payment');
$order = $this->refreshOrder($order);

$this->assertSame(201, $response->getStatusCode(), substr($response, 0, 2000));
$this->assertTrue(Number::compare($amount, $order->getPaymentInstruction()->getAmount(), '=='));
$this->assertEquals('bar', $order->getPaymentInstruction()->getExtendedData()->get('foo'));

$extendedData = $this->getRawExtendedData($order);
$this->assertArrayHasKey('foo', $extendedData);
$this->assertNotEquals('bar', $extendedData['foo'][0]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace JMS\Payment\CoreBundle\Tests\Functional\PaymentWorkflow;

use JMS\Payment\CoreBundle\Tests\Functional\TestBundle\Entity\Order;
use JMS\Payment\CoreBundle\Util\Number;

class PaymentWorkflowNoEncryptionTest extends BasePaymentWorkflowTest
{
/**
* Disable encryption globally.
*/
protected static function createKernel(array $options = array())
{
return parent::createKernel(array('config' => 'config_no_encryption.yml'));
}

/**
* @runInSeparateProcess
*/
public function testPayment()
{
$amount = 123.45;
$order = new Order($amount);

$response = parent::doRequest($order, 'payment');
$order = $this->refreshOrder($order);

$this->assertSame(201, $response->getStatusCode(), substr($response, 0, 2000));
$this->assertTrue(Number::compare($amount, $order->getPaymentInstruction()->getAmount(), '=='));
$this->assertEquals('bar', $order->getPaymentInstruction()->getExtendedData()->get('foo'));

$extendedData = $this->getRawExtendedData($order);
$this->assertArrayHasKey('foo', $extendedData);
$this->assertEquals('bar', $extendedData['foo'][0]);
}
}
29 changes: 29 additions & 0 deletions Tests/Functional/PaymentWorkflow/PaymentWorkflowTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace JMS\Payment\CoreBundle\Tests\Functional\PaymentWorkflow;

use JMS\Payment\CoreBundle\Tests\Functional\TestBundle\Entity\Order;
use JMS\Payment\CoreBundle\Util\Number;

class PaymentWorkflowTest extends BasePaymentWorkflowTest
{
/**
* @runInSeparateProcess
*/
public function testPayment()
{
$amount = 123.45;
$order = new Order($amount);

$response = parent::doRequest($order, 'payment');
$order = $this->refreshOrder($order);

$this->assertSame(201, $response->getStatusCode(), substr($response, 0, 2000));
$this->assertTrue(Number::compare($amount, $order->getPaymentInstruction()->getAmount(), '=='));
$this->assertEquals('bar', $order->getPaymentInstruction()->getExtendedData()->get('foo'));

$extendedData = $this->getRawExtendedData($order);
$this->assertArrayHasKey('foo', $extendedData);
$this->assertNotEquals('bar', $extendedData['foo'][0]);
}
}
27 changes: 0 additions & 27 deletions Tests/Functional/PaymentWorkflowMcryptTest.php

This file was deleted.

23 changes: 0 additions & 23 deletions Tests/Functional/PaymentWorkflowNoEncryptionTest.php

This file was deleted.

18 changes: 0 additions & 18 deletions Tests/Functional/PaymentWorkflowTest.php

This file was deleted.

37 changes: 22 additions & 15 deletions Tests/Functional/TestBundle/Controller/OrderController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,40 @@

/**
* @Route("/order")
* @Template("TestBundle:Order:order.html.twig")
*
* @author Johannes
*/
class OrderController extends Controller
{
/**
* @Route("/{id}/payment-details", name = "payment_details")
* @Template("TestBundle:Order:paymentDetails.html.twig")
* @Route("/{id}/payment", name="payment")
*
* @param Order $order
*/
public function paymentDetailsAction(Order $order)
public function paymentAction(Order $order)
{
return $this->handleRequest($order, array(
'paypal_express_checkout' => array(
'foo' => 'bar',
),
));
}

private function handleRequest($order, array $predefinedData)
{
$formData = array(
'currency' => 'EUR',
'amount' => $order->getAmount(),
'predefined_data' => $predefinedData,
);

$formType = Legacy::supportsFormTypeName()
? 'jms_choose_payment_method'
: 'JMS\Payment\CoreBundle\Form\ChoosePaymentMethodType'
;

$form = $this->get('form.factory')->create($formType, null, array(
'currency' => 'EUR',
'amount' => $order->getAmount(),
'predefined_data' => array(
'paypal_express_checkout' => array(
'foo' => 'bar',
),
),
));

$em = $this->getDoctrine()->getManager();
$ppc = $this->get('payment.plugin_controller');
$form = $this->get('form.factory')->create($formType, null, $formData);

$request = Legacy::supportsRequestService()
? $this->getRequest()
Expand All @@ -50,6 +54,9 @@ public function paymentDetailsAction(Order $order)
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$ppc = $this->get('payment.plugin_controller');

$instruction = $form->getData();
$ppc->createPaymentInstruction($instruction);

Expand Down

0 comments on commit 99579f2

Please sign in to comment.