From 6fb3ceaf6f8f51805cb009f2a6af90feb656e15c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20Hochd=C3=B6rfer?= Date: Fri, 19 Feb 2021 20:43:01 +0100 Subject: [PATCH] Fix some issues with Infection --- .../Command/PasswordNormalizer.php | 2 +- .../Command/PasswordNormalizerUnitTest.php | 108 +++++++++++++++++- 2 files changed, 107 insertions(+), 3 deletions(-) diff --git a/src/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizer.php b/src/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizer.php index 16864aa..570e027 100644 --- a/src/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizer.php +++ b/src/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizer.php @@ -95,7 +95,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int // check environment $force = (bool) $input->getOption(self::OPTION_FORCE); - if (!($force || State::MODE_DEVELOPER === $this->getState()->getMode())) { + if (!($force === true || State::MODE_DEVELOPER === $this->getState()->getMode())) { throw new LocalizedException(__('This command can only be run in developer mode!')); } diff --git a/tests/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizerUnitTest.php b/tests/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizerUnitTest.php index 08d7b6a..e85d45e 100644 --- a/tests/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizerUnitTest.php +++ b/tests/BitExpert/Magento/PasswordNormalizer/Command/PasswordNormalizerUnitTest.php @@ -19,7 +19,6 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Indexer\Model\Indexer; use N98\Magento\Application; -use PHPUnit\Framework\Constraint\Callback; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Input\InputInterface; @@ -117,6 +116,40 @@ public function commandCannotBeRunInProductionMode(): void $command->run($this->input, $this->output); } + /** + * @test + */ + public function commandCanBeRunInProductionModeWithForceMode(): void + { + $this->input->expects(self::any()) + ->method('getOption') + ->willReturnMap([ + [PasswordNormalizer::OPTION_FORCE, true], + [PasswordNormalizer::OPTION_PASSWORD, 'random-password-to-set'], + [PasswordNormalizer::OPTION_EMAIL_MASK, 'customer_(ID)@example.com'], + [PasswordNormalizer::OPTION_EXCLUDE_EMAILS, ''], + ]); + + $this->state->expects(self::any()) + ->method('getMode') + ->willReturn(\Magento\Framework\App\State::MODE_PRODUCTION); + + $this->connection->expects(self::any()) + ->method('query') + ->willReturn($this->statement); + + $this->encryptor->expects(self::any()) + ->method('getHash') + ->willReturn('abcdef'); + + /** @var PasswordNormalizer $command */ + $command = $this->getPasswordNormalizerMock(); + $command->setApplication($this->application); + $return = $command->run($this->input, $this->output); + + self::assertSame(0, $return); + } + /** * @test */ @@ -135,6 +168,75 @@ public function commandCannotBeRunInDefaultMode(): void $command->run($this->input, $this->output); } + /** + * @test + */ + public function commandCanBeRunInDefaultModeWithForceMode(): void + { + $this->input->expects(self::any()) + ->method('getOption') + ->willReturnMap([ + [PasswordNormalizer::OPTION_FORCE, true], + [PasswordNormalizer::OPTION_PASSWORD, 'random-password-to-set'], + [PasswordNormalizer::OPTION_EMAIL_MASK, 'customer_(ID)@example.com'], + [PasswordNormalizer::OPTION_EXCLUDE_EMAILS, ''], + ]); + + $this->state->expects(self::any()) + ->method('getMode') + ->willReturn(\Magento\Framework\App\State::MODE_DEFAULT); + + $this->connection->expects(self::any()) + ->method('query') + ->willReturn($this->statement); + + $this->encryptor->expects(self::any()) + ->method('getHash') + ->willReturn('abcdef'); + + /** @var PasswordNormalizer $command */ + $command = $this->getPasswordNormalizerMock(); + $command->setApplication($this->application); + $return = $command->run($this->input, $this->output); + + self::assertSame(0, $return); + } + + + /** + * @test + */ + public function nonBoolForceModeWillBeCastedToBool(): void + { + $this->input->expects(self::any()) + ->method('getOption') + ->willReturnMap([ + [PasswordNormalizer::OPTION_FORCE, "yes"], + [PasswordNormalizer::OPTION_PASSWORD, 'random-password-to-set'], + [PasswordNormalizer::OPTION_EMAIL_MASK, 'customer_(ID)@example.com'], + [PasswordNormalizer::OPTION_EXCLUDE_EMAILS, ''], + ]); + + $this->state->expects(self::any()) + ->method('getMode') + ->willReturn(\Magento\Framework\App\State::MODE_PRODUCTION); + + $this->connection->expects(self::any()) + ->method('query') + ->willReturn($this->statement); + + $this->encryptor->expects(self::any()) + ->method('getHash') + ->willReturn('abcdef'); + + /** @var PasswordNormalizer $command */ + $command = $this->getPasswordNormalizerMock(); + $command->setApplication($this->application); + $return = $command->run($this->input, $this->output); + + self::assertSame(0, $return); + } + /** * @test */ @@ -216,7 +318,9 @@ public function passingRequiredPasswordParameterSucceeds(): void /** @var PasswordNormalizer $command */ $command = $this->getPasswordNormalizerMock(); $command->setApplication($this->application); - $command->run($this->input, $this->output); + $return = $command->run($this->input, $this->output); + + self::assertSame(0, $return); } /**