Skip to content

Commit

Permalink
Add remaining unit tests for download URL override
Browse files Browse the repository at this point in the history
  • Loading branch information
asgrim committed Feb 6, 2025
1 parent 9f5e15a commit 70639a7
Show file tree
Hide file tree
Showing 3 changed files with 247 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Composer\Installer\InstallerEvents;
use Composer\IO\IOInterface;
use Composer\Package\CompletePackage;
use Composer\Package\Package;
use Php\Pie\ComposerIntegration\Listeners\OverrideDownloadUrlInstallListener;
use Php\Pie\ComposerIntegration\PieComposerRequest;
use Php\Pie\ComposerIntegration\PieOperation;
Expand Down Expand Up @@ -87,17 +88,140 @@ public function testEventListenerRegistration(): void

public function testNonInstallOperationsAreIgnored(): void
{
self::markTestIncomplete('todo'); // @todo
$composerPackage = new CompletePackage('foo/bar', '1.2.3.0', '1.2.3');
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');

/**
* @psalm-suppress InternalClass
* @psalm-suppress InternalMethod
*/
$installerEvent = new InstallerEvent(
InstallerEvents::PRE_OPERATIONS_EXEC,
$this->composer,
$this->io,
false,
true,
new Transaction([$composerPackage], []),
);

$this->container
->expects(self::never())
->method('get');

(new OverrideDownloadUrlInstallListener(
$this->composer,
$this->io,
$this->container,
new PieComposerRequest(
$this->createMock(OutputInterface::class),
new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
WindowsCompiler::VC15,
),
new RequestedPackageAndVersion('foo/bar', '^1.1'),
PieOperation::Install,
[],
null,
false,
),
))($installerEvent);
}

public function testNonCompletePackagesAreIgnored(): void
{
self::markTestIncomplete('todo'); // @todo
$composerPackage = new Package('foo/bar', '1.2.3.0', '1.2.3');
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');

/**
* @psalm-suppress InternalClass
* @psalm-suppress InternalMethod
*/
$installerEvent = new InstallerEvent(
InstallerEvents::PRE_OPERATIONS_EXEC,
$this->composer,
$this->io,
false,
true,
new Transaction([], [$composerPackage]),
);

$this->container
->expects(self::never())
->method('get');

(new OverrideDownloadUrlInstallListener(
$this->composer,
$this->io,
$this->container,
new PieComposerRequest(
$this->createMock(OutputInterface::class),
new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
WindowsCompiler::VC15,
),
new RequestedPackageAndVersion('foo/bar', '^1.1'),
PieOperation::Install,
[],
null,
false,
),
))($installerEvent);
}

public function testInstallOperationsForDifferentPackagesAreIgnored(): void
{
self::markTestIncomplete('todo'); // @todo
$composerPackage = new CompletePackage('different/package', '1.2.3.0', '1.2.3');
$composerPackage->setDistUrl('https://example.com/git-archive-zip-url');

/**
* @psalm-suppress InternalClass
* @psalm-suppress InternalMethod
*/
$installerEvent = new InstallerEvent(
InstallerEvents::PRE_OPERATIONS_EXEC,
$this->composer,
$this->io,
false,
true,
new Transaction([], [$composerPackage]),
);

$this->container
->expects(self::never())
->method('get');

(new OverrideDownloadUrlInstallListener(
$this->composer,
$this->io,
$this->container,
new PieComposerRequest(
$this->createMock(OutputInterface::class),
new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
WindowsCompiler::VC15,
),
new RequestedPackageAndVersion('foo/bar', '^1.1'),
PieOperation::Install,
[],
null,
false,
),
))($installerEvent);
}

public function testWindowsUrlInstallerDoesNotRunOnNonWindows(): void
Expand Down
103 changes: 100 additions & 3 deletions test/unit/Downloading/DownloadUrlMethodTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,19 @@

namespace Php\PieUnitTest\Downloading;

use Composer\Package\CompletePackage;
use Composer\Package\CompletePackageInterface;
use Php\Pie\DependencyResolver\Package;
use Php\Pie\Downloading\DownloadUrlMethod;
use Php\Pie\ExtensionName;
use Php\Pie\ExtensionType;
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 Php\Pie\Platform\WindowsCompiler;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;

