open-orchestra/open-orchestra-cms-bundle

View on GitHub
UserAdminBundle/Tests/EventSubscriber/DeleteGroupSubscriberTest.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace OpenOrchestra\UserAdminBundle\Tests\EventSubscriber;

use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use OpenOrchestra\UserAdminBundle\EventSubscriber\DeleteGroupSubscriber;
use OpenOrchestra\UserBundle\GroupEvents;
use Doctrine\Common\Collections\ArrayCollection;
use Phake;

/**
 * Class DeleteGroupSubscriberTest
 */
abstract class DeleteGroupSubscriberTest extends AbstractBaseTestCase
{

    protected $objectManager;
    protected $event;
    protected $group;
    protected $users;
    protected $subscriber;

    /**
     * Set up common test part
     */
    public function setUp()
    {
        $this->users = new ArrayCollection();
        $user0 = Phake::mock('FOS\UserBundle\Model\UserInterface');
        $user1 = Phake::mock('FOS\UserBundle\Model\UserInterface');
        $this->users->add($user0);
        $this->users->add($user1);

        $userRepository = Phake::mock('OpenOrchestra\UserBundle\Repository\UserRepositoryInterface');
        $this->objectManager = Phake::mock('Doctrine\Common\Persistence\ObjectManager');
        $this->event = Phake::mock('OpenOrchestra\UserBundle\Event\GroupEvent');
        $this->group = Phake::mock('FOS\UserBundle\Model\GroupInterface');

        Phake::when($this->event)->getGroup()->thenReturn($this->group);
        Phake::when($userRepository)->findByGroup(\Phake::anyParameters())->thenReturn($this->users);

        $this->subscriber = new DeleteGroupSubscriber($this->objectManager, $this->userRepository);
    }

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

    /**
     * Test subscribed events
     */
    public function testEventSubscribed()
    {
        $this->assertArrayHasKey(GroupEvents::GROUP_DELETE, $this->subscriber->getSubscribedEvents());
    }

    /**
     * test deleteGroupReference
     */
    public function testDeleteGroupReference()
    {
        $this->subscriber->deleteGroupReference($this->event);

        foreach ($this->users as $user) {
            Phake::verify($user)->removeGroup($this->group);
            Phake::verify($this->objectManager)->flush($user);
        }
    }
}