Skip to content

Commit 70639a7

Browse files
committed
Add remaining unit tests for download URL override
1 parent 9f5e15a commit 70639a7

File tree

3 files changed

+247
-7
lines changed

3 files changed

+247
-7
lines changed

test/unit/ComposerIntegration/Listeners/OverrideDownloadUrlInstallListenerTest.php

+127-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Composer\Installer\InstallerEvents;
1212
use Composer\IO\IOInterface;
1313
use Composer\Package\CompletePackage;
14+
use Composer\Package\Package;
1415
use Php\Pie\ComposerIntegration\Listeners\OverrideDownloadUrlInstallListener;
1516
use Php\Pie\ComposerIntegration\PieComposerRequest;
1617
use Php\Pie\ComposerIntegration\PieOperation;
@@ -87,17 +88,140 @@ public function testEventListenerRegistration(): void
8788

8889
public function testNonInstallOperationsAreIgnored(): void
8990
{
90-
self::markTestIncomplete('todo'); // @todo
91+
$composerPackage = new CompletePackage('foo/bar', '1.2.3.0', '1.2.3');
92+
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');
93+
94+
/**
95+
* @psalm-suppress InternalClass
96+
* @psalm-suppress InternalMethod
97+
*/
98+
$installerEvent = new InstallerEvent(
99+
InstallerEvents::PRE_OPERATIONS_EXEC,
100+
$this->composer,
101+
$this->io,
102+
false,
103+
true,
104+
new Transaction([$composerPackage], []),
105+
);
106+
107+
$this->container
108+
->expects(self::never())
109+
->method('get');
110+
111+
(new OverrideDownloadUrlInstallListener(
112+
$this->composer,
113+
$this->io,
114+
$this->container,
115+
new PieComposerRequest(
116+
$this->createMock(OutputInterface::class),
117+
new TargetPlatform(
118+
OperatingSystem::NonWindows,
119+
OperatingSystemFamily::Linux,
120+
PhpBinaryPath::fromCurrentProcess(),
121+
Architecture::x86_64,
122+
ThreadSafetyMode::NonThreadSafe,
123+
1,
124+
WindowsCompiler::VC15,
125+
),
126+
new RequestedPackageAndVersion('foo/bar', '^1.1'),
127+
PieOperation::Install,
128+
[],
129+
null,
130+
false,
131+
),
132+
))($installerEvent);
91133
}
92134

93135
public function testNonCompletePackagesAreIgnored(): void
94136
{
95-
self::markTestIncomplete('todo'); // @todo
137+
$composerPackage = new Package('foo/bar', '1.2.3.0', '1.2.3');
138+
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');
139+
140+
/**
141+
* @psalm-suppress InternalClass
142+
* @psalm-suppress InternalMethod
143+
*/
144+
$installerEvent = new InstallerEvent(
145+
InstallerEvents::PRE_OPERATIONS_EXEC,
146+
$this->composer,
147+
$this->io,
148+
false,
149+
true,
150+
new Transaction([], [$composerPackage]),
151+
);
152+
153+
$this->container
154+
->expects(self::never())
155+
->method('get');
156+
157+
(new OverrideDownloadUrlInstallListener(
158+
$this->composer,
159+
$this->io,
160+
$this->container,
161+
new PieComposerRequest(
162+
$this->createMock(OutputInterface::class),
163+
new TargetPlatform(
164+
OperatingSystem::NonWindows,
165+
OperatingSystemFamily::Linux,
166+
PhpBinaryPath::fromCurrentProcess(),
167+
Architecture::x86_64,
168+
ThreadSafetyMode::NonThreadSafe,
169+
1,
170+
WindowsCompiler::VC15,
171+
),
172+
new RequestedPackageAndVersion('foo/bar', '^1.1'),
173+
PieOperation::Install,
174+
[],
175+
null,
176+
false,
177+
),
178+
))($installerEvent);
96179
}
97180

