PayloadValidatorTest.php 3.02 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 86 87 88 89 90 91 92 93 94 95 96
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Setup\Test\Unit\Model;

use \Magento\Setup\Model\PayloadValidator;

class PayloadValidatorTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @var \Magento\Framework\Module\FullModuleList|\PHPUnit_Framework_MockObject_MockObject
     */
    private $fullModuleList;

    /**
     * @var  \Magento\Setup\Model\PayloadValidator
     */
    private $model;

    public function setUp()
    {
        $this->fullModuleList = $this->createMock(\Magento\Framework\Module\FullModuleList::class);
        $this->model = new PayloadValidator($this->fullModuleList);
    }

    /**
     * @param string $type
     * @param int $has
     * @param bool $moduleExists
     * @dataProvider validatePayLoadDataProvider
     */
    public function testValidatePayLoad($type, $has, $moduleExists)
    {
        $this->fullModuleList->expects($this->exactly($has))->method('has')->willReturn($moduleExists);
        $this->assertEquals('', $this->model->validatePayload($type));
    }

    /**
     * @return array
     */
    public function validatePayLoadDataProvider()
    {
        return [
            [['type' => 'uninstall', 'dataOption' => true], 0, false],
            [['type' => 'update', 'packages' => [['name' => 'vendor\/package', 'version' => '1.0.1']]], 0, false],
            [['type' => 'enable', 'packages' => [['name' => 'vendor\/package', 'version' => '1.0.1']]], 1, true],
            [['type' => 'disable', 'packages' => [['name' => 'vendor\/package', 'version' => '1.0.1']]], 1, true],
        ];
    }

    /**
     * @param string $type
     * @param int $has
     * @param bool $moduleExists
     * @param string $errorMessage
     * @dataProvider validatePayLoadNegativeCasesDataProvider
     */
    public function testValidatePayLoadNegativeCases($type, $has, $moduleExists, $errorMessage)
    {
        $this->fullModuleList->expects($this->exactly($has))->method('has')->willReturn($moduleExists);
        $this->assertStringStartsWith($errorMessage, $this->model->validatePayload($type));
    }

    /**
     * @return array
     */
    public function validatePayLoadNegativeCasesDataProvider()
    {
        return [
            [['type' => 'uninstall'], 0, false, 'Missing dataOption'],
            [['type' => 'update'], 0, false, 'Missing packages'],
            [['type' => 'update',
                'packages' => [['name' => 'vendor\/package']]],
                0,
                false,
                'Missing package information'
            ],
            [['type' => 'enable'], 0, false, 'Missing packages'],
            [['type' => 'enable',
                'packages' => [['name' => 'vendor\/package']]],
                1,
                false,
                'Invalid Magento module name'
            ],
            [['type' => 'disable',
                'packages' => [['name' => 'vendor\/package']]],
                1,
                false,
                'Invalid Magento module name'
            ]
        ];
    }
}