Expand All @@ -13,16 +25,101 @@ final class DownloadUrlMethodTest extends TestCase
{
public function testWindowsPackages(): void
{
self::markTestIncomplete('todo'); // @todo
$package = new Package(
$this->createMock(CompletePackageInterface::class),
ExtensionType::PhpModule,
ExtensionName::normaliseFromString('foo'),
'foo/foo',
'1.2.3',
null,
);

$phpBinaryPath = $this->createMock(PhpBinaryPath::class);
$phpBinaryPath
->method('majorMinorVersion')
->willReturn('8.1');

$targetPlatform = new TargetPlatform(
OperatingSystem::Windows,
OperatingSystemFamily::Windows,
$phpBinaryPath,
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
WindowsCompiler::VC15,
);

$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);

self::assertSame(DownloadUrlMethod::WindowsBinaryDownload, $downloadUrlMethod);

self::assertSame(
[
'php_foo-1.2.3-8.1-nts-vc15-x86_64.zip',
'php_foo-1.2.3-8.1-vc15-nts-x86_64.zip',
],
$downloadUrlMethod->possibleAssetNames($package, $targetPlatform),
);
}

public function testPrePackagedSourceDownloads(): void
{
self::markTestIncomplete('todo'); // @todo
$composerPackage = $this->createMock(CompletePackage::class);
$composerPackage->method('getPrettyName')->willReturn('foo/bar');
$composerPackage->method('getPrettyVersion')->willReturn('1.2.3');
$composerPackage->method('getType')->willReturn('php-ext');
$composerPackage->method('getPhpExt')->willReturn(['download-url-method' => 'pre-packaged-source']);

$package = Package::fromComposerCompletePackage($composerPackage);

$targetPlatform = new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
null,
);

$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);

self::assertSame(DownloadUrlMethod::PrePackagedSourceDownload, $downloadUrlMethod);

self::assertSame(
[
'php_bar-1.2.3-src.tgz',
'php_bar-1.2.3-src.zip',
],
$downloadUrlMethod->possibleAssetNames($package, $targetPlatform),
);
}

public function testComposerDefaultDownload(): void
{
self::markTestIncomplete('todo'); // @todo
$package = new Package(
$this->createMock(CompletePackageInterface::class),
ExtensionType::PhpModule,
ExtensionName::normaliseFromString('foo'),
'foo/foo',
'1.2.3',
null,
);

$targetPlatform = new TargetPlatform(
OperatingSystem::NonWindows,
OperatingSystemFamily::Linux,
PhpBinaryPath::fromCurrentProcess(),
Architecture::x86_64,
ThreadSafetyMode::NonThreadSafe,
1,
null,
);

$downloadUrlMethod = DownloadUrlMethod::fromPackage($package, $targetPlatform);

self::assertSame(DownloadUrlMethod::ComposerDefaultDownload, $downloadUrlMethod);

self::assertNull($downloadUrlMethod->possibleAssetNames($package, $targetPlatform));
}
}
21 changes: 20 additions & 1 deletion test/unit/Platform/PrePackagedSourceAssetNameTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

namespace Php\PieUnitTest\Platform;

use Composer\Package\CompletePackageInterface;
use Php\Pie\DependencyResolver\Package;
use Php\Pie\ExtensionName;
use Php\Pie\ExtensionType;
use Php\Pie\Platform\PrePackagedSourceAssetName;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
Expand All @@ -13,6 +17,21 @@ final class PrePackagedSourceAssetNameTest extends TestCase
{
public function testPackageNames(): void
{
self::markTestIncomplete('todo'); // @todo
self::assertSame(
[
'php_foobar-1.2.3-src.tgz',
'php_foobar-1.2.3-src.zip',
],
PrePackagedSourceAssetName::packageNames(
new Package(
$this->createMock(CompletePackageInterface::class),
ExtensionType::PhpModule,
ExtensionName::normaliseFromString('foobar'),
'foo/bar',
'1.2.3',
null,
),
),
);
}
}

0 comments on commit 70639a7

Please sign in to comment.