diff --git a/dev/tests/functional/phpunit.xml.dist b/dev/tests/functional/phpunit.xml.dist index f5f293ffa39f5099974a754655166834d26eb9a2..4eeeaccb436bd87192b6ec0634b3397985674e84 100644 --- a/dev/tests/functional/phpunit.xml.dist +++ b/dev/tests/functional/phpunit.xml.dist @@ -35,7 +35,7 @@ <env name="testsuite_rule_path" value="Magento/Mtf/TestSuite/InjectableTests" /> <env name="log_directory" value="var/log" /> <env name="events_preset" value="base" /> - <env name="module_whitelist" value="Magento_Install" /> + <env name="module_whitelist" value="Magento_Install,Magento_Upgrade" /> <env name="basedir" value="var/log" /> <env name="credentials_file_path" value="./credentials.xml.dist" /> <env name="mage_mode" value="developer" /> diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Version.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Version.php new file mode 100644 index 0000000000000000000000000000000000000000..a947cc6bfc5aac91bf535fb1789a96cbf39865ef --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Version.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Backend\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +class Version extends Block +{ + /** + * @var string + */ + protected $backendVersion = 'magento-version'; + + /** + * Returns dashboard application version + * + * @return string + */ + public function getVersion() + { + return $this->_rootElement->find($this->backendVersion, Locator::SELECTOR_CLASS_NAME)->getText(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/Dashboard.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/Dashboard.xml index cd846dd75323040300dbfcb94b91e37bc66a8f30..9b666cc8a72aeae67e906f176f9cb623b475ce85 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/Dashboard.xml +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/Dashboard.xml @@ -15,5 +15,6 @@ <block name="errorBlock" class="Magento\Backend\Test\Block\Page\Error" locator="[id='page:main-container']" strategy="css selector" /> <block name="accessDeniedBlock" class="Magento\Backend\Test\Block\Denied" locator="#anchor-content" strategy="css selector" /> <block name="systemMessageDialog" class="Magento\AdminNotification\Test\Block\System\Messages" locator='[role="dialog"].ui-popup-message' strategy="css selector" /> + <block name="applicationVersion" class="Magento\Backend\Test\Block\Version" locator="body" strategy="css selector" /> </page> </config> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.php new file mode 100644 index 0000000000000000000000000000000000000000..e2df872d068d35d474a7e1e33d18fe72865a717a --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.php @@ -0,0 +1,55 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Form; +use Magento\Mtf\Client\Element\SimpleElement; +use Magento\Mtf\Client\Locator; +use Magento\Mtf\Fixture\FixtureInterface; + +/** + * Perform Authentication block. + */ +class Authentication extends Form +{ + /** + * 'Save Config' button. + * + * @var string + */ + protected $save = "[ng-click*='saveAuthJson']"; + + /** + * First field selector + * + * @var string + */ + protected $firstField = '[name="username"]'; + + /** + * Click on 'Save Config' button. + * + * @return void + */ + public function clickSaveConfig() + { + $this->_rootElement->find($this->save, Locator::SELECTOR_CSS)->click(); + } + + /** + * Ensure the form is loaded and fill the root form + * + * @param FixtureInterface $fixture + * @param SimpleElement|null $element + * @return $this + */ + public function fill(FixtureInterface $fixture, SimpleElement $element = null) + { + $this->waitForElementVisible($this->firstField); + return parent::fill($fixture, $element); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.xml new file mode 100644 index 0000000000000000000000000000000000000000..3958a86df320f19803a68a82ee3323a1283586cc --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Authentication.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<mapping strict="1"> + <fields> + <publicKey> + <selector>[name='username']</selector> + </publicKey> + <privateKey> + <selector>[name='password']</selector> + </privateKey> + </fields> +</mapping> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.php new file mode 100644 index 0000000000000000000000000000000000000000..153acde0b9a299165c75eb5e3f0fb4c81a61f5a9 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.php @@ -0,0 +1,35 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Form; +use Magento\Mtf\Client\Element\SimpleElement; +use Magento\Mtf\Client\Locator; +use Magento\Mtf\Fixture\FixtureInterface; + +/** + * Create Backup block. + */ +class CreateBackup extends Form +{ + /** + * 'Start Update' button. + * + * @var string + */ + protected $startUpdate = "[ng-click*='goToStartUpdater']"; + + /** + * Click on 'Start Update/Next' button. + * + * @return void + */ + public function clickNext() + { + $this->_rootElement->find($this->startUpdate, Locator::SELECTOR_CSS)->click(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.xml new file mode 100644 index 0000000000000000000000000000000000000000..6085acc0a158abe83b56aa25f6014f1b38007e48 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/CreateBackup.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<mapping strict="0"> + <fields> + <optionsCode> + <selector>#optionsCode</selector> + <input>checkbox</input> + </optionsCode> + <optionsMedia> + <selector>#optionsMedia</selector> + <input>checkbox</input> + </optionsMedia> + <optionsDb> + <selector>#optionsDb</selector> + <input>checkbox</input> + </optionsDb> + </fields> +</mapping> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Home.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Home.php new file mode 100644 index 0000000000000000000000000000000000000000..d6ed4095f6591a32e2e2cbdf983b8ccb76fb4edc --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Home.php @@ -0,0 +1,31 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +/** + * Home block. + */ +class Home extends Block +{ + /** + * @var string + */ + protected $systemUpgrade = '.setup-home-item-upgrade'; + + /** + * Click on 'System Upgrade' button. + * + * @return void + */ + public function clickSystemUpgrade() + { + $this->_rootElement->find($this->systemUpgrade, Locator::SELECTOR_CSS)->click(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Readiness.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Readiness.php new file mode 100644 index 0000000000000000000000000000000000000000..28890268f8534e5c6e1d522d1dafde4266d80603 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/Readiness.php @@ -0,0 +1,160 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +/** + * Readiness block. + */ +class Readiness extends Block +{ + /** + * 'Start Readiness Check' button. + * + * @var string + */ + protected $readinessCheck = "[ng-click*='state.go']"; + + /** + * 'Next' button. + * + * @var string + */ + protected $next = "[ng-click*='next']"; + + /** + * 'Completed!' message. + * [ng-switch-when="true"] + * @var string + */ + protected $completedMessage = '[ng-switch-when="true"]'; + + /** + * Updater application successful check. + * + * @var string + */ + protected $updaterApplicationCheck = '#updater-application'; + + /** + * Cron script successful check. + * + * @var string + */ + protected $cronScriptCheck = '#cron-script'; + + /** + * Dependency successful check. + * + * @var string + */ + protected $dependencyCheck = '#component-dependency'; + + /** + * PHP Version successful check. + * + * @var string + */ + protected $phpVersionCheck = '#php-version'; + + /** + * PHP Settings successful check. + * + * @var string + */ + protected $phpSettingsCheck = '#php-settings'; + + /** + * PHP Extensions successful check. + * + * @var string + */ + protected $phpExtensionCheck = '#php-extensions'; + + /** + * Click on 'Start Readiness Check' button. + * + * @return void + */ + public function clickReadinessCheck() + { + $this->_rootElement->find($this->readinessCheck, Locator::SELECTOR_CSS)->click(); + $this->waitForElementVisible($this->completedMessage, Locator::SELECTOR_CSS); + } + + /** + * Click on 'Next' button. + * + * @return void + */ + public function clickNext() + { + $this->_rootElement->find($this->next, Locator::SELECTOR_CSS)->click(); + } + + /** + * Get Updater application check result. + * + * @return string + */ + public function getUpdaterApplicationCheck() + { + return $this->_rootElement->find($this->updaterApplicationCheck, Locator::SELECTOR_CSS)->getText(); + } + + /** + * Get cron script check result. + * + * @return string + */ + public function getCronScriptCheck() + { + return $this->_rootElement->find($this->cronScriptCheck, Locator::SELECTOR_CSS)->getText(); + } + + /** + * Get dependency check result. + * + * @return string + */ + public function getDependencyCheck() + { + return $this->_rootElement->find($this->dependencyCheck, Locator::SELECTOR_CSS)->getText(); + } + + /** + * Get PHP Version check result. + * + * @return string + */ + public function getPhpVersionCheck() + { + return $this->_rootElement->find($this->phpVersionCheck, Locator::SELECTOR_CSS)->getText(); + } + + /** + * Get setting check result. + * + * @return string + */ + public function getSettingsCheck() + { + return $this->_rootElement->find($this->phpSettingsCheck, Locator::SELECTOR_CSS)->getText(); + } + + /** + * Get PHP Extensions check result. + * + * @return string + */ + public function getPhpExtensionsCheck() + { + return $this->_rootElement->find($this->phpExtensionCheck, Locator::SELECTOR_CSS)->getText(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.php new file mode 100644 index 0000000000000000000000000000000000000000..9322b3dcb33c6ca156027ad424a5b344888624b2 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.php @@ -0,0 +1,55 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Form; +use Magento\Mtf\Client\Element\SimpleElement; +use Magento\Mtf\Client\Locator; +use Magento\Mtf\Fixture\FixtureInterface; + +/** + * Select version block. + */ +class SelectVersion extends Form +{ + /** + * 'Next' button. + * + * @var string + */ + protected $next = "[ng-click*='update']"; + + /** + * First field selector + * + * @var string + */ + protected $firstField = '#selectVersion'; + + /** + * Click on 'Next' button. + * + * @return void + */ + public function clickNext() + { + $this->_rootElement->find($this->next, Locator::SELECTOR_CSS)->click(); + } + + /** + * Ensure the form is loaded and fill the root form + * + * @param FixtureInterface $fixture + * @param SimpleElement|null $element + * @return $this + */ + public function fill(FixtureInterface $fixture, SimpleElement $element = null) + { + $this->waitForElementVisible($this->firstField); + return parent::fill($fixture, $element); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.xml new file mode 100644 index 0000000000000000000000000000000000000000..94b784b8d1b86223d454899c678c635dd9a8dd8c --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SelectVersion.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<mapping strict="1"> + <fields> + <upgradeVersion> + <selector>#selectVersion</selector> + <input>select</input> + </upgradeVersion> + </fields> +</mapping> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SuccessMessage.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SuccessMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..b8a46e1f529220489f08dce174803b8f78fd89c9 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SuccessMessage.php @@ -0,0 +1,30 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +/** + * Success Message block. + */ +class SuccessMessage extends Block +{ + /** + * @var string + */ + protected $successMessage = 'content-success'; + + /** + * @return string + */ + public function getUpdaterStatus() + { + $this->waitForElementVisible($this->successMessage, Locator::SELECTOR_CLASS_NAME); + return $this->_rootElement->find($this->successMessage, Locator::SELECTOR_CLASS_NAME)->getText(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemConfig.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemConfig.php new file mode 100644 index 0000000000000000000000000000000000000000..589fa1f9e2b22655147fe391faea065b4af86804 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemConfig.php @@ -0,0 +1,31 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +/** + * System Config block. + */ +class SystemConfig extends Block +{ + /** + * @var string + */ + protected $systemConfig = '.setup-home-item-configuration'; + + /** + * Click on 'System Configuration' button. + * + * @return void + */ + public function clickSystemConfig() + { + $this->_rootElement->find($this->systemConfig, Locator::SELECTOR_CSS)->click(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemUpgrade.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemUpgrade.php new file mode 100644 index 0000000000000000000000000000000000000000..8d9cd7708e5fd927421dfdaeb77bf2a348267c96 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Block/SystemUpgrade.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Block; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +/** + * System Upgrade block. + */ +class SystemUpgrade extends Block +{ + /** + * @var string + */ + protected $systemUpgradeMessage = 'start-updater'; + + /** + * 'Upgrade' button. + * + * @var string + */ + protected $upgrade = "[ng-click*='update']"; + + /** + * Get upgrade message. + * + * @return string + */ + public function getUpgradeMessage() + { + return $this->_rootElement->find($this->systemUpgradeMessage, Locator::SELECTOR_NAME)->getText(); + } + + /** + * Click on 'Upgrade' button. + * + * @return void + */ + public function clickSystemUpgrade() + { + $this->_rootElement->find($this->upgrade, Locator::SELECTOR_CSS)->click(); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertApplicationVersion.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertApplicationVersion.php new file mode 100644 index 0000000000000000000000000000000000000000..610d1ef6844391b7a462da0789edd0389bbb9072 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertApplicationVersion.php @@ -0,0 +1,43 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Constraint; + +use Magento\Backend\Test\Page\Adminhtml\Dashboard; +use Magento\Mtf\Constraint\AbstractConstraint; +use Magento\Mtf\Fixture\FixtureInterface; + +/** + * Check application version + */ +class AssertApplicationVersion extends AbstractConstraint +{ + /** + * Assert upgrade is successfully + * + * @param Dashboard $dashboard + * @param string $version + * @return void + */ + public function processAssert(Dashboard $dashboard, $version) + { + \PHPUnit_Framework_Assert::assertContains( + $version, + $dashboard->getApplicationVersion()->getVersion(), + 'Application version is incorrect.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "Application new version is correct."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessMessage.php new file mode 100644 index 0000000000000000000000000000000000000000..c77e2a0b18d1b880b5d854e2fd3357615a009e9f --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessMessage.php @@ -0,0 +1,48 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Constraint; + +use Magento\Upgrade\Test\Page\Adminhtml\SetupWizard; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Check upgrade is successfully + */ +class AssertSuccessMessage extends AbstractConstraint +{ + /** + * Assert upgrade is successfully + * + * @param SetupWizard $setupWizard + * @param string $package + * @return void + */ + public function processAssert(SetupWizard $setupWizard, $package) + { + $message = "You upgraded:"; + \PHPUnit_Framework_Assert::assertContains( + $message, + $setupWizard->getSuccessMessage()->getUpdaterStatus(), + 'Success message is incorrect.' + ); + \PHPUnit_Framework_Assert::assertContains( + $package, + $setupWizard->getSuccessMessage()->getUpdaterStatus(), + 'Updated package is incorrect.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "System Upgrade success message is correct."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessfulReadinessCheck.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessfulReadinessCheck.php new file mode 100644 index 0000000000000000000000000000000000000000..7befbc1cf8b414616e493126e231c7747d90a7e4 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertSuccessfulReadinessCheck.php @@ -0,0 +1,96 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Constraint; + +use Magento\Upgrade\Test\Page\Adminhtml\SetupWizard; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Check that Updater, Dependency, PHP Version, PHP Extensions and File Permission are ok. + */ +class AssertSuccessfulReadinessCheck extends AbstractConstraint +{ + /** + * Updater application message + */ + const UPDATER_APPLICATION_MESSAGE = 'Updater application is available'; + + /** + * Cron script message + */ + const CRON_SCRIPT_MESSAGE = 'Cron script readiness check passed'; + + /** + * Dependency check message + */ + const DEPENDENCY_CHECK_MESSAGE = 'Component dependency is correct'; + + /** + * PHP version message. + */ + const PHP_VERSION_MESSAGE = 'Your PHP version is correct'; + + /** + * PHP extensions message. + */ + const PHP_SETTING_REGEXP = 'Your PHP settings are correct'; + + /** + * PHP extensions message. + */ + const PHP_EXTENSIONS_REGEXP = '/You meet (\d+) out of \1 PHP extensions requirements\./'; + + /** + * Assert that readiness check items are passed. + * + * @param SetupWizard $setupWizard + * @return void + */ + public function processAssert(SetupWizard $setupWizard) + { + \PHPUnit_Framework_Assert::assertContains( + self::UPDATER_APPLICATION_MESSAGE, + $setupWizard->getReadiness()->getUpdaterApplicationCheck(), + 'Updater application check is incorrect.' + ); + \PHPUnit_Framework_Assert::assertContains( + self::CRON_SCRIPT_MESSAGE, + $setupWizard->getReadiness()->getCronScriptCheck(), + 'Cron scripts are incorrect.' + ); + \PHPUnit_Framework_Assert::assertContains( + self::DEPENDENCY_CHECK_MESSAGE, + $setupWizard->getReadiness()->getDependencyCheck(), + 'Dependency check is incorrect.' + ); + \PHPUnit_Framework_Assert::assertContains( + self::PHP_VERSION_MESSAGE, + $setupWizard->getReadiness()->getPhpVersionCheck(), + 'PHP version is incorrect.' + ); + \PHPUnit_Framework_Assert::assertContains( + self::PHP_SETTING_REGEXP, + $setupWizard->getReadiness()->getSettingsCheck(), + 'PHP settings check failed.' + ); + \PHPUnit_Framework_Assert::assertRegExp( + self::PHP_EXTENSIONS_REGEXP, + $setupWizard->getReadiness()->getPhpExtensionsCheck(), + 'PHP extensions missed.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "System Upgrade readiness check passed."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertVersionAndEditionCheck.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertVersionAndEditionCheck.php new file mode 100644 index 0000000000000000000000000000000000000000..51e6a81d50a7a29661cce7b642069ebd04dc5f99 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Constraint/AssertVersionAndEditionCheck.php @@ -0,0 +1,44 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\Constraint; + +use Magento\Upgrade\Test\Page\Adminhtml\SetupWizard; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Check that package and version is correct + */ +class AssertVersionAndEditionCheck extends AbstractConstraint +{ + /** + * Assert that package and version is correct + * + * @param SetupWizard $setupWizard + * @param string $package + * @param string $version + * @return void + */ + public function processAssert(SetupWizard $setupWizard, $package, $version) + { + $message = "We're ready to upgrade $package to $version"; + \PHPUnit_Framework_Assert::assertContains( + $message, + $setupWizard->getSystemUpgrade()->getUpgradeMessage(), + 'Updater application check is incorrect.' + ); + } + + /** + * Returns a string representation of successful assertion. + * + * @return string + */ + public function toString() + { + return "System Upgrade edition and version check passed."; + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Fixture/Upgrade.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Fixture/Upgrade.xml new file mode 100644 index 0000000000000000000000000000000000000000..c209c4d5d8b2cd45c8423e81ab36688abd4b2b84 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Fixture/Upgrade.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd"> + <fixture name="upgrade" + module="Magento_Upgrade" + type="virtual" + entity_type="upgrade" + handler_interface="Magento\Upgrade\Test\Handler\Upgrade\UpgradeInterface" + class="Magento\Upgrade\Test\Fixture\Upgrade"> + <field name="upgradeVersion" /> + <field name="publicKey" /> + <field name="privateKey" /> + <field name="optionsCode" /> + <field name="optionsMedia" /> + <field name="optionsDb" /> + </fixture> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/Page/Adminhtml/SetupWizard.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Page/Adminhtml/SetupWizard.xml new file mode 100644 index 0000000000000000000000000000000000000000..534cc1db14dbe0669ae0895a97aab3fd5bad701e --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/Page/Adminhtml/SetupWizard.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd"> + <page name="setupWizard" area="Adminhtml" mca="admin/backendapp/redirect/app/setup/" module="Magento_Upgrade"> + <block name="systemUpgradeHome" class="Magento\Upgrade\Test\Block\Home" locator="body" strategy="css selector"/> + <block name="systemConfig" class="Magento\Upgrade\Test\Block\SystemConfig" locator="body" strategy="css selector"/> + <block name="authentication" class="Magento\Upgrade\Test\Block\Authentication" locator="body" strategy="css selector"/> + <block name="selectVersion" class="Magento\Upgrade\Test\Block\SelectVersion" locator="body" strategy="css selector"/> + <block name="readiness" class="Magento\Upgrade\Test\Block\Readiness" locator="body" strategy="css selector"/> + <block name="createBackup" class="Magento\Upgrade\Test\Block\CreateBackup" locator="body" strategy="css selector"/> + <block name="systemUpgrade" class="Magento\Upgrade\Test\Block\SystemUpgrade" locator="body" strategy="css selector"/> + <block name="successMessage" class="Magento\Upgrade\Test\Block\SuccessMessage" locator="body" strategy="css selector"/> + </page> +</config> diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.php b/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.php new file mode 100644 index 0000000000000000000000000000000000000000..8453fc24cf3e37c08353dcd64b06e667834fde99 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.php @@ -0,0 +1,118 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Upgrade\Test\TestCase; + +use Magento\Mtf\TestCase\Injectable; +use Magento\Upgrade\Test\Page\Adminhtml\SetupWizard; +use Magento\Backend\Test\Page\Adminhtml\Dashboard; +use Magento\Mtf\Fixture\FixtureFactory; +use Magento\Upgrade\Test\Constraint\AssertSuccessfulReadinessCheck; +use Magento\Upgrade\Test\Constraint\AssertVersionAndEditionCheck; +use Magento\Upgrade\Test\Constraint\AssertSuccessMessage; +use Magento\Upgrade\Test\Constraint\AssertApplicationVersion; + +class UpgradeSystemTest extends Injectable +{ + /** + * Page System Upgrade Index. + * + * @var SetupWizard + */ + protected $setupWizard; + + /** + * @var Dashboard + */ + protected $adminDashboard; + + /** + * Injection data. + * + * @param Dashboard $adminDashboard + * @param SetupWizard $setupWizard + * @return void + */ + public function __inject( + Dashboard $adminDashboard, + SetupWizard $setupWizard + ) { + $this->adminDashboard = $adminDashboard; + $this->setupWizard = $setupWizard; + } + + /** + * @param array $upgrade + * @param FixtureFactory $fixtureFactory + * @param AssertSuccessfulReadinessCheck $assertReadiness + * @param AssertVersionAndEditionCheck $assertVersionAndEdition + * @param AssertSuccessMessage $assertSuccessMessage + * @param AssertApplicationVersion $assertApplicationVersion + * @return void + */ + public function test( + FixtureFactory $fixtureFactory, + AssertSuccessfulReadinessCheck $assertReadiness, + AssertVersionAndEditionCheck $assertVersionAndEdition, + AssertSuccessMessage $assertSuccessMessage, + AssertApplicationVersion $assertApplicationVersion, + $upgrade = [] + ) { + // Create fixture + $upgradeFixture = $fixtureFactory->create('Magento\Upgrade\Test\Fixture\Upgrade', ['data' => $upgrade]); + $createBackupConfig = array_intersect_key( + $upgrade, + ['optionsCode' => '', 'optionsMedia' => '', 'optionsDb' => ''] + ); + $createBackupFixture = $fixtureFactory->create( + 'Magento\Upgrade\Test\Fixture\Upgrade', + ['data' => $createBackupConfig] + ); + $version = $upgrade['upgradeVersion']; + + if (preg_match('/^[0-9].[0-9].[0-9]/', $version, $out)) { + $version = array_shift($out); + } + + // Authenticate in admin area + $this->adminDashboard->open(); + + // Open Web Setup Wizard + $this->setupWizard->open(); + + // Authenticate on repo.magento.com + if ($upgrade['needAuthentication'] === 'Yes') { + $this->setupWizard->getSystemConfig()->clickSystemConfig(); + $this->setupWizard->getAuthentication()->fill($upgradeFixture); + $this->setupWizard->getAuthentication()->clickSaveConfig(); + $this->setupWizard->open(); + } + + // Select upgrade to version + $this->setupWizard->getSystemUpgradeHome()->clickSystemUpgrade(); + $this->setupWizard->getSelectVersion()->fill($upgradeFixture); + $this->setupWizard->getSelectVersion()->clickNext(); + + // Readiness Check + $this->setupWizard->getReadiness()->clickReadinessCheck(); + $assertReadiness->processAssert($this->setupWizard); + $this->setupWizard->getReadiness()->clickNext(); + + // Create Backup page + $this->setupWizard->getCreateBackup()->fill($createBackupFixture); + $this->setupWizard->getCreateBackup()->clickNext(); + + // Check info and press 'Upgrade' button + $assertVersionAndEdition->processAssert($this->setupWizard, $upgrade['package'], $version); + $this->setupWizard->getSystemUpgrade()->clickSystemUpgrade(); + + $assertSuccessMessage->processAssert($this->setupWizard, $upgrade['package']); + + // Check application version + $this->adminDashboard->open(); + $assertApplicationVersion->processAssert($this->adminDashboard, $version); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.xml b/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..13792921f84826658ccde2542d2494b61a4330a0 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Upgrade/Test/TestCase/UpgradeSystemTest.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ + --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\Upgrade\Test\TestCase\UpgradeSystemTest" summary="System Upgrade" ticketId="MAGETWO-45592"> + <variation name="PerformSystemUpgrade"> + <data name="description" xsi:type="string">System Upgrade Page</data> + <data name="upgrade/upgradeVersion" xsi:type="string">{version}</data> + <data name="upgrade/package" xsi:type="string">{package}</data> + <data name="upgrade/needAuthentication" xsi:type="string">No</data> + <data name="upgrade/publicKey" xsi:type="string">{publicKey}</data> + <data name="upgrade/privateKey" xsi:type="string">{privateKey}</data> + <data name="upgrade/optionsCode" xsi:type="string">No</data> + <data name="upgrade/optionsMedia" xsi:type="string">No</data> + <data name="upgrade/optionsDb" xsi:type="string">No</data> + </variation> + </testCase> +</config> diff --git a/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/upgrade.xml b/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/upgrade.xml new file mode 100644 index 0000000000000000000000000000000000000000..99961ef2c1e5e5f003096eff40313a7a987439c6 --- /dev/null +++ b/dev/tests/functional/testsuites/Magento/Mtf/TestSuite/InjectableTests/upgrade.xml @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../vendor/magento/mtf/Magento/Mtf/TestRunner/etc/testRunner.xsd"> + <rule scope="testsuite"> + <allow> + <module value="Magento_Upgrade"/> + </allow> + </rule> +</config>