78 lines
2.7 KiB
PHP
78 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Tests\Maintenance;
|
|
|
|
use CheckComposerLockUpToDate;
|
|
|
|
/**
|
|
* @internal Only for use by CheckComposerLockUpToDateTest
|
|
*/
|
|
class SemiMockedCheckComposerLockUpToDate extends CheckComposerLockUpToDate {
|
|
|
|
private string $mockMwInstallPath;
|
|
|
|
/**
|
|
* Set the a mock MW_INSTALL_PATH value for the test.
|
|
*/
|
|
public function setMockMwInstallPath( string $mockMwInstallPath ) {
|
|
$this->mockMwInstallPath = $mockMwInstallPath;
|
|
}
|
|
|
|
protected function getMwInstallPath(): string {
|
|
return $this->mockMwInstallPath;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @covers \CheckComposerLockUpToDate
|
|
* @author Dreamy Jazz
|
|
*/
|
|
class CheckComposerLockUpToDateTest extends MaintenanceBaseTestCase {
|
|
|
|
private const FIXTURE_DIRECTORY = MW_INSTALL_PATH . '/tests/phpunit/data/LockFileChecker';
|
|
|
|
public function getMaintenanceClass() {
|
|
return SemiMockedCheckComposerLockUpToDate::class;
|
|
}
|
|
|
|
public function testCanExecuteWithoutLocalSettings() {
|
|
$this->assertTrue( $this->maintenance->canExecuteWithoutLocalSettings() );
|
|
}
|
|
|
|
public function testWhenNoLockFileFound() {
|
|
// Test that an empty directory as the mediawiki/core install path results in an error.
|
|
$this->expectCallToFatalError();
|
|
$this->expectOutputRegex( '/Could not find composer.lock file/' );
|
|
$testPath = $this->getNewTempDirectory();
|
|
$this->maintenance->setMockMwInstallPath( $testPath );
|
|
$this->maintenance->execute();
|
|
}
|
|
|
|
public function testWhenLockFileOkay() {
|
|
// Get example composer.json and composer.lock files and add them to a fake install directory.
|
|
$testPath = $this->getNewTempDirectory();
|
|
copy( self::FIXTURE_DIRECTORY . '/composer-testcase1.json', $testPath . '/composer.json' );
|
|
copy( self::FIXTURE_DIRECTORY . '/composer-testcase1.lock', $testPath . '/composer.lock' );
|
|
$this->maintenance->setMockMwInstallPath( $testPath );
|
|
$this->maintenance->execute();
|
|
$this->expectOutputRegex( '/Your composer.lock file is up to date with current dependencies/' );
|
|
}
|
|
|
|
public function testWhenLockFileOutdated() {
|
|
// Get example composer.json and composer.lock files and add them to a fake install directory.
|
|
$testPath = $this->getNewTempDirectory();
|
|
copy( self::FIXTURE_DIRECTORY . '/composer-testcase2.json', $testPath . '/composer.json' );
|
|
copy( self::FIXTURE_DIRECTORY . '/composer-testcase2.lock', $testPath . '/composer.lock' );
|
|
$this->maintenance->setMockMwInstallPath( $testPath );
|
|
// Verify that the maintenance script errors out both indicating what is out of date and also
|
|
// how to fix this.
|
|
$this->expectCallToFatalError();
|
|
$this->expectOutputRegex(
|
|
'/wikimedia\/relpath: 2\.9\.9 installed, 3\.0\.0 required[\s\S]*' .
|
|
'Error: your composer.lock file is not up to date.*' .
|
|
'Run "composer update" to install newer dependencies/'
|
|
);
|
|
$this->maintenance->execute();
|
|
}
|
|
}
|