open-orchestra/open-orchestra-cms-bundle

View on GitHub
Backoffice/Tests/EventSubscriber/SortableCollectionSubscriberTest.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace OpenOrchestra\Backoffice\Tests\EventSubscriber;

use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use Phake;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use OpenOrchestra\Backoffice\EventSubscriber\SortableCollectionSubscriber;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Form\Form;

/**
 * Class SortableCollectionSubscriberTest
 */
class SortableCollectionSubscriberTest extends AbstractBaseTestCase
{
    /**
     * @var SortableCollectionSubscriber
     */
    protected $subscriber;

    /**
     * Set up the test
     */
    public function setUp()
    {
        $this->subscriber = new SortableCollectionSubscriber();
    }

    /**
     * Test instance
     */
    public function testInstance()
    {
        $this->assertInstanceOf('Symfony\Component\EventDispatcher\EventSubscriberInterface', $this->subscriber);
    }

    /**
     * Test event subscribed
     */
    public function testEventSubscribed()
    {
        $this->assertArrayHasKey(FormEvents::PRE_SUBMIT, $this->subscriber->getSubscribedEvents());
    }

    /**
     * Test preSubmit
     * @param mixed $formData
     * @param array $data
     * @param array $expectedOrder
     *
     * @dataProvider provideEvent
     */
    public function testPreSubmit($formData, array $data, array $expectedOrder)
    {
        $config = Phake::mock('Symfony\Component\Form\FormConfigInterface');
        $eventDispatcher = Phake::mock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
        Phake::when($config)->getEventDispatcher()->thenReturn($eventDispatcher);
        Phake::when($config)->getModelTransformers()->thenReturn(array());

        $form = new Form($config);
        $form->setData($formData);

        $event = Phake::mock('Symfony\Component\Form\FormEvent');
        Phake::when($event)->getForm()->thenReturn($form);
        Phake::when($event)->getData()->thenReturn($data);

        $this->subscriber->preSubmit($event);

        $newData = $form->getData();

        if (!is_array($newData)) {
            $newData = $newData->toArray();
        }

        $this->assertEquals($expectedOrder, array_keys($newData));
    }

    /**
     * @return array
     */
    public function provideEvent()
    {
        $formData0 = new ArrayCollection(array(
            'order0' => true,
            'order1' => true,
            'order2' => true,
            'order3' => true,
       ));
       $data0 = array(
            'order3' => true,
            'order2' => true,
            'order1' => true,
            'order0' => true,
       );

        $formData1 = array(
            'order0' => true,
            'order1' => true,
            'order2' => true,
            'order3' => true,
       );
       $data1 = array(
            'order3' => true,
            'order2' => true,
            'order1' => true,
            'order0' => true,
       );

       $expectedOrder = array(
           'order3',
           'order2',
           'order1',
           'order0',
       );

       return array(
           array($formData0, $data0, $expectedOrder),
           array($formData1, $data1, $expectedOrder),
       );
    }
}