98181
public function testInstallOperationsForDifferentPackagesAreIgnored(): void
99182
{
100-
self::markTestIncomplete('todo'); // @todo
183+
$composerPackage = new CompletePackage('different/package', '1.2.3.0', '1.2.3');
184+
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');
185+
186+
/**
187+
* @psalm-suppress InternalClass
188+
* @psalm-suppress InternalMethod
189+
*/
190+
$installerEvent = new InstallerEvent(
191+
InstallerEvents::PRE_OPERATIONS_EXEC,
192+
$this->composer,
193+
$this->io,
194+
false,
195+
true,
196+
new Transaction([], [$composerPackage]),
197+
);
198+
199+
$this->container
200+
->expects(self::never())
201+
->method('get');
202+
203+
(new OverrideDownloadUrlInstallListener(
204+
$this->composer,
205+
$this->io,
206+
$this->container,
207+
new PieComposerRequest(
208+
$this->createMock(OutputInterface::class),
209+
new TargetPlatform(
210+
OperatingSystem::NonWindows,
211+
OperatingSystemFamily::Linux,
212+
PhpBinaryPath::fromCurrentProcess(),
213+
Architecture::x86_64,
214+
ThreadSafetyMode::NonThreadSafe,
215+
1,
216+
WindowsCompiler::VC15,
217+
),
218+
new RequestedPackageAndVersion('foo/bar', '^1.1'),
219+
PieOperation::Install,
220+
[],
221+
null,
222+
false,
223+
),
224+
))($installerEvent);
101225
}
102226

103227
public function testWindowsUrlInstallerDoesNotRunOnNonWindows(): void

test/unit/Downloading/DownloadUrlMethodTest.php

+100-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,19 @@
44

55
namespace Php\PieUnitTest\Downloading;
66

7+
use Composer\Package\CompletePackage;
8+
use Composer\Package\CompletePackageInterface;
9+
use Php\Pie\DependencyResolver\Package;
710
use Php\Pie\Downloading\DownloadUrlMethod;
11+
use Php\Pie\ExtensionName;
12+
use Php\Pie\ExtensionType;
13+
use Php\Pie\Platform\Architecture;
14+
use Php\Pie\Platform\OperatingSystem;
15+
use Php\Pie\Platform\OperatingSystemFamily;
16+
use Php\Pie\Platform\TargetPhp\PhpBinaryPath;
17+
use Php\Pie\Platform\TargetPlatform;
18+
use Php\Pie\Platform\ThreadSafetyMode;
19+
use Php\Pie\Platform\WindowsCompiler;
820
use PHPUnit\Framework\Attributes\CoversClass;
921
use PHPUnit\Framework\TestCase;
1022

@@ -13,16 +25,101 @@ final class DownloadUrlMethodTest extends TestCase
1325
{
1426
public function testWindowsPackages(): void
1527
{
16-
self::markTestIncomplete('todo'); // @todo
28+
$package = new Package(
29+
$this->createMock(CompletePackageInterface::class),
30+
ExtensionType::PhpModule,
31+
ExtensionName::normaliseFromString('foo'),
32+
'foo/foo',
33+
'1.2.3',
34+
null,
35+
);
36+
37+
$phpBinaryPath = $this->createMock(PhpBinaryPath::class);
38+
$phpBinaryPath
39+
->method('majorMinorVersion')
40+
->willReturn('8.1');
41+
42+
$targetPlatform = new TargetPlatform(
43+
OperatingSystem::Windows,
44+
OperatingSystemFamily::Windows,
45+
$phpBinaryPath,
46+
Architecture::x86_64,
47+
ThreadSafetyMode::NonThreadSafe,
48+
1,
49+
WindowsCompiler::VC15,
50+
);
51+
52+
$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);
53+
54+
self::assertSame(DownloadUrlMethod::WindowsBinaryDownload, $downloadUrlMethod);
55+
56+
self::assertSame(
57+
[
58+
'php_foo-1.2.3-8.1-nts-vc15-x86_64.zip',
59+
'php_foo-1.2.3-8.1-vc15-nts-x86_64.zip',
60+
],
61+
$downloadUrlMethod->possibleAssetNames($package, $targetPlatform),
62+
);
1763
}
1864

1965
public function testPrePackagedSourceDownloads(): void
2066
{
21-
self::markTestIncomplete('todo'); // @todo
67+
$composerPackage = $this->createMock(CompletePackage::class);
68+
$composerPackage->method('getPrettyName')->willReturn('foo/bar');
69+
$composerPackage->method('getPrettyVersion')->willReturn('1.2.3');
70+
$composerPackage->method('getType')->willReturn('php-ext');
71+
$composerPackage->method('getPhpExt')->willReturn(['download-url-method' => 'pre-packaged-source']);
72+
73+
$package = Package::fromComposerCompletePackage($composerPackage);
74+
75+
$targetPlatform = new TargetPlatform(
76+
OperatingSystem::NonWindows,
77+
OperatingSystemFamily::Linux,
78+
PhpBinaryPath::fromCurrentProcess(),
79+
Architecture::x86_64,
80+
ThreadSafetyMode::NonThreadSafe,
81+
1,
82+
null,
83+
);
84+
85+
$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);
86+
87+
self::assertSame(DownloadUrlMethod::PrePackagedSourceDownload, $downloadUrlMethod);
88+
89+
self::assertSame(
90+
[
91+
'php_bar-1.2.3-src.tgz',
92+
'php_bar-1.2.3-src.zip',
93+
],
94+
$downloadUrlMethod->possibleAssetNames($package, $targetPlatform),
95+
);
2296
}
2397

2498
public function testComposerDefaultDownload(): void
2599
{
26-
self::markTestIncomplete('todo'); // @todo
100+
$package = new Package(
101+
$this->createMock(CompletePackageInterface::class),
102+
ExtensionType::PhpModule,
103+
ExtensionName::normaliseFromString('foo'),
104+
'foo/foo',
105+
'1.2.3',
106+
null,
107+
);
108+
109+
$targetPlatform = new TargetPlatform(
110+
OperatingSystem::NonWindows,
111+
OperatingSystemFamily::Linux,
112+
PhpBinaryPath::fromCurrentProcess(),
113+
Architecture::x86_64,
114+
ThreadSafetyMode::NonThreadSafe,
115+
1,
116+
null,
117+
);
118+
119+
$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);
120+
121+
self::assertSame(DownloadUrlMethod::ComposerDefaultDownload, $downloadUrlMethod);
122+
123+
self::assertNull($downloadUrlMethod->possibleAssetNames($package, $targetPlatform));
27124
}
28125
}

test/unit/Platform/PrePackagedSourceAssetNameTest.php

+20-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
namespace Php\PieUnitTest\Platform;
66

7+
use Composer\Package\CompletePackageInterface;
8+
use Php\Pie\DependencyResolver\Package;
9+
use Php\Pie\ExtensionName;
10+
use Php\Pie\ExtensionType;
711
use Php\Pie\Platform\PrePackagedSourceAssetName;
812
use PHPUnit\Framework\Attributes\CoversClass;
913
use PHPUnit\Framework\TestCase;
@@ -13,6 +17,21 @@ final class PrePackagedSourceAssetNameTest extends TestCase
1317
{
1418
public function testPackageNames(): void
1519
{
16-
self::markTestIncomplete('todo'); // @todo
20+
self::assertSame(
21+
[
22+
'php_foobar-1.2.3-src.tgz',
23+
'php_foobar-1.2.3-src.zip',
24+
],
25+
PrePackagedSourceAssetName::packageNames(
26+
new Package(
27+
$this->createMock(CompletePackageInterface::class),
28+
ExtensionType::PhpModule,
29+
ExtensionName::normaliseFromString('foobar'),
30+
'foo/bar',
31+
'1.2.3',
32+
null,
33+
),
34+
),
35+
);
1736
}
1837
}

0 commit comments

Comments
 (0)