diff --git a/lib/internal/Magento/Framework/Validator/Url.php b/lib/internal/Magento/Framework/Validator/Url.php index aacccba6221113b4d487849c3ddab3e79ee2a013..27262009b2d200bc354947208bfd075898a3ac0e 100644 --- a/lib/internal/Magento/Framework/Validator/Url.php +++ b/lib/internal/Magento/Framework/Validator/Url.php @@ -25,7 +25,7 @@ class Url $isValid = false; } - if (!empty($allowedSchemes)) { + if ($isValid && !empty($allowedSchemes)) { $url = parse_url($value); if (empty($url['scheme']) || !in_array($url['scheme'], $allowedSchemes)) { $isValid = false; diff --git a/setup/src/Magento/Setup/Console/Command/InstallStoreConfigurationCommand.php b/setup/src/Magento/Setup/Console/Command/InstallStoreConfigurationCommand.php index 253c731d1c27a6849aa308d4d78a2c20f9bc26bf..e1593d4e36a09f94682c3033dce6fef676aaa872 100644 --- a/setup/src/Magento/Setup/Console/Command/InstallStoreConfigurationCommand.php +++ b/setup/src/Magento/Setup/Console/Command/InstallStoreConfigurationCommand.php @@ -16,11 +16,10 @@ use Magento\Setup\Model\StoreConfigurationDataMapper; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Exception\LocalizedException; -use Magento\Store\Model\Store; -use Magento\Framework\Validator\Locale; -use Magento\Framework\Validator\Timezone; -use Magento\Framework\Validator\Currency; -use Magento\Framework\Validator\Url; +use Magento\Framework\Validator\Locale as LocaleValidator; +use Magento\Framework\Validator\Timezone as TimezoneValidator; +use Magento\Framework\Validator\Currency as CurrencyValidator; +use Magento\Framework\Validator\Url as UrlValidator; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -43,24 +42,57 @@ class InstallStoreConfigurationCommand extends AbstractSetupCommand * Object Manager * * @var ObjectManagerInterface + * @deprecated */ private $objectManager; + /** + * @var LocaleValidator + */ + private $localeValidator; + + /** + * @var TimezoneValidator + */ + private $timezoneValidator; + + /** + * @var CurrencyValidator + */ + private $currencyValidator; + + /** + * @var UrlValidator + */ + private $urlValidator; + /** * Inject dependencies * * @param InstallerFactory $installerFactory * @param DeploymentConfig $deploymentConfig * @param ObjectManagerProvider $objectManagerProvider + * @param LocaleValidator $localeValidator, + * @param TimezoneValidator $timezoneValidator, + * @param CurrencyValidator $currencyValidator, + * @param UrlValidator $urlValidator */ public function __construct( InstallerFactory $installerFactory, DeploymentConfig $deploymentConfig, - ObjectManagerProvider $objectManagerProvider + ObjectManagerProvider $objectManagerProvider, + LocaleValidator $localeValidator, + TimezoneValidator $timezoneValidator, + CurrencyValidator $currencyValidator, + UrlValidator $urlValidator ) { $this->installerFactory = $installerFactory; $this->deploymentConfig = $deploymentConfig; $this->objectManager = $objectManagerProvider->get(); + $this->localeValidator = $localeValidator; + $this->timezoneValidator = $timezoneValidator; + $this->currencyValidator = $currencyValidator; + $this->urlValidator = $urlValidator; parent::__construct(); } @@ -193,25 +225,31 @@ class InstallStoreConfigurationCommand extends AbstractSetupCommand } break; case StoreConfigurationDataMapper::KEY_LANGUAGE: - /** @var Locale $lists */ - $lists = $this->objectManager->get(\Magento\Framework\Validator\Locale::class); - $errorMsg = $this->validateCodes($lists, $value, StoreConfigurationDataMapper::KEY_LANGUAGE); + $errorMsg = $this->validateCodes( + $this->localeValidator, + $value, + StoreConfigurationDataMapper::KEY_LANGUAGE + ); if ($errorMsg !== '') { $errors[] = $errorMsg; } break; case StoreConfigurationDataMapper::KEY_TIMEZONE: - /** @var Timezone $lists */ - $lists = $this->objectManager->get(\Magento\Framework\Validator\Timezone::class); - $errorMsg = $this->validateCodes($lists, $value, StoreConfigurationDataMapper::KEY_TIMEZONE); + $errorMsg = $this->validateCodes( + $this->timezoneValidator, + $value, + StoreConfigurationDataMapper::KEY_TIMEZONE + ); if ($errorMsg !== '') { $errors[] = $errorMsg; } break; case StoreConfigurationDataMapper::KEY_CURRENCY: - /** @var Currency $lists */ - $lists = $this->objectManager->get(\Magento\Framework\Validator\Currency::class); - $errorMsg = $this->validateCodes($lists, $value, StoreConfigurationDataMapper::KEY_CURRENCY); + $errorMsg = $this->validateCodes( + $this->currencyValidator, + $value, + StoreConfigurationDataMapper::KEY_CURRENCY + ); if ($errorMsg !== '') { $errors[] = $errorMsg; } @@ -291,7 +329,7 @@ class InstallStoreConfigurationCommand extends AbstractSetupCommand /** * Validate codes for languages, currencies or timezones * - * @param Locale|Timezone|Currency $lists + * @param LocaleValidator|TimezoneValidator|CurrencyValidator $lists * @param string $code * @param string $type * @return string @@ -316,12 +354,9 @@ class InstallStoreConfigurationCommand extends AbstractSetupCommand */ private function validateUrl($url, $option, array $allowedSchemes) { - /** @var Url $validator */ - $validator = $this->objectManager->get(Url::class); - $errorMsg = ''; - if (!$validator->isValid($url, $allowedSchemes)) { + if (!$this->urlValidator->isValid($url, $allowedSchemes)) { $errorTemplate = '<error>Command option \'%s\': Invalid URL \'%s\'.' . ' Domain Name should contain only letters, digits and hyphen.' . ' And you should use only following schemes: \'%s\'.</error>'; diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/InstallStoreConfigurationCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/InstallStoreConfigurationCommandTest.php index 63855509e188d100fecdd122850377087871e7d3..c3494b389aa5ecb2a2ab2465b5d848627a5d8e7a 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/InstallStoreConfigurationCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/InstallStoreConfigurationCommandTest.php @@ -12,6 +12,9 @@ use Magento\Setup\Model\Installer; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\StoreConfigurationDataMapper; use Magento\Framework\Validator\Url as UrlValidator; +use Magento\Framework\Validator\Locale as LocaleValidator; +use Magento\Framework\Validator\Timezone as TimezoneValidator; +use Magento\Framework\Validator\Currency as CurrencyValidator; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -38,6 +41,26 @@ class InstallStoreConfigurationCommandTest extends \PHPUnit_Framework_TestCase */ private $objectManager; + /** + * @var LocaleValidator|\PHPUnit_Framework_MockObject_MockObject + */ + private $localeValidatorMock; + + /** + * @var TimezoneValidator|\PHPUnit_Framework_MockObject_MockObject + */ + private $timezoneValidatorMock; + + /** + * @var CurrencyValidator|\PHPUnit_Framework_MockObject_MockObject + */ + private $currencyValidatorMock; + + /** + * @var UrlValidator|\PHPUnit_Framework_MockObject_MockObject + */ + private $urlValidatorMock; + /** * @var InstallStoreConfigurationCommand */ @@ -45,6 +68,11 @@ class InstallStoreConfigurationCommandTest extends \PHPUnit_Framework_TestCase protected function setUp() { + $this->urlValidatorMock = $this->getMock(UrlValidator::class, [], [], '', false); + $this->localeValidatorMock = $this->getMock(LocaleValidator::class, [], [], '', false); + $this->timezoneValidatorMock = $this->getMock(TimezoneValidator::class, [], [], '', false); + $this->currencyValidatorMock = $this->getMock(CurrencyValidator::class, [], [], '', false); + $this->installerFactory = $this->getMock(\Magento\Setup\Model\InstallerFactory::class, [], [], '', false); $this->deploymentConfig = $this->getMock(\Magento\Framework\App\DeploymentConfig::class, [], [], '', false); $this->installer = $this->getMock(\Magento\Setup\Model\Installer::class, [], [], '', false); @@ -65,7 +93,11 @@ class InstallStoreConfigurationCommandTest extends \PHPUnit_Framework_TestCase $this->command = new InstallStoreConfigurationCommand( $this->installerFactory, $this->deploymentConfig, - $objectManagerProvider + $objectManagerProvider, + $this->localeValidatorMock, + $this->timezoneValidatorMock, + $this->currencyValidatorMock, + $this->urlValidatorMock ); } @@ -105,38 +137,11 @@ class InstallStoreConfigurationCommandTest extends \PHPUnit_Framework_TestCase */ public function testExecuteInvalidData(array $option, $error) { - $validator = $this->getMock(UrlValidator::class, [], [], '', false); - $validator->expects($this->any())->method('isValid')->willReturn(false); - $validator->expects($this->any())->method('getAllowedSchemes')->willReturn(['http', 'https']); - - $localeLists= $this->getMock(\Magento\Framework\Validator\Locale::class, [], [], '', false); - $localeLists->expects($this->any())->method('isValid')->will($this->returnValue(false)); - $timezoneLists= $this->getMock(\Magento\Framework\Validator\Timezone::class, [], [], '', false); - $timezoneLists->expects($this->any())->method('isValid')->will($this->returnValue(false)); - $currencyLists= $this->getMock(\Magento\Framework\Validator\Currency::class, [], [], '', false); - $currencyLists->expects($this->any())->method('isValid')->will($this->returnValue(false)); - - $returnValueMapOM = [ - [ - UrlValidator::class, - $validator - ], - [ - \Magento\Framework\Validator\Locale::class, - $localeLists - ], - [ - \Magento\Framework\Validator\Timezone::class, - $timezoneLists - ], - [ - \Magento\Framework\Validator\Currency::class, - $currencyLists - ], - ]; - $this->objectManager->expects($this->any()) - ->method('get') - ->will($this->returnValueMap($returnValueMapOM)); + $this->localeValidatorMock->expects($this->any())->method('isValid')->willReturn(false); + $this->timezoneValidatorMock->expects($this->any())->method('isValid')->willReturn(false); + $this->currencyValidatorMock->expects($this->any())->method('isValid')->willReturn(false); + $this->urlValidatorMock->expects($this->any())->method('isValid')->willReturn(false); + $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->will($this->returnValue(true));