Skip to content

Instantly share code, notes, and snippets.

@ahonymous
Last active January 14, 2016 11:01
Show Gist options
  • Save ahonymous/f711ebb4fcfbd834a947 to your computer and use it in GitHub Desktop.
Save ahonymous/f711ebb4fcfbd834a947 to your computer and use it in GitHub Desktop.
Tests for form with entity type
<?php
namespace AppBundle\Tests\Form;
use AppBundle\Entity\EOrder;
use AppBundle\Entity\User;
use AppBundle\Form\ApiOrderType;
use AppBundle\Tests\AppTypeTestCase;
class ApiOrderTypeTest extends AppTypeTestCase
{
/** @dataProvider getData */
public function testSubmitValidData($username, $formData)
{
$user = new User();
$user->setUsername($username);
$formData['name'] = $username;
$type = new ApiOrderType();
$object = new EOrder();
$object->setUser($user);
$form = $this->factory->create($type, $object);
$form->add('submit', 'submit');
$form->submit($formData);
$this->checkType($form, $formData, $object);
}
public function getData()
{
return [
[
'username' => 'Tester1',
'order' => [
'delivery' => '2015-01-01 00:00:00',
'poNumber' => '905',
'iceCubes' => 0,
'crushedIce' => 0,
'carryPack' => 1,
'barBlocks' => 0,
'dryIceSlices10' => 0,
'dryIcePallets10' => 0,
'dryIceSlices5' => 0,
'dryIcePallets5' => 0,
'pushId' => 'pushId',
'provider' => 'android',
]
],
[
'username' => 'Tester2',
'order' => [
'delivery' => '2014-01-01 11:11:00',
'poNumber' => '8066',
'iceCubes' => 0,
'crushedIce' => 0,
'carryPack' => 1,
'barBlocks' => 1,
'dryIceSlices10' => 1,
'dryIcePallets10' => 1,
'dryIceSlices5' => 1,
'dryIcePallets5' => 1,
'pushId' => 'pushId2',
'provider' => 'android',
]
],
];
}
}
<?php
namespace AppBundle\Tests;
use Symfony\Component\Form\Extension\Core\CoreExtension;
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\Validator\ConstraintViolationList;
class AppTypeTestCase extends TypeTestCase
{
protected function setUp()
{
parent::setUp();
$validator = $this->getMock('\Symfony\Component\Validator\Validator\ValidatorInterface');
$validator->method('validate')->will($this->returnValue(new ConstraintViolationList()));
$formTypeExtension = new FormTypeValidatorExtension($validator);
$coreExtension = new CoreExtension();
$this->factory = Forms::createFormFactoryBuilder()
->addExtensions($this->getExtensions())
->addExtension($coreExtension)
->addTypeExtension($formTypeExtension)
->getFormFactory();
}
protected function checkType(FormInterface $form, $formData, $object = null)
{
$this->assertTrue($form->isSynchronized());
if ($object) {
$this->assertEquals($object, $form->getData());
}
$view = $form->createView();
$children = $view->children;
foreach (array_keys($formData) as $key) {
$this->assertArrayHasKey($key, $children);
}
}
protected function createRegistryMock($name, $em)
{
$registry = $this->getMock('Doctrine\Common\Persistence\ManagerRegistry');
$registry->expects($this->any())
->method('getManager')
->with($this->equalTo($name))
->will($this->returnValue($em));
return $registry;
}
}
<?php
namespace AppBundle\Tests\Form;
use Doctrine\ORM\Tools\SchemaTool;
use AppBundle\Entity\User;
use AppBundle\Form\FilterType;
use AppBundle\Tests\AppTypeTestCase;
use Symfony\Bridge\Doctrine\Form\DoctrineOrmExtension;
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
use Symfony\Component\Form\Extension\Core\CoreExtension;
class FilterTypeTest extends AppTypeTestCase
{
const ENTITY_CLASS = 'AppBundle\Entity\User';
/**
* @var \Doctrine\ORM\EntityManager
*/
private $em;
protected function getExtensions()
{
$manager = $this->getMock('Doctrine\Common\Persistence\ManagerRegistry');
$manager->expects($this->any())
->method('getManager')
->will($this->returnValue($this->em));
$manager->expects($this->any())
->method('getManagerForClass')
->will($this->returnValue($this->em));
return [
new CoreExtension(),
new DoctrineOrmExtension($manager),
];
}
protected function setUp()
{
$this->em = DoctrineTestHelper::createTestEntityManager();
parent::setUp();
$schemaTool = new SchemaTool($this->em);
$classes = array(
$this->em->getClassMetadata(self::ENTITY_CLASS),
);
try {
$schemaTool->dropSchema($classes);
} catch (\Exception $e) {
}
try {
$schemaTool->createSchema($classes);
} catch (\Exception $e) {
}
$user = new User();
$user->setUsername('905');
$user->setPoNumber(true);
$user->setTradingName('company905');
$user->setContactName('Superman');
$user->setAddressLine1('address, 905');
$user->setCity('city');
$user->setPostcode('123456');
$user->setPhone(102314553);
$user->setPassword('$2y$12$xOmVCVBcpqyZj3kgCWV6rep11Kl4J6hmnsHhtS15NtUAxCmSX62IO');
$user->setCreated(new \DateTime());
$user->setUpdated(new \DateTime());
$this->em->persist($user);
$this->em->flush();
}
/** @dataProvider getFilterData */
public function testSubmitValidData($formData)
{
$type = new FilterType();
$form = $this->factory->create($type);
$form->add('submit', 'submit');
$form->submit($formData);
$this->checkType($form, $formData);
}
public function getFilterData()
{
return [
[['startDate' => '2015-01-20']],
[['endDate' => '2015-01-21']],
[['tradingName' => 'testCompany']],
[['startDate' => '2015-01-20', 'endDate' => '2015-01-21']],
[['startDate' => '2015-01-20', 'endDate' => '2015-01-21', 'tradingName' => 'testCompany']],
[['startDate' => '2015-01-20', 'tradingName' => 'testCompany']],
[['endDate' => '2015-01-21', 'tradingName' => 'testCompany']],
];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment