Skip to content

Commit 6af069d

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

File tree

3 files changed

+242
-7
lines changed

3 files changed

+242
-7
lines changed

test/unit/ComposerIntegration/Listeners/OverrideDownloadUrlInstallListenerTest.php

Lines changed: 127 additions & 3 deletions
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

Lines changed: 95 additions & 3 deletions
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,96 @@ 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+
$targetPlatform = new TargetPlatform(
38+
OperatingSystem::Windows,
39+
OperatingSystemFamily::Windows,
40+
PhpBinaryPath::fromCurrentProcess(),
41+
Architecture::x86_64,
42+
ThreadSafetyMode::NonThreadSafe,
43+
1,
44+
WindowsCompiler::VC15,
45+
);
46+
47+
$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);
48+
49+
self::assertSame(DownloadUrlMethod::WindowsBinaryDownload, $downloadUrlMethod);
50+
51+
self::assertSame(
52+
[
53+
'php_foo-1.2.3-8.3-nts-vc15-x86_64.zip',
54+
'php_foo-1.2.3-8.3-vc15-nts-x86_64.zip',
55+
],
56+
$downloadUrlMethod->possibleAssetNames($package, $targetPlatform),
57+
);
1758
}
1859

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

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

test/unit/Platform/PrePackagedSourceAssetNameTest.php

Lines changed: 20 additions & 1 deletion
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)