open-orchestra/open-orchestra-media-admin-bundle

View on GitHub
MediaAdmin/Tests/EventSubscriber/FolderSubscriberTest.php

Summary

Maintainability
A
1 hr
Test Coverage
<?php

namespace OpenOrchestra\MediaAdmin\Tests\EventSubscriber;

use OpenOrchestra\BaseBundle\Tests\AbstractTest\AbstractBaseTestCase;
use Phake;
use OpenOrchestra\MediaAdmin\FolderEvents;
use OpenOrchestra\Media\Model\MediaFolderInterface;
use OpenOrchestra\MediaAdmin\EventSubscriber\FolderSubscriber;

/**
 * Class FolderSubscriberTest
 */
class FolderSubscriberTest extends AbstractBaseTestCase
{
    protected $subscriber;

    protected $folderRepository;
    protected $eventDispatcher;
    protected $currentSiteManager;
    protected $groupRepository;
    protected $siteId = 'siteId';

    /**
     * Set up the test
     */
    public function setUp()
    {
        $this->folderRepository = Phake::mock('OpenOrchestra\Media\Repository\FolderRepositoryInterface');

        $this->eventDispatcher = Phake::mock('Symfony\Component\EventDispatcher\EventDispatcher');

        $folderEvent = Phake::mock('OpenOrchestra\MediaAdmin\Event\FolderEvent');
        $folderEventFactory = Phake::mock('OpenOrchestra\MediaAdmin\Event\FolderEventFactory');
        Phake::when($folderEventFactory)->createFolderEvent()->thenReturn($folderEvent);

        $this->groupRepository = Phake::mock('OpenOrchestra\Backoffice\Repository\GroupRepositoryInterface');

        $site = Phake::mock('OpenOrchestra\ModelInterface\Model\SiteInterface');
        Phake::when($site)->getId()->thenReturn($this->siteId);
        $siteRepository = Phake::mock('OpenOrchestra\ModelInterface\Repository\SiteRepositoryInterface');
        Phake::when($siteRepository)->findOneBySiteId(Phake::anyParameters())->thenReturn($site);

        $this->subscriber = new FolderSubscriber(
            $this->folderRepository,
            $this->eventDispatcher,
            $folderEventFactory,
            $this->groupRepository,
            $siteRepository
        );
    }

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

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

    /**
     * Test update path
     */
    public function testUpdatePath()
    {
        $parentFolderId = 'parent';
        $grandParentPath = '/';
        $parentPath = 'parentPath';
        $previousPath = 'previousPath';

        $grandParent = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        Phake::when($grandParent)->getPath()->thenReturn($grandParentPath);

        $parent = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        Phake::when($parent)->getFolderId()->thenReturn($parentFolderId);
        Phake::when($parent)->getPath()->thenReturn($parentPath);
        Phake::when($parent)->getParent()->thenReturn($grandParent);
        Phake::when($parent)->getSiteId()->thenReturn($this->siteId);

        $son1 = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        $folderId1 = 'folderId1';
        Phake::when($son1)->getFolderId()->thenReturn($folderId1);
        Phake::when($son1)->getPath()->thenReturn($parentPath . '/' . $folderId1);
        $son2 = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        $folderId2 = 'folderId2';
        Phake::when($son2)->getFolderId()->thenReturn($folderId2);
        Phake::when($son2)->getPath()->thenReturn($parentPath . '/' . $folderId2);
        $son3 = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        $folderId3 = 'folderId3';
        Phake::when($son3)->getFolderId()->thenReturn($folderId3);
        Phake::when($son3)->getPath()->thenReturn($parentPath . '/' . $folderId3);

        $sons = array($son1, $son2, $son3);

        Phake::when($this->folderRepository)->findByPathAndSite(Phake::anyParameters())->thenReturn($sons);

        $event = Phake::mock('OpenOrchestra\MediaAdmin\Event\FolderEvent');
        Phake::when($event)->getFolder()->thenReturn($parent);
        Phake::when($event)->getPreviousPath()->thenReturn($previousPath);

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

        Phake::verify($this->groupRepository)->updatePerimeterItem(
            MediaFolderInterface::ENTITY_TYPE,
            $parentPath,
            $grandParentPath . '/' . $parentFolderId,
            $this->siteId
        );

        Phake::verify($son1)->setPath($grandParentPath . '/' . $parentFolderId . '/' . $folderId1);
        Phake::verify($son2)->setPath($grandParentPath . '/' . $parentFolderId . '/' . $folderId2);
        Phake::verify($son3)->setPath($grandParentPath . '/' . $parentFolderId . '/' . $folderId3);

        Phake::verify($this->eventDispatcher, Phake::times(4))->dispatch(Phake::anyParameters());
    }

    public function testRemoveFolderFromPerimeter()
    {
        $path = 'folderPath';

        $folder = Phake::mock('OpenOrchestra\Media\Model\MediaFolderInterface');
        Phake::when($folder)->getPath()->thenReturn($path);
        $event = Phake::mock('OpenOrchestra\MediaAdmin\Event\FolderEvent');
        Phake::when($event)->getFolder()->thenReturn($folder);

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

        Phake::verify($this->groupRepository)->removePerimeterItem(
            MediaFolderInterface::ENTITY_TYPE,
            $path,
            $this->siteId
        );
    }
}