diff --git a/cli/Valet/Brew.php b/cli/Valet/Brew.php
index a2e5055d7..648ee6842 100644
--- a/cli/Valet/Brew.php
+++ b/cli/Valet/Brew.php
@@ -41,14 +41,23 @@ function __construct(CommandLine $cli, Filesystem $files)
}
/**
- * Determine if the given formula is installed.
+ * Ensure the formula exists in the current Homebrew configuration
*
* @param string $formula
* @return bool
*/
function installed($formula)
{
- return in_array($formula, explode(PHP_EOL, $this->cli->runAsUser('brew list --formula | grep '.$formula)));
+ $result = $this->cli->runAsUser("brew info $formula --json");
+
+ // should be a json response, but if not installed then "Error: No available formula ..."
+ if (starts_with($result, 'Error: No')) {
+ return false;
+ }
+
+ $details = json_decode($result);
+
+ return !empty($details[0]->installed);
}
/**
@@ -58,9 +67,11 @@ function installed($formula)
*/
function hasInstalledPhp()
{
- return $this->supportedPhpVersions()->contains(function ($version) {
- return $this->installed($version);
+ $installed = $this->installedPhpFormulae()->first(function ($formula) {
+ return $this->supportedPhpVersions()->contains($formula);
});
+
+ return !empty($installed);
}
/**
@@ -73,13 +84,25 @@ function supportedPhpVersions()
return collect(static::SUPPORTED_PHP_VERSIONS);
}
+ function installedPhpFormulae()
+ {
+ return collect(
+ explode(PHP_EOL, $this->cli->runAsUser('brew list --formula | grep php'))
+ );
+ }
+
/**
* Get the aliased formula version from Homebrew
*/
function determineAliasedVersion($formula)
{
$details = json_decode($this->cli->runAsUser("brew info $formula --json"));
- return $details[0]->aliases[0] ?: 'ERROR - NO BREW ALIAS FOUND';
+
+ if (!empty($details[0]->aliases[0])) {
+ return $details[0]->aliases[0];
+ }
+
+ return 'ERROR - NO BREW ALIAS FOUND';
}
/**
@@ -135,6 +158,9 @@ function installOrFail($formula, $options = [], $taps = [])
}
output('['.$formula.'] is not installed, installing it now via Brew... 🍻');
+ if ($formula !== 'php' && starts_with($formula, 'php') && preg_replace('/[^\d]/', '', $formula) < '73') {
+ warning('Note: older PHP versions may take 10+ minutes to compile from source. Please wait ...');
+ }
$this->cli->runAsUser(trim('brew install '.$formula.' '.implode(' ', $options)), function ($exitCode, $errorOutput) use ($formula) {
output($errorOutput);
@@ -213,16 +239,16 @@ function hasLinkedPhp()
function getParsedLinkedPhp()
{
if (! $this->hasLinkedPhp()) {
- throw new DomainException("Homebrew PHP appears not to be linked.");
+ throw new DomainException("Homebrew PHP appears not to be linked. Please run [valet use php@X.Y]");
}
$resolvedPath = $this->files->readLink(BREW_PREFIX.'/bin/php');
/**
* Typical homebrew path resolutions are like:
- * "../Cellar/php@7.2/7.2.13/bin/php"
+ * "../Cellar/php@7.4/7.4.13/bin/php"
* or older styles:
- * "../Cellar/php/7.2.9_2/bin/php
+ * "../Cellar/php/7.4.9_2/bin/php
* "../Cellar/php55/bin/php
*/
preg_match('~\w{3,}/(php)(@?\d\.?\d)?/(\d\.\d)?([_\d\.]*)?/?\w{3,}~', $resolvedPath, $matches);
@@ -231,12 +257,11 @@ function getParsedLinkedPhp()
}
/**
- * Gets the currently linked formula
- * E.g if under php, will be php, if under php@7.3 will be that
- * Different to ->linkedPhp() in that this will just get the linked directory name (whether that is php, php55 or
- * php@7.2)
+ * Gets the currently linked formula by identifying the symlink in the hombrew bin directory.
+ * Different to ->linkedPhp() in that this will just get the linked directory name,
+ * whether that is php, php74 or php@7.4
*
- * @return mixed
+ * @return string
*/
function getLinkedPhpFormula()
{
diff --git a/cli/Valet/Diagnose.php b/cli/Valet/Diagnose.php
index a233db5e5..9a8cc3abf 100644
--- a/cli/Valet/Diagnose.php
+++ b/cli/Valet/Diagnose.php
@@ -20,6 +20,7 @@ class Diagnose
'brew services list',
'brew list --formula --versions | grep -E "(php|nginx|dnsmasq|mariadb|mysql|mailhog|openssl)(@\d\..*)?\s"',
'brew outdated',
+ 'brew tap',
'php -v',
'which -a php',
'php --ini',
diff --git a/cli/Valet/PhpFpm.php b/cli/Valet/PhpFpm.php
index d899e9be5..75b905679 100644
--- a/cli/Valet/PhpFpm.php
+++ b/cli/Valet/PhpFpm.php
@@ -9,7 +9,8 @@ class PhpFpm
var $brew, $cli, $files;
var $taps = [
- 'homebrew/homebrew-core'
+ 'homebrew/homebrew-core',
+ 'shivammathur/php',
];
/**
@@ -142,11 +143,8 @@ function fpmConfigPath()
{
$version = $this->brew->linkedPhp();
- $versionNormalized = preg_replace(
- '/php@?(\d)\.?(\d)/',
- '$1.$2',
- $version === 'php' ? Brew::LATEST_PHP_VERSION : $version
- );
+ $versionNormalized = $this->normalizePhpVersion($version === 'php' ? Brew::LATEST_PHP_VERSION : $version);
+ $versionNormalized = preg_replace('~[^\d\.]~', '', $versionNormalized);
return $versionNormalized === '5.6'
? BREW_PREFIX.'/etc/php/5.6/php-fpm.conf'
@@ -171,14 +169,26 @@ function stopRunning()
* Use a specific version of php
*
* @param $version
+ * @param $force
* @return string
*/
- function useVersion($version)
+ function useVersion($version, $force = false)
{
$version = $this->validateRequestedVersion($version);
- // Install the relevant formula if not already installed
- $this->brew->ensureInstalled($version);
+ try {
+ if ($this->brew->linkedPhp() === $version && !$force) {
+ output(sprintf('Valet is already using version: %s. To re-link and re-configure use the --force parameter.' . PHP_EOL,
+ $version));
+ exit();
+ }
+ } catch (DomainException $e)
+ { /* ignore thrown exception when no linked php is found */ }
+
+ if (!$this->brew->installed($version)) {
+ // Install the relevant formula if not already installed
+ $this->brew->ensureInstalled($version, [], $this->taps);
+ }
// Unlink the current php if there is one
if ($this->brew->hasLinkedPhp()) {
@@ -190,11 +200,23 @@ function useVersion($version)
info(sprintf('Linking new version: %s', $version));
$this->brew->link($version, true);
+ $this->stopRunning();
+
+ // ensure configuration is correct and start the linked version
$this->install();
return $version === 'php' ? $this->brew->determineAliasedVersion($version) : $version;
}
+
+ /**
+ * If passed php7.4 or php74 formats, normalize to php@7.4 format.
+ */
+ function normalizePhpVersion($version)
+ {
+ return preg_replace('/(php)([0-9+])(?:.)?([0-9+])/i', '$1@$2.$3', $version);
+ }
+
/**
* Validate the requested version to be sure we can support it.
*
@@ -203,18 +225,7 @@ function useVersion($version)
*/
function validateRequestedVersion($version)
{
- // If passed php7.2 or php72 formats, normalize to php@7.2 format:
- $version = preg_replace('/(php)([0-9+])(?:.)?([0-9+])/i', '$1@$2.$3', $version);
-
- if ($version === 'php') {
- if (strpos($this->brew->determineAliasedVersion($version), '@')) {
- return $version;
- }
-
- if ($this->brew->hasInstalledPhp()) {
- throw new DomainException('Brew is already using PHP '.PHP_VERSION.' as \'php\' in Homebrew. To use another version, please specify. eg: php@7.3');
- }
- }
+ $version = $this->normalizePhpVersion($version);
if (!$this->brew->supportedPhpVersions()->contains($version)) {
throw new DomainException(
@@ -225,6 +236,20 @@ function validateRequestedVersion($version)
);
}
+ if (strpos($aliasedVersion = $this->brew->determineAliasedVersion($version), '@')) {
+ return $aliasedVersion;
+ }
+
+ if ($version === 'php') {
+ if (strpos($aliasedVersion = $this->brew->determineAliasedVersion($version), '@')) {
+ return $aliasedVersion;
+ }
+
+ if ($this->brew->hasInstalledPhp()) {
+ throw new DomainException('Brew is already using PHP '.PHP_VERSION.' as \'php\' in Homebrew. To use another version, please specify. eg: php@7.3');
+ }
+ }
+
return $version;
}
}
diff --git a/cli/includes/helpers.php b/cli/includes/helpers.php
index 7e1924876..50ec48de3 100644
--- a/cli/includes/helpers.php
+++ b/cli/includes/helpers.php
@@ -172,6 +172,26 @@ function ends_with($haystack, $needles) {
}
}
+if (! function_exists('starts_with')) {
+ /**
+ * Determine if a given string starts with a given substring.
+ *
+ * @param string $haystack
+ * @param string|string[] $needles
+ * @return bool
+ */
+ function starts_with($haystack, $needles)
+ {
+ foreach ((array) $needles as $needle) {
+ if ((string) $needle !== '' && strncmp($haystack, $needle, strlen($needle)) === 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
+
/**
* Get the user
*/
diff --git a/cli/valet.php b/cli/valet.php
index 03190ff52..43cf10b20 100755
--- a/cli/valet.php
+++ b/cli/valet.php
@@ -462,11 +462,14 @@
/**
* Allow the user to change the version of php valet uses
*/
- $app->command('use phpVersion', function ($phpVersion) {
+ $app->command('use [phpVersion] [--force]', function ($phpVersion, $force) {
+ if (!$phpVersion) {
+ return info('Valet is using ' . Brew::linkedPhp());
+ }
+
PhpFpm::validateRequestedVersion($phpVersion);
- PhpFpm::stopRunning();
- $newVersion = PhpFpm::useVersion($phpVersion);
+ $newVersion = PhpFpm::useVersion($phpVersion, $force);
Nginx::restart();
info(sprintf('Valet is now using %s.', $newVersion) . PHP_EOL);
diff --git a/tests/BrewTest.php b/tests/BrewTest.php
index 4151a591c..c4bf43a9e 100644
--- a/tests/BrewTest.php
+++ b/tests/BrewTest.php
@@ -31,13 +31,14 @@ public function test_brew_can_be_resolved_from_container()
public function test_installed_returns_true_when_given_formula_is_installed()
{
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep php@7.4')->andReturn('php@7.4');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info php@7.4 --json')
+ ->andReturn('[{"name":"php@7.4","full_name":"php@7.4","aliases":[],"versioned_formulae":[],"versions":{"stable":"7.4.5"},"installed":[{"version":"7.4.5"}]}]');
swap(CommandLine::class, $cli);
$this->assertTrue(resolve(Brew::class)->installed('php@7.4'));
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep php')->andReturn('php
-php@7.4');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info php --json')
+ ->andReturn('[{"name":"php","full_name":"php","aliases":["php@8.0"],"versioned_formulae":[],"versions":{"stable":"8.0.0"},"installed":[{"version":"8.0.0"}]}]');
swap(CommandLine::class, $cli);
$this->assertTrue(resolve(Brew::class)->installed('php'));
}
@@ -45,150 +46,61 @@ public function test_installed_returns_true_when_given_formula_is_installed()
public function test_installed_returns_false_when_given_formula_is_not_installed()
{
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep php@7.4')->andReturn('');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info php@7.4 --json')->andReturn('');
swap(CommandLine::class, $cli);
$this->assertFalse(resolve(Brew::class)->installed('php@7.4'));
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep php@7.4')->andReturn('php');
- swap(CommandLine::class, $cli);
- $this->assertFalse(resolve(Brew::class)->installed('php@7.4'));
-
- $cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep php@7.4')->andReturn('php
-something-else-php@7.4
-php7');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info php@7.4 --json')->andReturn('Error: No formula found');
swap(CommandLine::class, $cli);
$this->assertFalse(resolve(Brew::class)->installed('php@7.4'));
}
public function test_has_installed_php_indicates_if_php_is_installed_via_brew()
{
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(true);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@5.5']));
+ $this->assertFalse($brew->hasInstalledPhp());
+
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@8.1']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(true);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@8.0']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(true);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@7.4']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(true);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@7.3']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(true);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(true);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php73']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(true);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(true);
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@7.2', 'php72']));
$this->assertTrue($brew->hasInstalledPhp());
- $brew = Mockery::mock(Brew::class.'[installed]', [new CommandLine, new Filesystem]);
- $brew->shouldReceive('installed')->with('php')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@8.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.4')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.3')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.2')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.1')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@7.0')->andReturn(false);
- $brew->shouldReceive('installed')->with('php@5.6')->andReturn(false);
- $brew->shouldReceive('installed')->with('php74')->andReturn(false);
- $brew->shouldReceive('installed')->with('php73')->andReturn(false);
- $brew->shouldReceive('installed')->with('php72')->andReturn(false);
- $brew->shouldReceive('installed')->with('php71')->andReturn(false);
- $brew->shouldReceive('installed')->with('php70')->andReturn(false);
- $brew->shouldReceive('installed')->with('php56')->andReturn(false);
- $this->assertFalse($brew->hasInstalledPhp());
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php71', 'php@7.1']));
+ $this->assertTrue($brew->hasInstalledPhp());
+
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@7.0']));
+ $this->assertTrue($brew->hasInstalledPhp());
+
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php@5.6']));
+ $this->assertTrue($brew->hasInstalledPhp());
+
+ $brew = Mockery::mock(Brew::class.'[installedPhpFormulae]', [new CommandLine, new Filesystem]);
+ $brew->shouldReceive('installedPhpFormulae')->andReturn(collect(['php56']));
+ $this->assertTrue($brew->hasInstalledPhp());
}
public function test_tap_taps_the_given_homebrew_repository()
@@ -204,7 +116,7 @@ public function test_tap_taps_the_given_homebrew_repository()
public function test_restart_restarts_the_service_using_homebrew_services()
{
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep dnsmasq')->andReturn('dnsmasq');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info dnsmasq --json')->andReturn('[{"name":"dnsmasq","full_name":"dnsmasq","aliases":[],"versioned_formulae":[],"versions":{"stable":"1"},"installed":[{"version":"1"}]}]');
$cli->shouldReceive('quietly')->once()->with('sudo brew services stop dnsmasq');
$cli->shouldReceive('quietly')->once()->with('sudo brew services start dnsmasq');
swap(CommandLine::class, $cli);
@@ -214,7 +126,7 @@ public function test_restart_restarts_the_service_using_homebrew_services()
public function test_stop_stops_the_service_using_homebrew_services()
{
$cli = Mockery::mock(CommandLine::class);
- $cli->shouldReceive('runAsUser')->once()->with('brew list --formula | grep dnsmasq')->andReturn('dnsmasq');
+ $cli->shouldReceive('runAsUser')->once()->with('brew info dnsmasq --json')->andReturn('[{"name":"dnsmasq","full_name":"dnsmasq","aliases":[],"versioned_formulae":[],"versions":{"stable":"1"},"installed":[{"version":"1"}]}]');
$cli->shouldReceive('quietly')->once()->with('sudo brew services stop dnsmasq');
swap(CommandLine::class, $cli);
resolve(Brew::class)->stopService('dnsmasq');
diff --git a/tests/PhpFpmTest.php b/tests/PhpFpmTest.php
index db10eeb20..1fa7de322 100644
--- a/tests/PhpFpmTest.php
+++ b/tests/PhpFpmTest.php
@@ -78,8 +78,13 @@ public function test_use_version_will_convert_passed_php_version()
'php@5.6',
]));
$brewMock->shouldReceive('hasLinkedPhp')->andReturn(false);
- $brewMock->shouldReceive('ensureInstalled')->with('php@7.2');
+ $brewMock->shouldReceive('ensureInstalled')->with('php@7.2', [], $phpFpmMock->taps);
+ $brewMock->shouldReceive('determineAliasedVersion')->with('php@7.2')->andReturn('php@7.2');
$brewMock->shouldReceive('link')->withArgs(['php@7.2', true]);
+ $brewMock->shouldReceive('linkedPhp');
+ $brewMock->shouldReceive('installed');
+ $brewMock->shouldReceive('getRunningServices')->andReturn(collect());
+ $brewMock->shouldReceive('stopService');
// Test both non prefixed and prefixed
$this->assertSame('php@7.2', $phpFpmMock->useVersion('php7.2'));
@@ -118,8 +123,13 @@ public function test_use_version_if_already_linked_php_will_unlink_before_instal
$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('ensureInstalled')->with('php@7.2', [], $phpFpmMock->taps);
+ $brewMock->shouldReceive('determineAliasedVersion')->with('php@7.2')->andReturn('php@7.2');
$brewMock->shouldReceive('link')->withArgs(['php@7.2', true]);
+ $brewMock->shouldReceive('linkedPhp');
+ $brewMock->shouldReceive('installed');
+ $brewMock->shouldReceive('getRunningServices')->andReturn(collect());
+ $brewMock->shouldReceive('stopService');
// Test both non prefixed and prefixed
$this->assertSame('php@7.2', $phpFpmMock->useVersion('php@7.2'));