-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathVersionSelectorFactoryTest.php
77 lines (68 loc) · 2.83 KB
/
VersionSelectorFactoryTest.php
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
<?php
declare(strict_types=1);
namespace Php\PieUnitTest\ComposerIntegration;
use Composer\Composer;
use Composer\Package\CompletePackage;
use Composer\Package\Link;
use Composer\Repository\ArrayRepository;
use Composer\Repository\InstalledRepositoryInterface;
use Composer\Repository\RepositoryManager;
use Composer\Semver\Constraint\Constraint;
use Php\Pie\ComposerIntegration\VersionSelectorFactory;
use Php\Pie\DependencyResolver\RequestedPackageAndVersion;
use Php\Pie\Platform\Architecture;
use Php\Pie\Platform\OperatingSystem;
use Php\Pie\Platform\OperatingSystemFamily;
use Php\Pie\Platform\TargetPhp\PhpBinaryPath;
use Php\Pie\Platform\TargetPlatform;
use Php\Pie\Platform\ThreadSafetyMode;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
#[CoversClass(VersionSelectorFactory::class)]
final class VersionSelectorFactoryTest extends TestCase
{
public function testVersionSelectorFactory(): void
{
$repository = new ArrayRepository([
new CompletePackage('another/package', '1.5.0.0', '1.5.0'),
new CompletePackage('foo/bar', '1.2.3.0', '1.2.3'),
new CompletePackage('foo/bar', '2.0.0.0', '2.0.0'),
]);
$packageWithReplaces = new CompletePackage('already/installed2', '1.2.3.0', '1.2.3');
$packageWithReplaces->setReplaces([
'ext-installed2' => new Link('root/package', 'ext-installed2', new Constraint('==', '*')),
]);
$localRepository = $this->createMock(InstalledRepositoryInterface::class);
$localRepository->method('getPackages')->willReturn([
new CompletePackage('already/installed1', '1.2.3.0', '1.2.3'),
$packageWithReplaces,
]);
$repoMananger = $this->createMock(RepositoryManager::class);
$repoMananger
->expects(self::once())
->method('getRepositories')
->willReturn([$repository]);
$repoMananger->method('getLocalRepository')->willReturn($localRepository);
$composer = $this->createMock(Composer::class);
$composer
->method('getRepositoryManager')
->willReturn($repoMananger);
$versionSelector = VersionSelectorFactory::make(
$composer,
new RequestedPackageAndVersion('foo/bar', '^1.0'),
new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
null,
),
);
$package = $versionSelector->findBestCandidate('foo/bar', '^1.0');
self::assertNotFalse($package);
self::assertSame('foo/bar', $package->getName());
self::assertSame('1.2.3', $package->getPrettyVersion());
}
}