From 28a197079fe22f31c5574fe5fac30c8a9b14611f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20FIDRY?= Date: Sat, 1 Apr 2023 15:35:37 +0200 Subject: [PATCH] refactor: Refactor the extract command to leverage the PharFactory service --- fixtures/extract/corrupted.phar | Bin 6743 -> 0 bytes fixtures/extract/incorrect-key-openssl.phar | Bin 6848 -> 0 bytes .../extract/incorrect-key-openssl.phar.pubkey | 0 fixtures/extract/invalid | 0 fixtures/extract/invalid.phar | 0 fixtures/extract/openssl-no-pubkey.phar | Bin 6848 -> 0 bytes src/Console/Command/Extract.php | 15 +----- tests/Console/Command/ExtractTest.php | 46 ++---------------- 8 files changed, 6 insertions(+), 55 deletions(-) delete mode 100644 fixtures/extract/corrupted.phar delete mode 100644 fixtures/extract/incorrect-key-openssl.phar delete mode 100644 fixtures/extract/incorrect-key-openssl.phar.pubkey delete mode 100644 fixtures/extract/invalid delete mode 100644 fixtures/extract/invalid.phar delete mode 100644 fixtures/extract/openssl-no-pubkey.phar diff --git a/fixtures/extract/corrupted.phar b/fixtures/extract/corrupted.phar deleted file mode 100644 index 90f0a5359ff7152f811cb1ea3f67905a7f50c620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6743 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 diff --git a/fixtures/extract/incorrect-key-openssl.phar.pubkey b/fixtures/extract/incorrect-key-openssl.phar.pubkey deleted file mode 100644 index e69de29bb..000000000 diff --git a/fixtures/extract/invalid b/fixtures/extract/invalid deleted file mode 100644 index e69de29bb..000000000 diff --git a/fixtures/extract/invalid.phar b/fixtures/extract/invalid.phar deleted file mode 100644 index e69de29bb..000000000 diff --git a/fixtures/extract/openssl-no-pubkey.phar b/fixtures/extract/openssl-no-pubkey.phar deleted file mode 100644 index a2cd9b8d04a4bffccc66a6fd474824fc9f6a6e24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6848 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 diff --git a/src/Console/Command/Extract.php b/src/Console/Command/Extract.php index 7bee510cc..57f6d82ee 100644 --- a/src/Console/Command/Extract.php +++ b/src/Console/Command/Extract.php @@ -18,15 +18,13 @@ use Fidry\Console\Command\Configuration; use Fidry\Console\ExitCode; use Fidry\Console\Input\IO; -use KevinGH\Box\Pharaoh\InvalidPhar; +use KevinGH\Box\Phar\PharFactory; use KevinGH\Box\Pharaoh\Pharaoh; use ParagonIE\ConstantTime\Hex; use Phar; -use PharData; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Question\ConfirmationQuestion; use Throwable; -use UnexpectedValueException; use function file_exists; use function KevinGH\Box\check_php_settings; use function KevinGH\Box\FileSystem\copy; @@ -145,7 +143,7 @@ private static function dumpPhar(string $file, string $tmpDir): string copy($pubkey, $tmpPubkey, true); } - $phar = self::createPhar($file, $tmpFile); + $phar = PharFactory::create($tmpFile); $phar->extractTo($tmpDir); } catch (Throwable $throwable) { @@ -186,13 +184,4 @@ private static function getExtension(string $file): string return '' === $extension ? '.phar' : $extension; } - - private static function createPhar(string $file, string $tmpFile): Phar|PharData - { - try { - return new Phar($tmpFile); - } catch (UnexpectedValueException $cannotCreatePhar) { - throw InvalidPhar::forPhar($file, $cannotCreatePhar); - } - } } diff --git a/tests/Console/Command/ExtractTest.php b/tests/Console/Command/ExtractTest.php index 9c3a3a156..db7c18037 100644 --- a/tests/Console/Command/ExtractTest.php +++ b/tests/Console/Command/ExtractTest.php @@ -208,11 +208,8 @@ public static function confirmationQuestionProvider(): iterable /** * @dataProvider invalidPharPath */ - public function test_it_cannot_extract_an_invalid_phar( - string $pharPath, - string $exceptionClassName, - string $expectedExceptionMessage, - ): void { + public function test_it_cannot_extract_an_invalid_phar(string $pharPath): void + { try { $this->commandTester->execute( [ @@ -228,48 +225,13 @@ public function test_it_cannot_extract_an_invalid_phar( // Continue } - self::assertSame( - $exceptionClassName, - $exception::class, - ); - self::assertMatchesRegularExpression( - $expectedExceptionMessage, - $exception->getMessage(), - ); - self::assertSame([], $this->collectExtractedFiles()); } public static function invalidPharPath(): iterable { - yield 'not a valid PHAR with the PHAR extension' => [ - self::FIXTURES.'/invalid.phar', - InvalidPhar::class, - '/^Could not create a Phar instance for the file/', - ]; - - yield 'not a valid PHAR without the PHAR extension' => [ - self::FIXTURES.'/invalid', - InvalidPhar::class, - '/^Could not create a Phar instance for the file/', - ]; - - yield 'corrupted PHAR (was valid; got tempered with)' => [ - self::FIXTURES.'/corrupted.phar', - InvalidPhar::class, - '/^Could not create a Phar instance for the file/', - ]; - - yield 'OpenSSL signed PHAR without a pubkey' => [ - self::FIXTURES.'/openssl-no-pubkey.phar', - InvalidPhar::class, - '/^Could not create a Phar instance for the file/', - ]; - - yield 'OpenSSL signed PHAR with incorrect pubkey' => [ - self::FIXTURES.'/incorrect-key-openssl.phar', - InvalidPhar::class, - '/^Could not create a Phar instance for the file/', + yield 'not a valid PHAR' => [ + self::FIXTURES.'/../phar/empty-pdf.pdf', ]; }