diff --git a/.travis.yml b/.travis.yml index 96e906a..92d4a11 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,12 @@ language: php php: -- 5.4 - 5.5 - 5.6 - 7.0 +matrix: + allow_failures: + - php: 5.6 + - php: 7.0 before_script: - sudo apt-get update -qq # Install Apache @@ -28,4 +31,4 @@ before_script: script: - mv tests/acceptance.suite.dist.yml tests/acceptance.suite.yml -- php vendor/bin/robo test:acceptance +- vendor/bin/robo run:tests diff --git a/RoboFile.php b/RoboFile.php index b2670a5..9e4a78e 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -31,13 +31,14 @@ class RoboFile extends \Robo\Tasks } /** - * Executes Selenium System Tests in your machine + * Executes all the Selenium System Tests in a suite on your machine * - * @param null $seleniumPath Optional path to selenium-standalone-server-x.jar + * @param string $seleniumPath Optional path to selenium-standalone-server-x.jar + * @param string $suite Optional, the name of the tests suite * * @return mixed */ - public function testAcceptance($seleniumPath = null) + public function runTests($seleniumPath = null, $suite = 'acceptance') { $this->setExecExtension(); @@ -108,7 +109,7 @@ class RoboFile extends \Robo\Tasks $this->_exec('php' . $this->extension . ' vendor/bin/codecept build'); $this->taskCodecept() - ->suite('acceptance') + ->suite($suite) ->arg('--steps') ->arg('--debug') ->run() @@ -128,4 +129,118 @@ class RoboFile extends \Robo\Tasks } */ } -} \ No newline at end of file + + /** + * Executes a specific Selenium System Tests in your machine + * + * @param string $seleniumPath Optional path to selenium-standalone-server-x.jar + * @param string $pathToTestFile Optional name of the test to be run + * @param string $suite Optional name of the suite containing the tests, Acceptance by default. + * + * @return mixed + */ + public function runTest($seleniumPath = null, $pathToTestFile = null, $suite = 'acceptance') + { + if (!$seleniumPath) + { + if (!file_exists('selenium-server-standalone.jar')) + { + $this->say('Downloading Selenium Server, this may take a while.'); + $this->taskExec('wget') + ->arg('http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar') + ->arg('-O selenium-server-standalone.jar') + ->printed(false) + ->run(); + } + + $seleniumPath = 'selenium-server-standalone.jar'; + } + + // Make sure we have Composer + if (!file_exists('./composer.phar')) + { + $this->_exec('curl -sS https://getcomposer.org/installer | php'); + } + $this->taskComposerUpdate()->run(); + + // Running Selenium server + $this->_exec("java -jar $seleniumPath > selenium-errors.log 2>selenium.log &"); + + $this->taskWaitForSeleniumStandaloneServer() + ->run() + ->stopOnFail(); + + // Make sure to Run the Build Command to Generate AcceptanceTester + $this->_exec("php vendor/bin/codecept build"); + + if (!$pathToTestFile) + { + $tests = array(); + $this->say('Available tests in the system:'); + $filesInSuite = scandir(getcwd() . '/tests/' . $suite); + $i = 1; + + foreach ($filesInSuite as $file) + { + // Make sure the file is a Test file + if (strripos($file, 'cept.php') || strripos($file, 'cest.php')) + { + $tests[$i] = $file; + $this->say('[' . $i . '] ' . $file); + $i++; + } + } + + $this->say(''); + $testNumber = $this->ask('Type the number of the test in the list that you want to run...'); + $pathToTestFile = "tests/$suite/" . $tests[$testNumber]; + } + + $this->taskCodecept() + ->test($pathToTestFile) + ->arg('--steps') + ->arg('--debug') + ->run() + ->stopOnFail(); + + // Kill selenium server + // $this->_exec('curl http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer'); + + $this->say('Printing Selenium Log files'); + $this->say('------ selenium-errors.log (start) ---------'); + $seleniumErrors = file_get_contents('selenium-errors.log'); + + if ($seleniumErrors) + { + $this->say(file_get_contents('selenium-errors.log')); + } + else + { + $this->say('no errors were found'); + } + $this->say('------ selenium-errors.log (end) -----------'); + + /* + // Uncomment if you need to debug issues in selenium + $this->say(''); + $this->say('------ selenium.log (start) -----------'); + $this->say(file_get_contents('selenium.log')); + $this->say('------ selenium.log (end) -----------'); + */ + } + + /** + * Creates a testing Joomla site for running the tests (use it before run:test) + */ + public function createTestingSite() + { + // Get Joomla Clean Testing sites + if (is_dir('tests/joomla-cms3')) + { + $this->taskDeleteDir('tests/joomla-cms3')->run(); + } + + $this->_exec('git' . $this->extension . ' clone -b staging --single-branch --depth 1 https://github.com/joomla/joomla-cms.git tests/joomla-cms3'); + $this->say('Joomla CMS site created at tests/joomla-cms3'); + } +} diff --git a/build.ini b/build.ini index 15ce0e9..ad09a4a 100644 --- a/build.ini +++ b/build.ini @@ -1,5 +1,5 @@ # The release version for the extension package. -version=3.4.1-rc2 +version=3.4.1 # The name of the package. package=weblinks diff --git a/manifest.xml b/manifest.xml index bfae79e..8d87130 100644 --- a/manifest.xml +++ b/manifest.xml @@ -5,11 +5,11 @@ Joomla! CMS Weblinks Package pkg_weblinks package - 3.4.0 - - https://github.com/joomla-extensions/weblinks + 3.4.1 + site + https://github.com/joomla-extensions/weblinks/releases/tag/3.4.1 - https://github.com/joomla-extensions/weblinks/releases/download/3.4.0/pkg_weblinks_3.4.0.zip + https://github.com/joomla-extensions/weblinks/releases/download/3.4.1/pkg_weblinks_3.4.1.zip diff --git a/src/com_weblinks/weblinks.xml b/src/com_weblinks/weblinks.xml index d50f890..6197da9 100644 --- a/src/com_weblinks/weblinks.xml +++ b/src/com_weblinks/weblinks.xml @@ -7,7 +7,7 @@ GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org - 3.4.1-rc2 + 3.4.1 COM_WEBLINKS_XML_DESCRIPTION script.php diff --git a/src/mod_weblinks/mod_weblinks.xml b/src/mod_weblinks/mod_weblinks.xml index 66b0205..abcaa38 100644 --- a/src/mod_weblinks/mod_weblinks.xml +++ b/src/mod_weblinks/mod_weblinks.xml @@ -7,7 +7,7 @@ GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org - 3.4.1-rc2 + 3.4.1 MOD_WEBLINKS_XML_DESCRIPTION language diff --git a/src/pkg_weblinks.xml b/src/pkg_weblinks.xml index fe06c27..e1d6700 100644 --- a/src/pkg_weblinks.xml +++ b/src/pkg_weblinks.xml @@ -10,7 +10,7 @@ Joomla! Project admin@joomla.org www.joomla.org - 3.4.1-rc2 + 3.4.1 GNU General Public License version 2 or later; see LICENSE.txt PKG_WEBLINKS_XML_DESCRIPTION diff --git a/src/plg_finder_weblinks/weblinks.xml b/src/plg_finder_weblinks/weblinks.xml index 5e8b66b..7b5c5d5 100644 --- a/src/plg_finder_weblinks/weblinks.xml +++ b/src/plg_finder_weblinks/weblinks.xml @@ -7,7 +7,7 @@ GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org - 3.4.1-rc2 + 3.4.1 PLG_FINDER_WEBLINKS_XML_DESCRIPTION weblinks.php diff --git a/src/plg_search_weblinks/weblinks.xml b/src/plg_search_weblinks/weblinks.xml index f882717..1e11c8c 100644 --- a/src/plg_search_weblinks/weblinks.xml +++ b/src/plg_search_weblinks/weblinks.xml @@ -7,7 +7,7 @@ GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org www.joomla.org - 3.4.1-rc2 + 3.4.1 PLG_SEARCH_WEBLINKS_XML_DESCRIPTION weblinks.php diff --git a/tests/acceptance/01-InstallWeblinksCest.php b/tests/acceptance/01-InstallWeblinksCest.php index 5d4ed4c..5484b7d 100644 --- a/tests/acceptance/01-InstallWeblinksCest.php +++ b/tests/acceptance/01-InstallWeblinksCest.php @@ -11,18 +11,21 @@ use \AcceptanceTester; class InstallWeblinksCest { + public function installJoomla(AcceptanceTester $I) + { + $I->am('Administrator'); + $I->installJoomla(); + $I->doAdministratorLogin(); + $I->setErrorReportingToDevelopment(); + } + // tests public function installWeblinks(AcceptanceTester $I) { - $I->am('Administrator'); - $I->installJoomla(); - $I->doAdministratorLogin(); - $I->setErrorReportingToDevelopment(); - - $I->comment('get Weblinks repository folder from acceptance.suite.yml (see _support/AcceptanceHelper.php)'); + $I->doAdministratorLogin(); + $I->comment('get Weblinks repository folder from acceptance.suite.yml (see _support/AcceptanceHelper.php)'); $path = $I->getConfiguration('repo_folder'); $I->installExtensionFromDirectory($path . 'src/com_weblinks/'); $I->doAdministratorLogout(); - } } \ No newline at end of file diff --git a/tests/acceptance/AdministratorCategoriesCest.php b/tests/acceptance/AdministratorCategoriesCest.php index 035d7ce..86a41ce 100644 --- a/tests/acceptance/AdministratorCategoriesCest.php +++ b/tests/acceptance/AdministratorCategoriesCest.php @@ -20,7 +20,7 @@ class AdministratorCategoriesCest $I->amGoingTo('Navigate to Categories page in /administrator/'); $I->amOnPage('administrator/index.php?option=com_categories&extension=com_weblinks'); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('see categories page'); $I->checkForPhpNoticesOrWarnings(); @@ -42,7 +42,7 @@ class AdministratorCategoriesCest $I->amGoingTo('Navigate to Categories page in /administrator/'); $I->amOnPage('administrator/index.php?option=com_categories&extension=com_weblinks'); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('see categories page'); $I->amGoingTo('try to save a category with empty title and it should fail'); @@ -62,7 +62,7 @@ class AdministratorCategoriesCest $I->amGoingTo('Navigate to Categories page in /administrator/'); $I->amOnPage('administrator/index.php?option=com_categories&extension=com_weblinks'); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('see categories page'); $I->checkForPhpNoticesOrWarnings(); @@ -78,13 +78,13 @@ class AdministratorCategoriesCest $I->amGoingTo('Search for automated testing'); $I->fillField(['xpath'=> "//input[@id=\"filter_search\"]"], "automated testing pub" . "\n"); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->amGoingTo('Select the first weblink'); $I->click(['xpath'=> "//input[@id=\"cb0\"]"]); $I->amGoingTo('try to publish a weblink category'); $I->click(['xpath'=> "//button[@onclick=\"if (document.adminForm.boxchecked.value==0){alert('Please first make a selection from the list');}else{ Joomla.submitbutton('categories.publish')}\"]"]); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('see a success message after publishing the category'); $I->see('1 category successfully published.',['id' => 'system-message-container']); } @@ -98,7 +98,7 @@ class AdministratorCategoriesCest $I->amGoingTo('Navigate to Categories page in /administrator/'); $I->amOnPage('administrator/index.php?option=com_categories&extension=com_weblinks'); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('see categories page'); $I->checkForPhpNoticesOrWarnings(); @@ -114,24 +114,24 @@ class AdministratorCategoriesCest $I->amGoingTo('Search for automated testing'); $I->fillField(['xpath'=> "//input[@id=\"filter_search\"]"], "automated testing unpub" . "\n"); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->amGoingTo('Select the first weblink'); $I->click(['xpath'=> "//input[@id=\"cb0\"]"]); $I->amGoingTo('Try to publish a weblink category'); $I->click(['xpath'=> "//button[@onclick=\"if (document.adminForm.boxchecked.value==0){alert('Please first make a selection from the list');}else{ Joomla.submitbutton('categories.publish')}\"]"]); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('See a success message after publishing the category'); $I->see('1 category successfully published.',['id' => 'system-message-container']); // Unpublish it again - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->amGoingTo('Select the first weblink'); $I->click(['xpath'=> "//input[@id=\"cb0\"]"]); $I->amGoingTo('Try to unpublish a weblink category'); $I->click(['xpath'=> "//button[@onclick=\"if (document.adminForm.boxchecked.value==0){alert('Please first make a selection from the list');}else{ Joomla.submitbutton('categories.unpublish')}\"]"]); - $I->waitForText('Category Manager: Weblinks','5',['css' => 'h1']); + $I->waitForText('Weblinks: Categories','5',['css' => 'h1']); $I->expectTo('See a success message after unpublishing the category'); $I->see('1 category successfully unpublished',['id' => 'system-message-container']); } diff --git a/tests/acceptance/MenuCest.php b/tests/acceptance/MenuCest.php index 39c6612..9364771 100644 --- a/tests/acceptance/MenuCest.php +++ b/tests/acceptance/MenuCest.php @@ -31,24 +31,25 @@ class MenuCest $I->doAdministratorLogin(); $I->amGoingTo('Navigate to Menu Manager page in /administrator/'); $I->amOnPage('administrator/index.php?option=com_menus&view=items&menutype=mainmenu'); - $I->waitForText('Menu Manager: Menu Items', '5', ['css' => 'h1']); + $I->waitForText('Menus: Items', '5', ['css' => 'h1']); $I->expectTo('see menu menager items'); $I->checkForPhpNoticesOrWarnings(); $I->amGoingTo('try to save a category with a filled title'); $I->click(['xpath' => "//button[@onclick=\"Joomla.submitbutton('item.add')\"]"]); - $I->waitForText('Menu Manager: New Menu Item', '5', ['css' => 'h1']); + $I->waitForText('Menus: New Item', '5', ['css' => 'h1']); $I->fillField(['id' => 'jform_title'], 'automated testing' . rand(1, 100)); $I->click(['xpath' => "//a[@href=\"#menuTypeModal\"]"]); - $I->waitForElement('.iframe', 15); - - // TODO: create a pull request in joomla-cms and add a name to the iframe there - // attach a nanme so that we can switch to the iframe later - $I->executeJS('jQuery(".iframe").attr("name", "blah")'); - $I->switchToIFrame("blah"); + $I->waitForElement('.iframe', 60); + $I->comment('I switch to Menu Type iframe'); + $I->switchToIFrame("Menu Item Type"); + $I->waitForElementVisible(['link' => "Weblinks"],60); $I->click(['link' => "Weblinks"]); + $I->wait(1); + $I->waitForElementVisible(['xpath' => "//a[contains(@title, 'Show all the web link categories within a category')]"], 60); $I->click(['xpath' => "//a[contains(@title, 'Show all the web link categories within a category')]"]); + $I->wait(1); $I->switchToIFrame(); - $I->waitForText('Menu Manager: New Menu Item', '5', ['css' => 'h1']); + $I->waitForElement(['xpath' => "//input[@value='List All Web Link Categories']"],60); $I->click(['xpath' => "//button[@onclick=\"Joomla.submitbutton('item.apply')\"]"]); $I->expectTo('see a success message after saving the category'); $I->see('Menu item successfully saved', ['id' => 'system-message-container']);