diff --git a/composer.json b/composer.json index 0ec51485..4d77bb41 100644 --- a/composer.json +++ b/composer.json @@ -85,7 +85,6 @@ }, "pest": { "plugins": [ - "Pest\\Plugins\\Thanks", "Pest\\Plugins\\Version" ] }, diff --git a/src/Console/Thanks.php b/src/Console/Thanks.php new file mode 100644 index 00000000..4e3791dc --- /dev/null +++ b/src/Console/Thanks.php @@ -0,0 +1,66 @@ + */ + private const FUNDING_MESSAGES = [ + '', + ' - Star or contribute to Pest:', + ' https://github.com/pestphp/pest', + ' - Tweet something about Pest on Twitter:', + ' https://twitter.com/pestphp', + ' - Sponsor the creator:', + ' https://github.com/sponsors/nunomaduro', + ]; + + /** @var OutputInterface */ + private $output; + + public function __construct(OutputInterface $output) + { + $this->output = $output; + } + + /** + * Asks the user to support Pest. + */ + public function __invoke(): void + { + $wantsToSupport = (new SymfonyQuestionHelper())->ask( + new ArrayInput([]), + $this->output, + new ConfirmationQuestion( + 'Can you quickly star our GitHub repository? 🙏🏻', + true, + ) + ); + + if ($wantsToSupport === true) { + if (PHP_OS_FAMILY == 'Darwin') { + exec('open https://github.com/pestphp/pest'); + } + if (PHP_OS_FAMILY == 'Windows') { + exec('start https://github.com/pestphp/pest'); + } + if (PHP_OS_FAMILY == 'Linux') { + exec('xdg-open https://github.com/pestphp/pest'); + } + } + + foreach (self::FUNDING_MESSAGES as $message) { + $this->output->writeln($message); + } + } +} diff --git a/src/Laravel/Commands/PestInstallCommand.php b/src/Laravel/Commands/PestInstallCommand.php index 8b617c87..1e924e09 100644 --- a/src/Laravel/Commands/PestInstallCommand.php +++ b/src/Laravel/Commands/PestInstallCommand.php @@ -59,6 +59,8 @@ final class PestInstallCommand extends Command $this->output->success('`tests/Pest.php` created successfully.'); $this->output->success('`tests/Helpers.php` created successfully.'); + + (new \Pest\Console\Thanks($this->output))(); } /** diff --git a/src/Plugins/Thanks.php b/src/Plugins/Thanks.php deleted file mode 100644 index eef88dde..00000000 --- a/src/Plugins/Thanks.php +++ /dev/null @@ -1,46 +0,0 @@ - */ - private const FUNDING_MESSAGES = [ - "\n Want to support Pest? Here are some ways you can help:", - "\n - Star or contribute to Pest on GitHub:\n https://github.com/pestphp/pest", - "\n - Tweet about Pest on Twitter:\n https://twitter.com/pestphp", - "\n - Sponsor Nuno Maduro on GitHub:\n https://github.com/sponsors/nunomaduro", - "\n - Sponsor Nuno Maduro on Patreon:\n https://patreon.com/nunomaduro", - ]; - - /** @var OutputInterface */ - private $output; - - public function __construct(OutputInterface $output) - { - $this->output = $output; - } - - public function handleArguments(array $arguments): array - { - if (!in_array(self::THANKS_OPTION, $arguments, true)) { - return $arguments; - } - - foreach (self::FUNDING_MESSAGES as $message) { - $this->output->writeln($message); - } - - exit(0); - } -} diff --git a/tests/.snapshots/success.txt b/tests/.snapshots/success.txt index 825a42c8..09e41270 100644 --- a/tests/.snapshots/success.txt +++ b/tests/.snapshots/success.txt @@ -135,10 +135,6 @@ ✓ it throws exception when `process isolation` is true ✓ it do not throws exception when `process isolation` is false - WARN Tests\Unit\Plugins\Thanks - - it outputs funding options when --thanks is used → The plugin uses `exit()` so not sure how to implement this - ✓ it does not output funding options when --thanks is not used - PASS Tests\Unit\Plugins\Version ✓ it outputs the version when --version is used ✓ it do not outputs version when --version is not used @@ -171,5 +167,5 @@ WARN Tests\Visual\Success - visual snapshot of test suite on success - Tests: 7 skipped, 97 passed - Time: 3.57s + Tests: 6 skipped, 96 passed + Time: 3.43s diff --git a/tests/Unit/Plugins/Thanks.php b/tests/Unit/Plugins/Thanks.php deleted file mode 100644 index 837fbd32..00000000 --- a/tests/Unit/Plugins/Thanks.php +++ /dev/null @@ -1,14 +0,0 @@ -skip('The plugin uses `exit()` so not sure how to implement this'); - -it('does not output funding options when --thanks is not used', function () { - $output = new BufferedOutput(); - $plugin = new Thanks($output); - - $plugin->handleArguments(['foo', 'bar']); - assertEquals('', $output->fetch()); -});