tao-test/app/tao/test/unit/scripts/tools/migrations/TaoComparatorTest.php

116 lines
3.9 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2020 (original work) Open Assessment Technologies SA
*
*/
declare(strict_types=1);
namespace oat\tao\test\unit\scripts\tools\migrations;
use Doctrine\Migrations\Version\Version;
use common_ext_ExtensionsManager as ExtensionsManager;
use common_ext_Extension as Extension;
use oat\generis\test\TestCase;
use oat\tao\scripts\tools\migrations\TaoComparator;
use helpers_ExtensionHelper as ExtensionHelper;
/**
* Class TaoComparator
* @package oat\tao\scripts\tools\migrations
*/
class TaoComparatorTest extends TestCase
{
public function testCompare()
{
$extensionsManagerMock = $this->getExtensionManagerMock();
$comparator = new TaoComparator($extensionsManagerMock, $this->getExtensionHelperMock());
$versions = [
$versionFoo5 = new Version('Version5_foo'),
$versionFoo3 = new Version('Version3_foo'),
$extensionBar4 = new Version('Version4_bar'),
$extensionBar2 = new Version('Version2_bar'),
$extensionBaz1 = new Version('Version1_baz'),
];
usort($versions, [$comparator, 'compare']);
$versionKeys = [];
foreach ($versions as $version) {
$versionKeys[] = (string) $version;
}
$this->assertEquals([
'Version3_foo',
'Version5_foo',
'Version1_baz',
'Version2_bar',
'Version4_bar',
], $versionKeys);
$this->assertTrue(0 > $comparator->compare(new Version('Version5_foo'), new Version('Version4_bar')));
$this->assertTrue(0 < $comparator->compare(new Version('Version4_bar'), new Version('Version1_baz')));
}
private function getExtensionManagerMock()
{
$extensionFoo = $this->getMockBuilder(Extension::class)
->disableOriginalConstructor()
->getMock();
$extensionFoo->method('getId')
->willReturn('foo');
$extensionFoo->method('getDependencies')
->willReturn([]);
$extensionBar = $this->getMockBuilder(Extension::class)
->disableOriginalConstructor()
->getMock();
$extensionBar->method('getId')
->willReturn('bar');
$extensionBar->method('getDependencies')
->willReturn(['foo' => '*', 'baz' => '*']);
$extensionBaz = $this->getMockBuilder(Extension::class)
->disableOriginalConstructor()
->getMock();
$extensionBaz->method('getId')
->willReturn('baz');
$extensionBaz->method('getDependencies')
->willReturn(['foo' => '*']);
$extensionsManagerMock = $this->getMockBuilder(ExtensionsManager::class)
->getMock();
$extensionsManagerMock->method('getInstalledExtensions')
->willReturn([
'bar' => $extensionBar,
'foo' => $extensionFoo
]);
$extensionsManagerMock->method('getExtensionById')
->willReturnMap([
['baz', $extensionBaz],
['bar', $extensionBar],
['foo', $extensionFoo]
]);
return $extensionsManagerMock;
}
private function getExtensionHelperMock()
{
return new ExtensionHelper();
}
}