From cb80a421254332ce4fb994d28d24d64b1d19f903 Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Tue, 4 Jul 2017 16:51:24 -0400 Subject: [PATCH] HOR-3373 + Fix web entry login bloqued when session_block configuration is enabled. + Include behat test. --- behat.yml.dist | 48 +- composer.json | 4 +- composer.lock | 2939 ++++++++++++++++- features/bootstrap/Browser.php | 152 + features/bootstrap/FeatureContext.php | 265 +- features/bootstrap/config.php | 11 + features/resources/WebEntryEventTest.pmx | 922 ++++++ features/webentry2/webentry2.feature | 25 + phpunit.xml | 21 +- tests/WorkflowTestCase.php | 82 + tests/bootstrap.php | 4 +- .../BusinessModel/WebEntryEventTest.php | 25 +- workflow/engine/methods/webentry/access.php | 6 +- .../BusinessModel/WebEntryEvent.php | 9 +- workflow/engine/xmlform/login/login.xml | 2 +- workflow/engine/xmlform/login/loginpm3.xml | 2 +- 16 files changed, 4256 insertions(+), 261 deletions(-) create mode 100644 features/bootstrap/Browser.php create mode 100644 features/resources/WebEntryEventTest.pmx create mode 100644 features/webentry2/webentry2.feature diff --git a/behat.yml.dist b/behat.yml.dist index f70f887da..9755cf243 100644 --- a/behat.yml.dist +++ b/behat.yml.dist @@ -1,37 +1,15 @@ # behat.yml default: - context: - parameters: - base_url: http://processmaker-ip-or-domain/api/1.0/[workspace]/ - access_token: e79057f4276661bedb6154eed3834f6cbd738853 - client_id: x-pm-local-client - client_secret: 179ad45c6ce2cb97cf1029e212046e81 - #uploadFilesFolder: /opt/uploadfiles - #cd5cff9b2e3ebabf49e276e47e977fab5988c00e - login_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/login/login - authentication_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/login/authentication.php - oauth_app_url: http://processmaker-ip-or-domain/sys[workspace]/en/neoclassic/oauth2/clientSetupAjax - oauth_authorization_url: http://processmaker-ip-or-domain/[workspace]/oauth2/authorize - user_name: - user_password: - - # Database connection parameters - # To Mysql - mys_db_type: mysql - mys_db_server: - mys_db_name: - mys_db_username: - mys_db_password: - mys_db_port: 3306 - mys_db_encode: utf8 - mys_db_description: Mysql connection - - # To SQL Server - sqlsrv_db_type: mssql - sqlsrv_db_server: - sqlsrv_db_name: - sqlsrv_db_username: - sqlsrv_db_password: - sqlsrv_db_port: 1433 - sqlsrv_db_encode: utf8 - sqlsrv_db_description: Microsoft SQL Server connection \ No newline at end of file + suites: + webentry2_features: + paths: + - %paths.base%/features/webentry2 + - %paths.base%/features/test + contexts: + - FeatureContext: + parameters: + webDriverHost: "http://localhost:4444" + browser: "chrome" + capabilities: + browserName: chrome + platform: ANY diff --git a/composer.json b/composer.json index 9ce6d6d43..ef99b0e8e 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,9 @@ }, "require-dev": { "guzzle/guzzle": "~3.1.1", - "behat/behat": "2.4.*@stable" + "lmc/steward": "^2.2", + "behat/behat": "^3.3", + "behat/mink-selenium2-driver": "^1.3" }, "autoload": { "psr-0": { diff --git a/composer.lock b/composer.lock index 11ecbc2d6..5a5000809 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a6498bbd2b4058c9da457c82dbc94c85", + "hash": "68d029bf4361cd2a407b76b5afc1c21c", + "content-hash": "22fbf077621d7d3521dec6a55d750251", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -29,7 +30,7 @@ "OAuth2": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -47,7 +48,7 @@ "oauth", "oauth2" ], - "time": "2013-08-12T16:35:58+00:00" + "time": "2013-08-12 16:35:58" }, { "name": "colosa/MichelangeloFE", @@ -55,7 +56,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "7e8e9b5094ad4024e88dfdbdfa80291be78ffe1e" + "reference": "a0d6c77dbc26cf52d40d9ba1360f2aef7418785e" }, "require": { "colosa/pmui": "develop-dev" @@ -66,7 +67,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2017-05-12 18:50:22" + "time": "2017-06-05 21:32:18" }, { "name": "colosa/pmDynaform", @@ -74,7 +75,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "d9b3e4633a3d9f5d7514b99b069eb83aa624eacd" + "reference": "dc7d4f17bc29400c29e255708f0fd770d537865a" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -82,7 +83,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2017-05-11 18:06:59" + "time": "2017-06-10 00:19:09" }, { "name": "colosa/pmUI", @@ -90,7 +91,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "18aca747094ced65220c744adb0a63773d612f8b" + "reference": "172a74afa6264a53b479a4ab174e1757abe16804" }, "type": "library", "description": "JS UI Library", @@ -98,7 +99,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2017-05-11 13:11:20" + "time": "2017-05-22 19:24:16" }, { "name": "dapphp/securimage", @@ -145,7 +146,7 @@ "captcha", "security" ], - "time": "2016-12-04T17:45:57+00:00" + "time": "2016-12-04 17:45:57" }, { "name": "google/apiclient", @@ -179,7 +180,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -188,7 +189,7 @@ "keywords": [ "google" ], - "time": "2015-10-16T22:11:08+00:00" + "time": "2015-10-16 22:11:08" }, { "name": "luracast/restler", @@ -267,7 +268,7 @@ "rest", "server" ], - "time": "2017-01-11T03:42:36+00:00" + "time": "2017-01-11 03:42:36" }, { "name": "monolog/monolog", @@ -345,7 +346,7 @@ "logging", "psr-3" ], - "time": "2016-04-12T18:29:35+00:00" + "time": "2016-04-12 18:29:35" }, { "name": "psr/log", @@ -383,37 +384,97 @@ "psr", "psr-3" ], - "time": "2012-12-21T11:40:51+00:00" + "time": "2012-12-21 11:40:51" } ], "packages-dev": [ { - "name": "behat/behat", - "version": "v2.4.6", + "name": "beberlei/assert", + "version": "v2.7.6", "source": { "type": "git", - "url": "https://github.com/Behat/Behat.git", - "reference": "f1d2964667cf4b21bb6c2c1564f26829a6954155" + "url": "https://github.com/beberlei/assert.git", + "reference": "8726e183ebbb0169cb6cb4832e22ebd355524563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/f1d2964667cf4b21bb6c2c1564f26829a6954155", - "reference": "f1d2964667cf4b21bb6c2c1564f26829a6954155", + "url": "https://api.github.com/repos/beberlei/assert/zipball/8726e183ebbb0169cb6cb4832e22ebd355524563", + "reference": "8726e183ebbb0169cb6cb4832e22ebd355524563", "shasum": "" }, "require": { - "behat/gherkin": "~2.2.9", - "php": ">=5.3.1", - "symfony/config": "~2.0", - "symfony/console": "~2.0", - "symfony/dependency-injection": "~2.0", - "symfony/event-dispatcher": "~2.0", - "symfony/finder": "~2.0", - "symfony/translation": "~2.0", - "symfony/yaml": "~2.0" + "ext-mbstring": "*", + "php": ">=5.3" }, "require-dev": { - "phpunit/phpunit": "~3.7.19" + "friendsofphp/php-cs-fixer": "^2.1.1", + "phpunit/phpunit": "^4|^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" + }, + "files": [ + "lib/Assert/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" + } + ], + "description": "Thin assertion library for input validation in business models.", + "keywords": [ + "assert", + "assertion", + "validation" + ], + "time": "2017-05-04 02:00:24" + }, + { + "name": "behat/behat", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Behat/Behat.git", + "reference": "44a58c1480d6144b2dc2c2bf02b9cef73c83840d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Behat/zipball/44a58c1480d6144b2dc2c2bf02b9cef73c83840d", + "reference": "44a58c1480d6144b2dc2c2bf02b9cef73c83840d", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.4.4", + "behat/transliterator": "^1.2", + "container-interop/container-interop": "^1.1", + "ext-mbstring": "*", + "php": ">=5.3.3", + "symfony/class-loader": "~2.1||~3.0", + "symfony/config": "~2.3||~3.0", + "symfony/console": "~2.5||~3.0", + "symfony/dependency-injection": "~2.1||~3.0", + "symfony/event-dispatcher": "~2.1||~3.0", + "symfony/translation": "~2.3||~3.0", + "symfony/yaml": "~2.1||~3.0" + }, + "require-dev": { + "herrera-io/box": "~1.6.1", + "phpunit/phpunit": "~4.5", + "symfony/process": "~2.5|~3.0" }, "suggest": { "behat/mink-extension": "for integration with Mink testing framework", @@ -426,15 +487,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-develop": "2.4-dev" + "dev-master": "3.2.x-dev" } }, "autoload": { "psr-0": { - "Behat\\Behat": "src/" + "Behat\\Behat": "src/", + "Behat\\Testwork": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -448,44 +510,50 @@ "description": "Scenario-oriented BDD framework for PHP 5.3", "homepage": "http://behat.org/", "keywords": [ + "Agile", "BDD", - "Behat", - "Symfony2" + "ScenarioBDD", + "Scrum", + "StoryBDD", + "User story", + "business", + "development", + "documentation", + "examples", + "symfony", + "testing" ], - "time": "2013-06-06T10:46:48+00:00" + "time": "2017-05-15 16:49:16" }, { "name": "behat/gherkin", - "version": "v2.2.9", + "version": "v4.4.5", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "cca2c477921ca38578d6e9759ea5e450f29c2d8f" + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/cca2c477921ca38578d6e9759ea5e450f29c2d8f", - "reference": "cca2c477921ca38578d6e9759ea5e450f29c2d8f", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", "shasum": "" }, "require": { - "php": ">=5.3.1", - "symfony/finder": ">=2.0,<2.4-dev" + "php": ">=5.3.1" }, "require-dev": { - "symfony/config": ">=2.0,<2.4-dev", - "symfony/translation": ">=2.0,<2.4-dev", - "symfony/yaml": ">=2.0,<2.4-dev" + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" }, "suggest": { - "symfony/config": "If you want to use Config component to manage resources", - "symfony/translation": "If you want to use Symfony2 translations adapter", "symfony/yaml": "If you want to parse features, represented in YAML files" }, "type": "library", "extra": { "branch-alias": { - "dev-develop": "2.2-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -493,7 +561,7 @@ "Behat\\Gherkin": "src/" } }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -509,11 +577,614 @@ "keywords": [ "BDD", "Behat", + "Cucumber", "DSL", - "Symfony2", + "gherkin", "parser" ], - "time": "2013-03-02T10:38:40+00:00" + "time": "2016-10-30 11:50:56" + }, + { + "name": "behat/mink", + "version": "v1.7.1", + "source": { + "type": "git", + "url": "https://github.com/minkphp/Mink.git", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "shasum": "" + }, + "require": { + "php": ">=5.3.1", + "symfony/css-selector": "~2.1|~3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7|~3.0" + }, + "suggest": { + "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", + "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", + "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Mink\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Browser controller/emulator abstraction for PHP", + "homepage": "http://mink.behat.org/", + "keywords": [ + "browser", + "testing", + "web" + ], + "time": "2016-03-05 08:26:18" + }, + { + "name": "behat/mink-selenium2-driver", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/minkphp/MinkSelenium2Driver.git", + "reference": "473a9f3ebe0c134ee1e623ce8a9c852832020288" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/473a9f3ebe0c134ee1e623ce8a9c852832020288", + "reference": "473a9f3ebe0c134ee1e623ce8a9c852832020288", + "shasum": "" + }, + "require": { + "behat/mink": "~1.7@dev", + "instaclick/php-webdriver": "~1.1", + "php": ">=5.3.1" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "type": "mink-driver", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Behat\\Mink\\Driver\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Pete Otaqui", + "email": "pete@otaqui.com", + "homepage": "https://github.com/pete-otaqui" + } + ], + "description": "Selenium2 (WebDriver) driver for Mink framework", + "homepage": "http://mink.behat.org/", + "keywords": [ + "ajax", + "browser", + "javascript", + "selenium", + "testing", + "webdriver" + ], + "time": "2016-03-05 09:10:18" + }, + { + "name": "behat/transliterator", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Transliterator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "time": "2017-04-04 11:38:05" + }, + { + "name": "clue/graph", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/clue/graph.git", + "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", + "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", + "graphp/graphviz": "GraphViz graph drawing / DOT output" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fhaculty\\Graph\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A mathematical graph/network library written in PHP", + "homepage": "https://github.com/clue/graph", + "keywords": [ + "edge", + "graph", + "mathematical", + "network", + "vertex" + ], + "time": "2015-03-07 18:11:31" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14 19:40:03" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06 14:35:42" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "facebook/webdriver", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/eadb0b7a7c3e6578185197fd40158b08c3164c83", + "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-zip": "*", + "php": "^5.5 || ~7.0", + "symfony/process": "^2.8 || ^3.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "4.6.* || ~5.0", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "^2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "time": "2017-04-28 14:54:49" + }, + { + "name": "florianwolters/component-core-stringutils", + "version": "v0.3.1", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", + "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", + "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": "src/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", + "role": "Developer" + } + ], + "description": "Offers operations on the data type string as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", + "keywords": [ + "helper", + "language", + "string", + "wrapper" + ], + "time": "2013-07-01 10:24:07" + }, + { + "name": "florianwolters/component-util-reflection", + "version": "v0.2.0", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", + "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", + "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", + "shasum": "" + }, + "require": { + "florianwolters/component-core-stringutils": ">=0.2-beta", + "php": ">=5.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": "src/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", + "role": "Developer" + } + ], + "description": "Provides operations for the PHP Reflection API as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", + "keywords": [ + "reflection", + "utility" + ], + "time": "2013-03-19 16:42:41" + }, + { + "name": "florianwolters/component-util-singleton", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", + "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", + "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", + "shasum": "" + }, + "require": { + "florianwolters/component-core-stringutils": "0.3.*", + "florianwolters/component-util-reflection": "0.2.*", + "php": ">=5.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "FlorianWolters": [ + "src/php", + "src/tests/unit-tests/php", + "src/tests/mocks/php" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0+" + ], + "authors": [ + { + "name": "Florian Wolters", + "email": "wolters.fl@gmail.com", + "homepage": "http://blog.florianwolters.de", + "role": "Developer" + } + ], + "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", + "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", + "keywords": [ + "creation", + "pattern", + "singleton", + "utility" + ], + "time": "2013-06-29 12:35:22" + }, + { + "name": "graphp/algorithms", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/graphp/algorithms.git", + "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", + "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", + "shasum": "" + }, + "require": { + "clue/graph": "~0.9.0|~0.8.0", + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Graphp\\Algorithms\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "Common mathematical graph algorithms", + "homepage": "https://github.com/graphp/algorithms", + "keywords": [ + "Graph algorithms", + "dijkstra", + "kruskal", + "minimum spanning tree", + "moore-bellman-ford", + "prim", + "shortest path" + ], + "time": "2015-03-08 10:12:01" }, { "name": "guzzle/guzzle", @@ -606,28 +1277,1717 @@ "web service" ], "abandoned": "guzzlehttp/guzzle", - "time": "2013-01-28T00:07:40+00:00" + "time": "2013-01-28 00:07:40" }, { - "name": "symfony/config", - "version": "v2.8.20", + "name": "instaclick/php-webdriver", + "version": "1.4.3", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "0b8541d18507d10204a08384640ff6df3c739ebe" + "url": "https://github.com/instaclick/php-webdriver.git", + "reference": "0c20707dcf30a32728fd6bdeeab996c887fdb2fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/0b8541d18507d10204a08384640ff6df3c739ebe", - "reference": "0b8541d18507d10204a08384640ff6df3c739ebe", + "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/0c20707dcf30a32728fd6bdeeab996c887fdb2fb", + "reference": "0c20707dcf30a32728fd6bdeeab996c887fdb2fb", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/filesystem": "~2.3|~3.0.0" + "ext-curl": "*", + "php": ">=5.3.2" }, "require-dev": { - "symfony/yaml": "~2.7|~3.0.0" + "satooshi/php-coveralls": "dev-master" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "WebDriver": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Justin Bishop", + "email": "jubishop@gmail.com", + "role": "Developer" + }, + { + "name": "Anthon Pang", + "email": "apang@softwaredevelopment.ca", + "role": "Fork maintainer" + } + ], + "description": "PHP WebDriver for Selenium 2", + "homepage": "http://instaclick.com/", + "keywords": [ + "browser", + "selenium", + "webdriver", + "webtest" + ], + "time": "2015-06-15 20:19:33" + }, + { + "name": "lmc/steward", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/lmc-eu/steward.git", + "reference": "3d2b203a8576b074a829b639563322dcb53a2668" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lmc-eu/steward/zipball/3d2b203a8576b074a829b639563322dcb53a2668", + "reference": "3d2b203a8576b074a829b639563322dcb53a2668", + "shasum": "" + }, + "require": { + "beberlei/assert": "^2.7", + "clue/graph": "~0.9.0", + "doctrine/inflector": "~1.0", + "ext-curl": "*", + "ext-zip": "*", + "facebook/webdriver": "^1.4.0", + "florianwolters/component-util-singleton": "0.3.2", + "graphp/algorithms": "^0.8.1", + "nette/reflection": "^2.3.2", + "ondram/ci-detector": "^2.1", + "php": "^5.6 || ~7.0", + "phpunit/phpunit": "^5.7", + "symfony/console": "^3.3.0", + "symfony/event-dispatcher": "~3.0", + "symfony/filesystem": "~3.0", + "symfony/finder": "~3.0", + "symfony/options-resolver": "^3.2", + "symfony/process": "^3.2.0", + "symfony/stopwatch": "^3.0", + "symfony/yaml": "^3.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "php-mock/php-mock-phpunit": "~1.0", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "^2.4.1", + "symfony/var-dumper": "^3.2" + }, + "suggest": { + "ext-posix": "For colored output", + "ext-xdebug": "For remote tests debugging" + }, + "bin": [ + "bin/steward", + "bin/steward.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Lmc\\Steward\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", + "keywords": [ + "phpunit", + "selenium", + "testing", + "webdriver" + ], + "time": "2017-06-05 23:56:28" + }, + { + "name": "myclabs/deep-copy", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-04-12 18:52:22" + }, + { + "name": "nette/caching", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/nette/caching.git", + "reference": "2436e530484a346d0a246733519ceaa40b943bd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/caching/zipball/2436e530484a346d0a246733519ceaa40b943bd6", + "reference": "2436e530484a346d0a246733519ceaa40b943bd6", + "shasum": "" + }, + "require": { + "nette/finder": "^2.2 || ~3.0.0", + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "latte/latte": "^2.4", + "nette/di": "^2.4 || ~3.0.0", + "nette/tester": "^2.0", + "tracy/tracy": "^2.4" + }, + "suggest": { + "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "Nette Caching Component", + "homepage": "https://nette.org", + "time": "2017-01-29 20:40:55" + }, + { + "name": "nette/finder", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "5cabd5fe89f9903715359a403b820c7f94f9bb5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/5cabd5fe89f9903715359a403b820c7f94f9bb5e", + "reference": "5cabd5fe89f9903715359a403b820c7f94f9bb5e", + "shasum": "" + }, + "require": { + "nette/utils": "~2.4", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "Nette Finder: Files Searching", + "homepage": "https://nette.org", + "time": "2016-05-17 15:49:06" + }, + { + "name": "nette/reflection", + "version": "v2.4.1", + "source": { + "type": "git", + "url": "https://github.com/nette/reflection.git", + "reference": "ca6bafe1f73c19719238b58f91e6a399f281069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/reflection/zipball/ca6bafe1f73c19719238b58f91e6a399f281069b", + "reference": "ca6bafe1f73c19719238b58f91e6a399f281069b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/caching": "^2.2 || ^3.0", + "nette/utils": "^2.4 || ^3.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/di": "^2.4 || ^3.0", + "nette/tester": "^2.0", + "tracy/tracy": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "Nette PHP Reflection Component", + "homepage": "https://nette.org", + "time": "2017-01-10 16:10:27" + }, + { + "name": "nette/utils", + "version": "v2.4.6", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "266160aec0d99516e0ea510de1dfa24a0dc1e76e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/266160aec0d99516e0ea510de1dfa24a0dc1e76e", + "reference": "266160aec0d99516e0ea510de1dfa24a0dc1e76e", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize() and toAscii()", + "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "Nette Utility Classes", + "homepage": "https://nette.org", + "time": "2017-04-26 10:04:49" + }, + { + "name": "ondram/ci-detector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "be3410cb14443796122ca051f4224b5eae06aa76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", + "reference": "be3410cb14443796122ca051f4224b5eae06aa76", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.12", + "phpunit/phpunit": "^5.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect current continuous integration server and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "adapter", + "appveyor", + "bamboo", + "continuous integration", + "gitlab", + "interface", + "jenkins", + "teamcity", + "travis" + ], + "time": "2017-05-26 16:39:57" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30 07:12:33" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25 06:54:22" + }, + { + "name": "phpspec/prophecy", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-03-02 20:05:34" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2017-04-02 07:44:40" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03 07:40:28" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26 11:10:40" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27 10:12:30" + }, + { + "name": "phpunit/phpunit", + "version": "5.7.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3cb94a5f8c07a03c8b7527ed7468a2926203f58b", + "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-05-22 07:42:55" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2016-12-08 20:27:08" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14 16:28:37" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04 06:30:41" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29 09:50:25" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22 07:24:03" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26 07:53:53" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19 08:54:04" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18 15:18:39" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19 07:33:16" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28 20:34:47" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03 07:35:21" + }, + { + "name": "symfony/class-loader", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/class-loader.git", + "reference": "386a294d621576302e7cc36965d6ed53b8c73c4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/386a294d621576302e7cc36965d6ed53b8c73c4f", + "reference": "386a294d621576302e7cc36965d6ed53b8c73c4f", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/finder": "~2.8|~3.0", + "symfony/polyfill-apcu": "~1.1" + }, + "suggest": { + "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ClassLoader\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ClassLoader Component", + "homepage": "https://symfony.com", + "time": "2017-06-02 09:51:43" + }, + { + "name": "symfony/config", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "35716d4904e0506a7a5a9bcf23f854aeb5719bca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/35716d4904e0506a7a5a9bcf23f854aeb5719bca", + "reference": "35716d4904e0506a7a5a9bcf23f854aeb5719bca", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/yaml": "~3.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -635,7 +2995,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -662,41 +3022,49 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-04-12T14:07:15+00:00" + "time": "2017-06-02 18:07:20" }, { "name": "symfony/console", - "version": "v2.8.20", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2cfcbced8e39e2313ed4da8896fc8c59a56c0d7e" + "reference": "70d2a29b2911cbdc91a7e268046c395278238b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2cfcbced8e39e2313ed4da8896fc8c59a56c0d7e", - "reference": "2cfcbced8e39e2313ed4da8896fc8c59a56c0d7e", + "url": "https://api.github.com/repos/symfony/console/zipball/70d2a29b2911cbdc91a7e268046c395278238b2e", + "reference": "70d2a29b2911cbdc91a7e268046c395278238b2e", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/debug": "^2.7.2|~3.0.0", + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.1|~3.0.0", - "symfony/process": "~2.1|~3.0.0" + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/filesystem": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -723,20 +3091,73 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-04-26T01:38:53+00:00" + "time": "2017-06-02 19:24:58" }, { - "name": "symfony/debug", - "version": "v3.0.9", + "name": "symfony/css-selector", + "version": "v3.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a" + "url": "https://github.com/symfony/css-selector.git", + "reference": "4d882dced7b995d5274293039370148e291808f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a", - "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4d882dced7b995d5274293039370148e291808f2", + "reference": "4d882dced7b995d5274293039370148e291808f2", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2017-05-01 15:01:29" + }, + { + "name": "symfony/debug", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e9c50482841ef696e8fa1470d950a79c8921f45d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e9c50482841ef696e8fa1470d950a79c8921f45d", + "reference": "e9c50482841ef696e8fa1470d950a79c8921f45d", "shasum": "" }, "require": { @@ -747,13 +3168,12 @@ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -780,43 +3200,50 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2017-06-01 21:01:25" }, { "name": "symfony/dependency-injection", - "version": "v2.8.20", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e1c722dfe4dd04453aeb6b7a6deefb400c878394" + "reference": "4cec19ec1d25f22e1ec8ab14635d3879a1287053" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e1c722dfe4dd04453aeb6b7a6deefb400c878394", - "reference": "e1c722dfe4dd04453aeb6b7a6deefb400c878394", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4cec19ec1d25f22e1ec8ab14635d3879a1287053", + "reference": "4cec19ec1d25f22e1ec8ab14635d3879a1287053", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.5.9", + "psr/container": "^1.0" }, "conflict": { - "symfony/expression-language": "<2.6" + "symfony/config": "<3.3.1", + "symfony/finder": "<3.3", + "symfony/yaml": "<3.3" + }, + "provide": { + "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~2.2|~3.0.0", - "symfony/expression-language": "~2.6|~3.0.0", - "symfony/yaml": "~2.3.42|~2.7.14|~2.8.7|~3.0.7" + "symfony/config": "~3.3", + "symfony/expression-language": "~2.8|~3.0", + "symfony/yaml": "~3.3" }, "suggest": { "symfony/config": "", "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -843,31 +3270,34 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-04-26T01:38:53+00:00" + "time": "2017-06-06 03:13:52" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.20", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7fc8e2b4118ff316550596357325dfd92a51f531" + "reference": "4054a102470665451108f9b59305c79176ef98f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fc8e2b4118ff316550596357325dfd92a51f531", - "reference": "7fc8e2b4118ff316550596357325dfd92a51f531", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4054a102470665451108f9b59305c79176ef98f0", + "reference": "4054a102470665451108f9b59305c79176ef98f0", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.5.9" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "^2.0.5|~3.0.0", - "symfony/dependency-injection": "~2.6|~3.0.0", - "symfony/expression-language": "~2.6|~3.0.0", - "symfony/stopwatch": "~2.3|~3.0.0" + "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", + "symfony/expression-language": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0" }, "suggest": { "symfony/dependency-injection": "", @@ -876,7 +3306,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -903,20 +3333,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-04-26T16:56:54+00:00" + "time": "2017-06-04 18:15:29" }, { "name": "symfony/filesystem", - "version": "v3.0.9", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d" + "reference": "c709670bf64721202ddbe4162846f250735842c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2da5009d9bacbd91d83486aa1f44c793a8c380d", - "reference": "b2da5009d9bacbd91d83486aa1f44c793a8c380d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c709670bf64721202ddbe4162846f250735842c0", + "reference": "c709670bf64721202ddbe4162846f250735842c0", "shasum": "" }, "require": { @@ -925,7 +3355,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -952,41 +3382,40 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-07-20T05:43:46+00:00" + "time": "2017-05-28 14:08:56" }, { "name": "symfony/finder", - "version": "v2.3.42", - "target-dir": "Symfony/Component/Finder", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82" + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/dce4b58434fc1cbd66e3006e539bb53074dfea82", - "reference": "dce4b58434fc1cbd66e3006e539bb53074dfea82", + "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", + "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.5.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.3-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -1002,20 +3431,74 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-05-13T14:58:35+00:00" + "time": "2017-06-01 21:01:25" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "name": "symfony/options-resolver", + "version": "v3.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ff48982d295bcac1fd861f934f041ebc73ae40f0", + "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2017-04-12 14:14:56" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937", + "reference": "f29dca382a6485c3cbe6379f0c61230167681937", "shasum": "" }, "require": { @@ -1027,7 +3510,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -1061,34 +3544,133 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2017-06-09 14:24:12" }, { - "name": "symfony/translation", - "version": "v2.8.20", + "name": "symfony/process", + "version": "v3.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "32b7c0bffc07772cf1a902e3464ef77117fa07c7" + "url": "https://github.com/symfony/process.git", + "reference": "8e30690c67aafb6c7992d6d8eb0d707807dd3eaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/32b7c0bffc07772cf1a902e3464ef77117fa07c7", - "reference": "32b7c0bffc07772cf1a902e3464ef77117fa07c7", + "url": "https://api.github.com/repos/symfony/process/zipball/8e30690c67aafb6c7992d6d8eb0d707807dd3eaf", + "reference": "8e30690c67aafb6c7992d6d8eb0d707807dd3eaf", "shasum": "" }, "require": { - "php": ">=5.3.9", + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2017-05-22 12:32:03" + }, + { + "name": "symfony/stopwatch", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "602a15299dc01556013b07167d4f5d3a60e90d15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/602a15299dc01556013b07167d4f5d3a60e90d15", + "reference": "602a15299dc01556013b07167d4f5d3a60e90d15", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-04-12 14:14:56" + }, + { + "name": "symfony/translation", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "dc3b2a0c6cfff60327ba1c043a82092735397543" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc3b2a0c6cfff60327ba1c043a82092735397543", + "reference": "dc3b2a0c6cfff60327ba1c043a82092735397543", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.7" + "symfony/config": "<2.8", + "symfony/yaml": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8", - "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", - "symfony/yaml": "~2.2|~3.0.0" + "symfony/config": "~2.8|~3.0", + "symfony/intl": "^2.8.18|^3.2.5", + "symfony/yaml": "~3.3" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -1098,7 +3680,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1125,29 +3707,35 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-04-12T14:07:15+00:00" + "time": "2017-05-22 07:42:36" }, { "name": "symfony/yaml", - "version": "v2.8.20", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "93ccdde79f4b079c7558da4656a3cb1c50c68e02" + "reference": "9752a30000a8ca9f4b34b5227d15d0101b96b063" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/93ccdde79f4b079c7558da4656a3cb1c50c68e02", - "reference": "93ccdde79f4b079c7558da4656a3cb1c50c68e02", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9752a30000a8ca9f4b34b5227d15d0101b96b063", + "reference": "9752a30000a8ca9f4b34b5227d15d0101b96b063", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1174,7 +3762,57 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-05-01T14:31:55+00:00" + "time": "2017-06-02 22:05:06" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23 20:04:58" } ], "aliases": [], @@ -1182,8 +3820,7 @@ "stability-flags": { "colosa/pmui": 20, "colosa/michelangelofe": 20, - "colosa/pmdynaform": 20, - "behat/behat": 0 + "colosa/pmdynaform": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/features/bootstrap/Browser.php b/features/bootstrap/Browser.php new file mode 100644 index 000000000..9b7b2d007 --- /dev/null +++ b/features/bootstrap/Browser.php @@ -0,0 +1,152 @@ +waitFor($xpath) : null; + $found = $this->getDriver()->find($xpath); + return $found ? $found[0] : null; + } + + /** + * Get an element by id. + * + * @param string $id + * @return \Behat\Mink\Element\NodeElement + */ + public function getElementById($id, $wait = true) + { + $xpath = "//*[@id=". + $this->encodeXpathString($id). + "]"; + $wait ? $this->waitFor($xpath) : null; + $found = $this->getDriver()->find($xpath); + return $found ? $found[0] : null; + } + + /** + * Get the elements that contains and specific text. + * + * @param string $textContent + * @return \Behat\Mink\Element\NodeElement[] + */ + public function getElementsByTextContent( + $textContent, + $base = '//*', + $wait = true + ) { + $xpath = $base. + "[contains(., ". + $this->encodeXpathString($textContent). + ")]"; + $wait ? $this->waitFor($xpath) : null; + return $this->getDriver()->find($xpath); + } + + /** + * Encodes and string to be used inside an xpath expression. + * + * @param string $string + * @return string + */ + public function encodeXpathString($string) + { + if (strpos($string, '"') !== false && strpos($string, "'") !== false) { + $parts = preg_split( + '/(\'|")/', $string, -1, + PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY + ); + $encoded = []; + foreach ($parts as $str) { + $encoded[] = $this->encodeXpathString($str); + } + return 'concat('.implode(',', $encoded).')'; + } elseif (strpos($string, '"') !== false) { + return "'".$string."'"; + } else { + return '"'.$string.'"'; + } + } + + /** + * Wait until elements defined with a xpath expression are present. + * + * @param string $xpath + * @param int $time + */ + public function waitFor($xpath, $time = 5000) + { + $jxpath = json_encode($xpath); + $condition = 'document.evaluate('.$jxpath.', document, null, XPathResult.ANY_TYPE, null).iterateNext()!==null'; + $this->wait($time, $condition); + //Wait for javascript event handlers + $this->wait($this->waitForJavascriptProcessing); + } + + /** + * Get the last element that match a text. + * + * @param string $text + * @return \Behat\Mink\Element\NodeElement + */ + public function getElementByTextContent($text, $cssClass = '') + { + if ($cssClass) { + $base = '//*[contains(@class, '.$this->encodeXpathString($cssClass).')]'; + } else { + $base = '//*'; + } + $tags = $this->getElementsByTextContent($text, $base); + return $tags ? $tags[count($tags) - 1] : null; + } + + /** + * Get the last element that match a text. + * + * @param string $text + * @return \Behat\Mink\Element\NodeElement + */ + public function getElementByValue($selector, $value) + { + $base = '//'.$selector; + $tags = $this->getDriver()->find($base); + $regexp = '/'.str_replace('\*', '.*', preg_quote($value, '/')).'/'; + foreach ($tags as $tag) { + if (preg_match($regexp, $tag->getValue())) { + return $tag; + } + } + return $tags ? $tags[count($tags)-1] : null; + } + + /** + * Returns Session ID of WebDriver or `null`, when session not started yet. + * + * @return string|null + */ + public function getWebDriverSessionId() + { + return $this->getDriver()->getWebDriverSessionId(); + } +} diff --git a/features/bootstrap/FeatureContext.php b/features/bootstrap/FeatureContext.php index 35cb67158..4b1a93aec 100644 --- a/features/bootstrap/FeatureContext.php +++ b/features/bootstrap/FeatureContext.php @@ -1,67 +1,248 @@ useContext('RestContext', new RestContext($parameters)); + $this->parameters = $parameters; + } + + /** @AfterScenario */ + public function after(AfterScenarioScope $scope) + { + //Close the browser if it was opened. + $this->closeTheBrowser(); } /** - * @When /^I run "([^"]*)"$/ + * @Given a new workspace */ - public function iRun($command) + public function aNewWorkspace() { - exec($command, $result); - $this->output = $result; - + $this->setupDB(); + $this->installLicense(__DIR__.'/../resources/license_*.dat'); + $this->config(['CFG_UID' => 'getStarted', 'CFG_VALUE' => '1']); + $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', + 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); + $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', + 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); + $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', + 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); + $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', + 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); } /** - * @Then /^I should see the file "([^"]*)"$/ + * @Then Config env.ini with :arg1 */ - public function iShouldSeeTheFile($fileName) + public function configEnvIniWith($arg1) { - if (!in_array($fileName, $this->output)) { - throw new Exception('File named ' . $fileName . ' not found!'); + $args = explode("=", $arg1); + $name = trim($args[0]); + $value = isset($args[1]) ? trim($args[1]) : ''; + $this->setEnvIni($name, $value); + } + + /** + * @Then Config env.ini without :arg1 + */ + public function configEnvIniWithout($arg1) + { + $this->unsetEnvIni($arg1); + } + + /** + * @Given Import process :arg1 + */ + public function importProcess($arg1) + { + $this->import(__DIR__.'/../resources/'.$arg1); + } + + /** + * @Then Go to Processmaker login + */ + public function goToProcessmakerLogin() + { + $session = $this->browser; + $session->visit($this->getBaseUrl('login/login')); + } + + /** + * @Then Login as :arg1 :arg2 + */ + public function loginAs($arg1, $arg2) + { + $session = $this->browser; + $username = $session->getElementById('form[USR_USERNAME]'); + $username->setValue('admin'); + $password = $session->getElementById('form[USR_PASSWORD_MASK]'); + $password->setValue('admin'); + $submit = $session->getElementById('form[BSUBMIT]'); + $submit->click(); + } + + /** + * @When Inside :arg1 + */ + public function inside($arg1) + { + $this->browser->switchToIFrame($arg1); + } + + /** + * @Then Copy :arg1 of :arg2 + */ + public function copyOf($arg1, $arg2) + { + $element = $this->browser->getElementByXpath($arg2); + $this->clipboard = $element->getAttribute($arg1); + } + + /** + * @Then Double click on :arg1 + */ + public function doubleClickOn($arg1) + { + $process = $this->browser->getElementByTextContent($arg1); + $process->doubleClick(); + } + + /** + * @Then Right click on :arg1 + */ + public function rightClickOn($arg1) + { + $this->browser->getElementByTextContent($arg1)->rightClick(); + } + + /** + * @Then Click on :arg1 inside :arg2 + */ + public function clickOnInside($arg1, $arg2) + { + $this->browser->getElementByTextContent($arg1, $arg2)->click(); + } + + /** + * @Then Copy value of :arg1 like :arg2 + */ + public function copyValueOfLike($arg1, $arg2) + { + $this->clipboard = $this->browser->getElementByValue($arg1, $arg2)->getValue(); + } + + /** + * @Then Logout Processmaker + */ + public function logoutProcessmaker() + { + $this->browser->visit($this->getBaseUrl('login/login')); + } + + /** + * @Then open url copied + */ + public function openUrlCopied() + { + $this->browser->visit($this->clipboard); + } + + /** + * @Then Verify the page does not redirect to the standard \/login\/login + */ + public function verifyThePageDoesNotRedirectToTheStandardLoginLogin() + { + $this->assertEquals($this->clipboard, $this->browser->getCurrentUrl()); + } + + /** + * @Then Verify the page goes to the WebEntry steps + */ + public function verifyThePageGoesToTheWebentrySteps() + { + $this->assertLessThan(count($this->browser->getElementsByTextContent('Next Step')), 0); + } + + /** + * @Then Open a browser + */ + public function openABrowser() + { + $this->browser = $this->openBrowser(); + } + + /** + * @Then close the browser + */ + public function closeTheBrowser() + { + if ($this->browser) { + $sessionId = $this->browser->getWebDriverSessionId(); + $this->browser->wait(1000); + $this->browser->stop(); + echo "Video available at:\n"; + echo $this->parameters['webDriverHost']."/grid/admin/HubVideoDownloadServlet?sessionId=".$sessionId; + $this->browser = null; } - } + /** + * + * @return \Browser + */ + private function openBrowser() + { + $capabilities = $this->parameters['capabilities']; + $capabilities['seleniumProtocol'] = "WebDriver"; + if (empty($capabilities['browserName'])) { + $capabilities['browserName'] = 'chrome'; + } + $driver = new \Behat\Mink\Driver\Selenium2Driver( + $capabilities['browserName'], + $capabilities, + $this->parameters['webDriverHost'].'/wd/hub' + ); + $session = new Browser($driver); + $session->start(); + return $session; + } -// -// Place your definition and hook methods here: -// -// /** -// * @Given /^I have done something with "([^"]*)"$/ -// */ -// public function iHaveDoneSomethingWith($argument) -// { -// doSomethingWith($argument); -// } -// + public function __destruct() + { + $this->closeTheBrowser(); + } } diff --git a/features/bootstrap/config.php b/features/bootstrap/config.php index 3c9392330..807b27427 100644 --- a/features/bootstrap/config.php +++ b/features/bootstrap/config.php @@ -10,3 +10,14 @@ $config = array ( 'refresh_token' => "ade174976fe77f12ecde7c9e1d8307ac495f443e", ); +call_user_func(function() { + $phpunit = new DOMDocument; + $phpunit->load(__DIR__.'/../../phpunit.xml'); + + foreach($phpunit->getElementsByTagName('php') as $php) { + foreach($php->getElementsByTagName('var') as $var) { + $GLOBALS[$var->getAttribute("name")] = $var->getAttribute("value"); + } + } +}); +require __DIR__.'/../../tests/bootstrap.php'; diff --git a/features/resources/WebEntryEventTest.pmx b/features/resources/WebEntryEventTest.pmx new file mode 100644 index 000000000..79c08d09c --- /dev/null +++ b/features/resources/WebEntryEventTest.pmx @@ -0,0 +1,922 @@ + + + + + Michelangelo + 1498574271 + + + Darwin + 50621 + 1 + test + WebEntryEvent + 441299927591d969ff284b7005303758 + + + + + 382310413591d96b6cb34d7077964801 + 441299927591d969ff284b7005303758 + 684563509591d96a01cbab3088210120 + Task 1 + TASK + 0 + 1 + 0 + EMPTY + + 0 + + + EMPTY + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 635529260591d96b6cbfcb7051450866 + 358612266591d96a014d1e6034604444 + 382310413591d96b6cb34d7077964801 + 891718728591d96a426dd25018705242 + bpmnActivity + 256 + 79 + 150 + 75 + 0 + 0 + bpmnDiagram + +
+ +
+ + 214544408591d96f0071200088162965 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + 754852677591d96f0066c53097043776 + 891718728591d96a426dd25018705242 + bpmnEvent + 100 + 213 + 33 + 33 + 0 + 0 + bpmnDiagram + + + 635529260591d96b6cbfcb7051450866 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + 382310413591d96b6cb34d7077964801 + 891718728591d96a426dd25018705242 + bpmnActivity + 256 + 79 + 150 + 75 + 0 + 0 + bpmnDiagram + + + 735358742591d96b70622c8075629514 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + 349681056591d96b7059a07092140602 + 891718728591d96a426dd25018705242 + bpmnEvent + 100 + 100 + 33 + 33 + 0 + 0 + bpmnDiagram + + + 908599339591d96b70910b0020050417 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + 132598392591d96b7084aa6048071487 + 891718728591d96a426dd25018705242 + bpmnEvent + 545 + 100 + 33 + 33 + 0 + 0 + bpmnDiagram + +
+ +
+ + 358612266591d96a014d1e6034604444 + 441299927591d969ff284b7005303758 + WebEntryEvent + 0 + +
+ +
+ + 754852677591d96f0066c53097043776 + 441299927591d969ff284b7005303758 + 684563509591d96a01cbab3088210120 + + START + EMPTY + 1 + + 0 + + 0 + + + + + + LEAD + + + + + + CATCH + 214544408591d96f0071200088162965 + 358612266591d96a014d1e6034604444 + 754852677591d96f0066c53097043776 + 891718728591d96a426dd25018705242 + bpmnEvent + 100 + 213 + 33 + 33 + 0 + 0 + bpmnDiagram + + + 349681056591d96b7059a07092140602 + 441299927591d969ff284b7005303758 + 684563509591d96a01cbab3088210120 + first + START + EMPTY + 1 + + 0 + + 0 + + + + + + LEAD + + + + + + CATCH + 735358742591d96b70622c8075629514 + 358612266591d96a014d1e6034604444 + 349681056591d96b7059a07092140602 + 891718728591d96a426dd25018705242 + bpmnEvent + 100 + 100 + 33 + 33 + 0 + 0 + bpmnDiagram + + + 132598392591d96b7084aa6048071487 + 441299927591d969ff284b7005303758 + 684563509591d96a01cbab3088210120 + + END + EMPTY + 1 + + 0 + + 0 + + + + + + + + + + + + THROW + 908599339591d96b70910b0020050417 + 358612266591d96a014d1e6034604444 + 132598392591d96b7084aa6048071487 + 891718728591d96a426dd25018705242 + bpmnEvent + 545 + 100 + 33 + 33 + 0 + 0 + bpmnDiagram + +
+ +
+ + 85805175959526a730f76b2063192396 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + SEQUENCE + + 382310413591d96b6cb34d7077964801 + bpmnActivity + 0 + 132598392591d96b7084aa6048071487 + bpmnEvent + 0 + 1 + + 407 + 117 + 545 + 117 + + 1 + + + 92420993359526a730f7569046601886 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + SEQUENCE + + 349681056591d96b7059a07092140602 + bpmnEvent + 0 + 382310413591d96b6cb34d7077964801 + bpmnActivity + 0 + 1 + + 133 + 117 + 256 + 117 + + 1 + + + 94742392759526a730f7308076877504 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + SEQUENCE + + 754852677591d96f0066c53097043776 + bpmnEvent + 0 + 382310413591d96b6cb34d7077964801 + bpmnActivity + 0 + 1 + + 133 + 230 + 332 + 154 + + 1 + +
+ +
+
+
+
+ + 684563509591d96a01cbab3088210120 + 441299927591d969ff284b7005303758 + 358612266591d96a014d1e6034604444 + WebEntryEvent + NONE + 0 + 0 + 0 + +
+ + + 441299927591d969ff284b7005303758 + WebEntryEvent + + + + + + + + + 00000000000000000000000000000001 + + + +
+
+ + + + 441299927591d969ff284b7005303758 + WebEntryEvent + + 441299927591d969ff284b7005303758 + 1 + DAYS + ACTIVE + + NORMAL + FALSE + 0 + 0 + 0 + + + + + + + + PUBLIC + 0 + 0 + + + 0 + + + + 5000 + 10000 + 0 + 0 + 0 + + + 0 + + 1 + + No Category + 1 + +
+ + + 441299927591d969ff284b7005303758 + 382310413591d96b6cb34d7077964801 + Task 1 + + + + + + + NORMAL + 1 + + 0 + + DAYS + FALSE + + BALANCED + + + + + FALSE + FALSE + FALSE + 0 + 0 + FALSE + FALSE + FALSE + FALSE + FALSE + + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + NORMAL + 256 + 79 + 110 + 60 + + + + + 0 + 0 + + + EVERY_TIME + 0 + FALSE + + FALSE + + FALSE + 0 + text + alert_message.html + + + + + + + 441299927591d969ff284b7005303758 + wee-52677591d96f0066c53097043776 + WEBENTRYEVENT + + + + + + + WEBENTRYEVENT + 1 + + 0 + + DAYS + FALSE + + BALANCED + + + + + FALSE + FALSE + FALSE + 0 + 0 + FALSE + FALSE + FALSE + FALSE + FALSE + + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + NORMAL + 100 + 213 + 110 + 60 + + + + + 0 + 0 + + + EVERY_TIME + 0 + FALSE + + FALSE + + FALSE + 0 + text + alert_message.html + + + + + + + 441299927591d969ff284b7005303758 + wee-81056591d96b7059a07092140602 + WEBENTRYEVENT + + + + + + + WEBENTRYEVENT + 1 + + 0 + + DAYS + FALSE + + BALANCED + + + + + FALSE + FALSE + FALSE + 0 + 0 + FALSE + FALSE + FALSE + FALSE + FALSE + + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + NORMAL + 100 + 100 + 110 + 60 + + + + + 0 + 0 + + + EVERY_TIME + 0 + FALSE + + FALSE + + FALSE + 0 + text + alert_message.html + + + + + +
+ + + 34124367559526a737f2d69069467270 + 0 + 441299927591d969ff284b7005303758 + wee-52677591d96f0066c53097043776 + 382310413591d96b6cb34d7077964801 + 1 + SEQUENTIAL + 0 + + FALSE + FALSE + TRUE + 1 + 0 + 1 + 2 + + + + + 68350484159526a734be212087171708 + 0 + 441299927591d969ff284b7005303758 + wee-81056591d96b7059a07092140602 + 382310413591d96b6cb34d7077964801 + 1 + SEQUENTIAL + 0 + + FALSE + FALSE + TRUE + 1 + 0 + 1 + 2 + + + + + 70270521159526a731f2246077513527 + 0 + 441299927591d969ff284b7005303758 + 382310413591d96b6cb34d7077964801 + -1 + 1 + SEQUENTIAL + 0 + + FALSE + FALSE + TRUE + 1 + 0 + 1 + 2 + + + +
+ +
+
+
+
+ + 361249164591d96e6edcb81084086222 + Form2 + + 441299927591d969ff284b7005303758 + xmlform + + + + 2 + + + + 839383145591d96c1331811037017265 + Form1 + + 441299927591d969ff284b7005303758 + xmlform + + + + 2 + + +
+ + + 184891718591d96fc460179075100311 + 441299927591d969ff284b7005303758 + wee-64523591d96fc408bb5096940569 + DYNAFORM + 361249164591d96e6edcb81084086222 + + 1 + EDIT + + + 22063748159526a734912c2062942429 + 441299927591d969ff284b7005303758 + wee-81056591d96b7059a07092140602 + DYNAFORM + 839383145591d96c1331811037017265 + + 1 + EDIT + + + 593687534591d96ceca0ba3047943309 + 441299927591d969ff284b7005303758 + wee-54929591d96cebdc838076843684 + DYNAFORM + 839383145591d96c1331811037017265 + + 1 + EDIT + + + 74100777159526a737c2051048300991 + 441299927591d969ff284b7005303758 + wee-52677591d96f0066c53097043776 + DYNAFORM + 361249164591d96e6edcb81084086222 + + 1 + EDIT + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + 30403965959526a738a4895074682321 + 441299927591d969ff284b7005303758 + 754852677591d96f0066c53097043776 + 382310413591d96b6cb34d7077964801 + 361249164591d96e6edcb81084086222 + 00000000000000000000000000000001 + 754852677591d96f0066c53097043776 + + ENABLED + 18637106659526a73829350046415963 + wee-52677591d96f0066c53097043776 + 754852677591d96f0066c53097043776.php + + SINGLE + ANONYMOUS + 1 + PROCESSMAKER + + DEFAULT + + + + wee-52677591d96f0066c53097043776 + + + 58996753759526a73700e73080322738 + 441299927591d969ff284b7005303758 + 349681056591d96b7059a07092140602 + 382310413591d96b6cb34d7077964801 + 839383145591d96c1331811037017265 + 00000000000000000000000000000001 + 349681056591d96b7059a07092140602 + + ENABLED + 56350997259526a73553602065170481 + wee-81056591d96b7059a07092140602 + 349681056591d96b7059a07092140602.php + + SINGLE + LOGIN_REQUIRED + 0 + CUSTOM_CLEAR + + DEFAULT + classic + en + + wee-81056591d96b7059a07092140602 + +
+ +
+
+
+
+
+
+ + 25146358659526a73a206e5049400821 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 47935392859526a73a375b4044996807 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 61678188859526a73a4c2d5052790333 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 62130216959526a73a15514057910004 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 81082366859526a73a41c25082555170 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 91407667759526a73a2a984083615491 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + + + 98986674459526a73a0a475037755740 + 441299927591d969ff284b7005303758 + 00000000000000000000000000000001 + + + file + 0 + + + +
+ +
+ + + + Form2 + + + + + Form1 + + + + + 349681056591d96b7059a07092140602Info.php + + + + + 754852677591d96f0066c53097043776Info.php + + + + + diff --git a/features/webentry2/webentry2.feature b/features/webentry2/webentry2.feature new file mode 100644 index 000000000..cb2368b0c --- /dev/null +++ b/features/webentry2/webentry2.feature @@ -0,0 +1,25 @@ +Feature: WebEntry2 + PROD-181: As a process architect I want an option to force login on web + entry forms so my users can start cases without having to go to the standard + home/inbox section and without having to click "New Case." + + Scenario: Test WebEntry2 when session_block=1 + Given a new workspace + Then Import process "WebEntryEventTest.pmx" + Then Config env.ini with "session_block=1" + Then Open a browser + Then Go to Processmaker login + Then Login as "admin" "admin" + When Inside "frameMain" + Then Double click on "WebEntryEvent" + Then Right click on "first" + Then Click on "Web Entry" inside "menu" + Then Click on "Link" inside "tab" + Then Copy "href" of "//*[@id='webEntryLink']//a" + Then Logout Processmaker + Then Open URL copied + Then Verify the page does not redirect to the standard /login/login + When Inside "iframe" + Then Login as "admin" "admin" + Then Verify the page goes to the WebEntry steps + Then close the browser diff --git a/phpunit.xml b/phpunit.xml index 3012d70ef..6aaed5152 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -20,11 +20,7 @@ ./workflow/engine/classes - ./workflow/engine/src - - ./workflow/engine/classes/model/map @@ -35,18 +31,19 @@ - + - + - + - - - - - + + + + + + diff --git a/tests/WorkflowTestCase.php b/tests/WorkflowTestCase.php index 69cf9c06e..56df31b9c 100644 --- a/tests/WorkflowTestCase.php +++ b/tests/WorkflowTestCase.php @@ -26,6 +26,11 @@ class WorkflowTestCase extends TestCase $pdo->exec(file_get_contents(PATH_RBAC_CORE.'data/mysql/schema.sql')); $pdo->exec(file_get_contents(PATH_CORE.'data/mysql/insert.sql')); $pdo->exec(file_get_contents(PATH_RBAC_CORE.'data/mysql/insert.sql')); + $pdo->exec("INSERT INTO `APP_SEQUENCE` (`ID`) VALUES ('1')"); + $pdo->exec("INSERT INTO `OAUTH_CLIENTS` (`CLIENT_ID`, `CLIENT_SECRET`, `CLIENT_NAME`, `CLIENT_DESCRIPTION`, `CLIENT_WEBSITE`, `REDIRECT_URI`, `USR_UID`) VALUES +('x-pm-local-client', '179ad45c6ce2cb97cf1029e212046e81', 'PM Web Designer', 'ProcessMaker Web Designer App', 'www.processmaker.com', 'http://".$_SERVER["HTTP_HOST"].":".$_SERVER['SERVER_PORT']."/sys".SYS_SYS."/en/neoclassic/oauth2/grant', '00000000000000000000000000000001');"); + $pdo->exec("INSERT INTO `OAUTH_ACCESS_TOKENS` (`ACCESS_TOKEN`, `CLIENT_ID`, `USER_ID`, `EXPIRES`, `SCOPE`) VALUES +('39704d17049f5aef45e884e7b769989269502f83', 'x-pm-local-client', '00000000000000000000000000000001', '2017-06-15 17:55:19', 'view_processes edit_processes *');"); } /** @@ -114,4 +119,81 @@ class WorkflowTestCase extends TestCase } return rmdir($dir); } + + /** + * Set specific env.ini configuration. + * + * @param type $param + * @param type $value + */ + protected function setEnvIni($param, $value) + { + $config = file_get_contents(PATH_CONFIG.'env.ini'); + if (substr($config, -1, 1) !== "\n") { + $config.="\n"; + } + $regexp = '/^\s*'.preg_quote($param).'\s*=\s*.*\n$/m'; + if (preg_match($regexp, $config."\n")) { + if ($value === null) { + $config = preg_replace($regexp, "", $config); + } else { + $value1 = is_numeric($value) ? $value : json_encode($value, true); + $config = preg_replace($regexp, "$param = $value1\n", $config); + } + } elseif ($value !== null) { + $value1 = is_numeric($value) ? $value : json_encode($value, true); + $config.="$param = $value1\n"; + } + file_put_contents(PATH_CONFIG.'env.ini', $config); + } + + /** + * Unset specific env.ini configuration. + * + * @param type $param + */ + protected function unsetEnvIni($param) + { + $this->setEnvIni($param, null); + } + + /** + * Installa an licese file. + * + * @param type $path + * @throws \Exception + */ + protected function installLicense($path) + { + $licenseFile = glob($path); + if (!$licenseFile) { + throw new \Exception('To continue please put a valid license at features/resources'); + } + G::LoadClass('pmLicenseManager'); + $licenseManager = new pmLicenseManager(); + $licenseManager->installLicense($licenseFile[0]); + } + + /** + * Add a PM configuration. + * + * @return \Configurations + */ + protected function config($config=[]){ + $configGetStarted = new \Configuration; + $data = array_merge([ + 'OBJ_UID' => '', + 'PRO_UID' => '', + 'USR_UID' => '', + 'APP_UID' => '', + ], $config); + $configGetStarted->create($data); + } + + protected function getBaseUrl($url) + { + return (\G::is_https() ? "https://" : "http://"). + $GLOBALS["APP_HOST"].':'.$GLOBALS['SERVER_PORT']."/sys".SYS_SYS."/". + SYS_LANG."/".SYS_SKIN."/".$url; + } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index cbc3605bd..d1928d554 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -8,8 +8,10 @@ define('PATH_SEP', '/'); if (!defined('__DIR__')) { define('__DIR__', dirname(__FILE__)); } -$_SERVER["HTTP_HOST"] = $GLOBALS['APP_HOST']; +$_SERVER["HTTP_HOST"] = $GLOBALS['APP_HOST']. + ($GLOBALS['SERVER_PORT'] === '80' ? '' : ':'.$GLOBALS['SERVER_PORT']); $_SERVER['HTTPS'] = $GLOBALS['HTTPS']; +$_SERVER['SERVER_PORT'] = $GLOBALS['SERVER_PORT']; // Defining the Home Directory define('PATH_TRUNK', realpath(__DIR__.'/../').PATH_SEP); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php index 1b675de21..156157b4f 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php @@ -36,6 +36,10 @@ class WebEntryEventTest extends \WorkflowTestCase 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); + $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', + 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); + $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', + 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); } /** @@ -58,7 +62,7 @@ class WebEntryEventTest extends \WorkflowTestCase $this->assertNotNull($entryEvents[0]['TAS_UID']); $this->assertNull($entryEvents[0]['WE_CUSTOM_TITLE']); $this->assertEquals($entryEvents[0]['WE_AUTHENTICATION'], 'ANONYMOUS'); - $this->assertEquals($entryEvents[0]['WE_HIDE_INFORMATION_BAR'], '0'); + $this->assertEquals($entryEvents[0]['WE_HIDE_INFORMATION_BAR'], '1'); $this->assertEquals($entryEvents[0]['WE_CALLBACK'], 'PROCESSMAKER'); $this->assertNull($entryEvents[0]['WE_CALLBACK_URL']); $this->assertEquals($entryEvents[0]['WE_LINK_GENERATION'], 'DEFAULT'); @@ -76,7 +80,7 @@ class WebEntryEventTest extends \WorkflowTestCase $this->assertCount(3, $entryEvents); $this->assertNull($entryEvents[0]['WE_CUSTOM_TITLE']); $this->assertEquals($entryEvents[0]['WE_AUTHENTICATION'], 'ANONYMOUS'); - $this->assertEquals($entryEvents[0]['WE_HIDE_INFORMATION_BAR'], '0'); + $this->assertEquals($entryEvents[0]['WE_HIDE_INFORMATION_BAR'], '1'); $this->assertEquals($entryEvents[0]['WE_CALLBACK'], 'PROCESSMAKER'); $this->assertNull($entryEvents[0]['WE_CALLBACK_URL']); $this->assertEquals($entryEvents[0]['WE_LINK_GENERATION'], 'DEFAULT'); @@ -158,7 +162,6 @@ class WebEntryEventTest extends \WorkflowTestCase $processUid, $entryEvents, [ - 'WEE_URL' => $this->domain."/sys".SYS_SYS."/".SYS_LANG."/".SYS_SKIN."/".$processUid."/custom.php", 'WE_TYPE' => "MULTIPLE", 'WE_CUSTOM_TITLE' => $this->customTitle, 'WE_AUTHENTICATION' => 'ANONYMOUS', @@ -213,14 +216,11 @@ class WebEntryEventTest extends \WorkflowTestCase $this->assertCount(1, $entryEvents); $rows = $this->getCombinationsFor([ 'WE_LINK_GENERATION' => ['DEFAULT', 'ADVANCED'], - 'WEE_URL' => [ - $this->domain."/sys".SYS_SYS."/".SYS_LANG."/".SYS_SKIN."/".$processUid."/custom.php", - null - ], 'WEE_STATUS' => ['ENABLED', null], 'WE_TYPE' => ['MULTIPLE'], - 'WE_LINK_SKIN' => [SYS_SKIN, null], - 'WE_LINK_LANGUAGE' => [SYS_LANG, null], + 'WE_LINK_SKIN' => [SYS_SKIN], + 'WE_LINK_LANGUAGE' => [SYS_LANG], + 'WE_LINK_DOMAIN' => ['domain.localhost'], ]); $criteria = new \Criteria(); $criteria->add(\BpmnEventPeer::PRJ_UID, $processUid); @@ -323,12 +323,11 @@ class WebEntryEventTest extends \WorkflowTestCase $rows = $this->getCombinationsFor([ 'WE_LINK_GENERATION' => ['DEFAULT', 'ADVANCED'], - 'WEE_URL' => [ - $this->domain."/sys".SYS_SYS."/".SYS_LANG."/".SYS_SKIN."/".$processUid."/custom.php", - null - ], 'DYN_UID' => $dynaformIds, 'USR_UID' => [null, $this->adminUid, static::SKIP_VALUE], + 'WE_LINK_SKIN' => [SYS_SKIN], + 'WE_LINK_LANGUAGE' => [SYS_LANG], + 'WE_LINK_DOMAIN' => [$this->domain], ]); foreach ($rows as $row) { try { diff --git a/workflow/engine/methods/webentry/access.php b/workflow/engine/methods/webentry/access.php index 8cb395b86..62304030e 100644 --- a/workflow/engine/methods/webentry/access.php +++ b/workflow/engine/methods/webentry/access.php @@ -210,7 +210,7 @@ $webEntryModel = \WebEntryPeer::retrieveByPK($weUid); if (localStorage.weData) { try { weData = JSON.parse(localStorage.weData); - if (weData.TAS_UID!==tasUid) { + if (weData.TAS_UID!==tasUid || !weData.APPLICATION || !weData.INDEX) { //TAS_UID is different, reset. resetLocalData(); } @@ -265,7 +265,7 @@ $webEntryModel = \WebEntryPeer::retrieveByPK($weUid); return new Promise(function (logged, failure) { if (!isLogged) { log("login"); - open('../login/login?u=' + encodeURIComponent(location.pathname + '/../../webentry/logged')) + open('../login/login?inIFrame=1&u=' + encodeURIComponent(location.pathname + '/../../webentry/logged')) .then(function (userInformation) { logged(userInformation); }) @@ -411,7 +411,7 @@ $webEntryModel = \WebEntryPeer::retrieveByPK($weUid); //This code is to prevent error at back history //in Firefox $("#iframe").hide(); - $("#iframe").attr("src", "../login/login"); + $("#iframe").attr("src", "../login/login?inIFrame=1"); logout(false, function() { resolve(callbackUrl); }); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php index b468fb449..a307eac61 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php @@ -534,6 +534,12 @@ class WebEntryEvent unset($arrayData["PRJ_UID"]); unset($arrayData["WEE_WE_UID"]); unset($arrayData["WEE_WE_TAS_UID"]); + if (empty($arrayData["WE_LINK_SKIN"])) { + unset($arrayData["WE_LINK_SKIN"]); + } + if (empty($arrayData["WE_LINK_LANGUAGE"])) { + unset($arrayData["WE_LINK_LANGUAGE"]); + } if (!isset($arrayData["WEE_DESCRIPTION"])) { $arrayData["WEE_DESCRIPTION"] = ""; @@ -678,7 +684,8 @@ class WebEntryEvent $task = new \Tasks(); //Task - Step for WE_TYPE=SINGLE - if (isset($arrayData["DYN_UID"]) && $arrayData["DYN_UID"] != $arrayWebEntryEventData["DYN_UID"] && $arrayData["WE_TYPE"]==='SINGLE') { + if (isset($arrayData["DYN_UID"]) && $arrayData["DYN_UID"] != $arrayWebEntryEventData["DYN_UID"] && + ((isset($arrayData["WE_TYPE"]) && $arrayData["WE_TYPE"]==='SINGLE') || ($arrayWebEntryEventData["WE_TYPE"]==='SINGLE'))) { //Delete $step = new \Step(); diff --git a/workflow/engine/xmlform/login/login.xml b/workflow/engine/xmlform/login/login.xml index 9109b06f5..c5efbca9c 100644 --- a/workflow/engine/xmlform/login/login.xml +++ b/workflow/engine/xmlform/login/login.xml @@ -27,7 +27,7 @@ SELECT LANG_ID, LANG_NAME FROM langOptions