mirror of
https://github.com/laravel/valet.git
synced 2026-02-04 08:10:07 +01:00
Update test suite to phpunit 9.5 syntax Refactored to use polyfill for older PHP versions via `yoast/phpunit-polyfills` Note: this includes 2 important differences from usual phpunit test suites: - instead of extending `PHPUnit\Framework\TestCase` we extend `Yoast\PHPUnitPolyfills\TestCases\TestCase` - instead of handling fixtures via `setUp()` and `tearDown()` we use `set_up()` and `tear_down()` respectively Comment regarding formatting: I chose to use the FQDN in the `extends` syntax of the class declaration instead of using `use` so that it is more quickly apparent that we're doing something slightly different than usual phpunit syntax, particularly in regards to the set_up() / tear_down() methods that appear immediately following the `extends` line.
137 lines
4.4 KiB
PHP
137 lines
4.4 KiB
PHP
<?php
|
|
|
|
use Valet\Brew;
|
|
use Valet\PhpFpm;
|
|
use Valet\Filesystem;
|
|
use Valet\CommandLine;
|
|
use function Valet\user;
|
|
use function Valet\swap;
|
|
use function Valet\resolve;
|
|
use Illuminate\Container\Container;
|
|
|
|
class PhpFpmTest extends Yoast\PHPUnitPolyfills\TestCases\TestCase
|
|
{
|
|
public function set_up()
|
|
{
|
|
$_SERVER['SUDO_USER'] = user();
|
|
|
|
Container::setInstance(new Container);
|
|
}
|
|
|
|
public function tear_down()
|
|
{
|
|
exec('rm -rf '.__DIR__.'/output');
|
|
mkdir(__DIR__.'/output');
|
|
touch(__DIR__.'/output/.gitkeep');
|
|
|
|
Mockery::close();
|
|
}
|
|
|
|
public function test_fpm_is_configured_with_the_correct_user_group_and_port()
|
|
{
|
|
copy(__DIR__.'/files/fpm.conf', __DIR__.'/output/fpm.conf');
|
|
mkdir(__DIR__.'/output/conf.d');
|
|
copy(__DIR__.'/files/php-memory-limits.ini', __DIR__.'/output/conf.d/php-memory-limits.ini');
|
|
resolve(StubForUpdatingFpmConfigFiles::class)->updateConfiguration();
|
|
$contents = file_get_contents(__DIR__.'/output/fpm.conf');
|
|
$this->assertStringContainsString(sprintf("\nuser = %s", user()), $contents);
|
|
$this->assertStringContainsString("\ngroup = staff", $contents);
|
|
$this->assertStringContainsString("\nlisten = ".VALET_HOME_PATH."/valet.sock", $contents);
|
|
}
|
|
|
|
public function test_stopRunning_will_pass_filtered_result_of_getRunningServices_to_stopService()
|
|
{
|
|
$brewMock = Mockery::mock(Brew::class);
|
|
$brewMock->shouldReceive('getRunningServices')->once()
|
|
->andReturn(collect([
|
|
'php7.2',
|
|
'php@7.3',
|
|
'php56',
|
|
'php',
|
|
'nginx',
|
|
'somethingelse',
|
|
]));
|
|
$brewMock->shouldReceive('stopService')->once()->with([
|
|
'php7.2',
|
|
'php@7.3',
|
|
'php56',
|
|
'php',
|
|
]);
|
|
|
|
swap(Brew::class, $brewMock);
|
|
resolve(PhpFpm::class)->stopRunning();
|
|
}
|
|
|
|
public function test_use_version_will_convert_passed_php_version()
|
|
{
|
|
$brewMock = Mockery::mock(Brew::class);
|
|
$phpFpmMock = Mockery::mock(PhpFpm::class, [
|
|
$brewMock,
|
|
resolve(CommandLine::class),
|
|
resolve(Filesystem::class),
|
|
])->makePartial();
|
|
|
|
$phpFpmMock->shouldReceive('install');
|
|
|
|
$brewMock->shouldReceive('supportedPhpVersions')->twice()->andReturn(collect([
|
|
'php@7.2',
|
|
'php@5.6',
|
|
]));
|
|
$brewMock->shouldReceive('hasLinkedPhp')->andReturn(false);
|
|
$brewMock->shouldReceive('ensureInstalled')->with('php@7.2');
|
|
$brewMock->shouldReceive('link')->withArgs(['php@7.2', true]);
|
|
|
|
// Test both non prefixed and prefixed
|
|
$this->assertSame('php@7.2', $phpFpmMock->useVersion('php7.2'));
|
|
$this->assertSame('php@7.2', $phpFpmMock->useVersion('php72'));
|
|
}
|
|
|
|
public function test_use_version_will_throw_if_version_not_supported()
|
|
{
|
|
$this->expectException(DomainException::class);
|
|
|
|
$brewMock = Mockery::mock(Brew::class);
|
|
swap(Brew::class, $brewMock);
|
|
|
|
$brewMock->shouldReceive('supportedPhpVersions')->andReturn(collect([
|
|
'php@7.3',
|
|
'php@7.1',
|
|
]));
|
|
|
|
resolve(PhpFpm::class)->useVersion('php@7.2');
|
|
}
|
|
|
|
public function test_use_version_if_already_linked_php_will_unlink_before_installing()
|
|
{
|
|
$brewMock = Mockery::mock(Brew::class);
|
|
$phpFpmMock = Mockery::mock(PhpFpm::class, [
|
|
$brewMock,
|
|
resolve(CommandLine::class),
|
|
resolve(Filesystem::class),
|
|
])->makePartial();
|
|
$phpFpmMock->shouldReceive('install');
|
|
|
|
$brewMock->shouldReceive('supportedPhpVersions')->andReturn(collect([
|
|
'php@7.2',
|
|
'php@5.6',
|
|
]));
|
|
$brewMock->shouldReceive('hasLinkedPhp')->andReturn(true);
|
|
$brewMock->shouldReceive('getLinkedPhpFormula')->andReturn('php@7.1');
|
|
$brewMock->shouldReceive('unlink')->with('php@7.1');
|
|
$brewMock->shouldReceive('ensureInstalled')->with('php@7.2');
|
|
$brewMock->shouldReceive('link')->withArgs(['php@7.2', true]);
|
|
|
|
// Test both non prefixed and prefixed
|
|
$this->assertSame('php@7.2', $phpFpmMock->useVersion('php@7.2'));
|
|
}
|
|
}
|
|
|
|
|
|
class StubForUpdatingFpmConfigFiles extends PhpFpm
|
|
{
|
|
function fpmConfigPath()
|
|
{
|
|
return __DIR__.'/output/fpm.conf';
|
|
}
|
|
}
|