ProcessQueueManagerTest.php 3.08 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Deploy\Test\Unit\Model;

use Magento\Deploy\Model\ProcessManager;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\Deploy\Model\ProcessTaskFactory;
use Magento\Deploy\Model\ProcessTask;

class ProcessQueueManagerTest extends \PHPUnit_Framework_TestCase
{
    /**
     * @var \Magento\Deploy\Model\ProcessQueueManager
     */
    private $model;

    /**
     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Deploy\Model\ProcessManager
     */
    private $processManagerMock;

    /**
     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ResourceConnection
     */
    private $resourceConnectionMock;

    /**
     * @var \PHPUnit_Framework_MockObject_MockObject|ProcessTaskFactory
     */
    private $processTaskFactoryMock;

    /**
     * @var \PHPUnit_Framework_MockObject_MockObject|ProcessTask
     */
    private $processTaskMock;

    protected function setUp()
    {
        $this->processManagerMock = $this->getMock(ProcessManager::class, [], [], '', false);
        $this->resourceConnectionMock = $this->getMock(ResourceConnection::class, [], [], '', false);
        $this->processTaskFactoryMock = $this->getMock(ProcessTaskFactory::class, ['create'], [], '', false);
        $this->processTaskMock = $this->getMock(ProcessTask::class, [], [], '', false);
        $this->processTaskFactoryMock->expects($this->any())->method('create')->willReturn($this->processTaskMock);
        $this->model = (new ObjectManager($this))->getObject(
            \Magento\Deploy\Model\ProcessQueueManager::class,
            [
                'processManager' => $this->processManagerMock,
                'resourceConnection' => $this->resourceConnectionMock,
                'processTaskFactory' => $this->processTaskFactoryMock
            ]
        );
    }

    public function testProcess()
    {
        $callableMock = function () {
            return true;
        };
        $this->processTaskMock->expects($this->any())->method('getHandler')->willReturn($callableMock);

        $processMock = $this->getMock(\Magento\Deploy\Model\Process::class, [], [], '', false);

        $this->model->addTaskToQueue($callableMock, []);
        $this->processManagerMock->expects($this->atLeastOnce())->method('getProcesses')->willReturnOnConsecutiveCalls(
            [$processMock],
            [$processMock],
            [$processMock],
            [$processMock],
            [$processMock],
            []
        );
        $processMock->expects($this->once())->method('isCompleted')->willReturn(true);
        $processMock->expects($this->atLeastOnce())->method('getPid')->willReturn(42);
        $processMock->expects($this->once())->method('getStatus')->willReturn(0);
        $this->processManagerMock->expects($this->once())->method('delete')->with($processMock);

        $this->resourceConnectionMock->expects(self::once())->method('closeConnection');

        $this->assertEquals(0, $this->model->process());
    }
}