From 4eea209a3723c4dd1f7ef0f4f9aa2fa637714896 Mon Sep 17 00:00:00 2001 From: Ruud Kamphuis Date: Thu, 3 Oct 2024 13:51:04 +0200 Subject: [PATCH] Fix broken link format detection This broke in #10. The condition was wrong. Added tests to assure this won't break again. --- extension.neon | 1 + src/TicketSwapErrorFormatter.php | 20 +++++++++---- tests/TicketSwapErrorFormatterTest.php | 41 +++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/extension.neon b/extension.neon index 8183821..24bc47f 100644 --- a/extension.neon +++ b/extension.neon @@ -5,3 +5,4 @@ services: relativePathHelper: '@simpleRelativePathHelper' ciDetectedErrorFormatter: '@PHPStan\Command\ErrorFormatter\CiDetectedErrorFormatter' editorUrl: '%editorUrl%' + environmentVariables: '%env%' diff --git a/src/TicketSwapErrorFormatter.php b/src/TicketSwapErrorFormatter.php index 4aa6049..67a8e96 100644 --- a/src/TicketSwapErrorFormatter.php +++ b/src/TicketSwapErrorFormatter.php @@ -27,31 +27,39 @@ final class TicketSwapErrorFormatter implements ErrorFormatter private ErrorFormatter $ciDetectedErrorFormatter; private ?string $editorUrl; + /** + * @param RelativePathHelper $relativePathHelper + * @param ErrorFormatter $ciDetectedErrorFormatter + * @param string|null $editorUrl + * @param array $environmentVariables + */ public function __construct( RelativePathHelper $relativePathHelper, ErrorFormatter $ciDetectedErrorFormatter, - ?string $editorUrl = null + ?string $editorUrl, + array $environmentVariables ) { $this->relativePathHelper = $relativePathHelper; $this->ciDetectedErrorFormatter = $ciDetectedErrorFormatter; $this->editorUrl = $editorUrl; - $this->linkFormat = self::getLinkFormatFromEnv(); + $this->linkFormat = self::getLinkFormatFromEnv($environmentVariables); } /** + * @param array $environmentVariables * @return self::LINK_FORMAT_* */ - public static function getLinkFormatFromEnv() : string + public static function getLinkFormatFromEnv(array $environmentVariables) : string { - if (getenv('GITHUB_ACTIONS') !== false) { + if (isset($environmentVariables['GITHUB_ACTIONS'])) { return self::LINK_FORMAT_GITHUB_ACTIONS; } - if (getenv('TERMINAL_EMULATOR') !== 'JetBrains-JediTerm') { + if (isset($environmentVariables['TERMINAL_EMULATOR']) && $environmentVariables['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm') { return self::LINK_FORMAT_PHPSTORM; } - if (getenv('TERM_PROGRAM') !== 'WarpTerminal') { + if (isset($environmentVariables['TERM_PROGRAM']) && $environmentVariables['TERM_PROGRAM'] === 'WarpTerminal') { return self::LINK_FORMAT_WARP; } diff --git a/tests/TicketSwapErrorFormatterTest.php b/tests/TicketSwapErrorFormatterTest.php index 7896852..2686e29 100644 --- a/tests/TicketSwapErrorFormatterTest.php +++ b/tests/TicketSwapErrorFormatterTest.php @@ -31,7 +31,46 @@ public function formatErrors(AnalysisResult $analysisResult, Output $output): in return 0; } }, - self::PHPSTOR_EDITOR_URL + self::PHPSTOR_EDITOR_URL, + [] + ); + } + + /** + * @return iterable}> + */ + public static function provideLinkFormatFromEnv() : iterable + { + yield 'GitHub Actions' => [ + TicketSwapErrorFormatter::LINK_FORMAT_GITHUB_ACTIONS, + ['GITHUB_ACTIONS' => 'true'], + ]; + yield 'JetBrains' => [ + TicketSwapErrorFormatter::LINK_FORMAT_PHPSTORM, + ['TERMINAL_EMULATOR' => 'JetBrains-JediTerm'], + ]; + yield 'Warp' => [ + TicketSwapErrorFormatter::LINK_FORMAT_WARP, + ['TERM_PROGRAM' => 'WarpTerminal'], + ]; + yield 'Ghostty' => [ + TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT, + ['TERM_PROGRAM' => 'ghostty'], + ]; + yield 'Default' => [ + TicketSwapErrorFormatter::LINK_FORMAT_DEFAULT, + [], + ]; + } + + /** + * @dataProvider provideLinkFormatFromEnv + */ + public function testGetLinkFormatFromEnv(string $expected, array $environmentVariables) : void + { + self::assertSame( + $expected, + TicketSwapErrorFormatter::getLinkFormatFromEnv($environmentVariables) ); }