├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── Vagrantfile ├── build ├── debug.sh ├── travis_setup.sh └── vm_setup.sh ├── composer.json ├── composer.lock ├── phpunit.xml.dist ├── spec └── MageTest │ └── Manager │ └── Attributes │ └── Provider │ └── YamlProviderSpec.php ├── src └── MageTest │ └── Manager │ ├── Attributes │ └── Provider │ │ ├── ProviderInterface.php │ │ └── YamlProvider.php │ ├── Builders │ ├── AbstractBuilder.php │ ├── Address.php │ ├── Admin.php │ ├── BuilderInterface.php │ ├── Customer.php │ ├── General.php │ ├── Order.php │ └── Product.php │ ├── FixtureManager.php │ └── Fixtures │ ├── Address.yml │ ├── Admin.yml │ ├── Customer.yml │ ├── Order.yml │ └── Product.yml └── tests └── MageTest └── Manager ├── AddressTest.php ├── AdminTest.php ├── Assets └── 370x370.jpg ├── CategoryTest.php ├── CustomerTest.php ├── Fixtures ├── Category.yml └── Customer.yml ├── OrderTest.php ├── ProductTest.php └── WebTestCase.php /.gitignore: -------------------------------------------------------------------------------- 1 | .vagrant 2 | vendor 3 | magento-sample-* 4 | bin 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | php: 3 | - 5.3 4 | 5 | before_install: 6 | - sudo apt-get update > /dev/null 7 | - sudo apt-get install -y apache2 libapache2-mod-fastcgi > /dev/null 8 | - composer install --prefer-source > /dev/null 9 | 10 | before_script: 11 | - build/travis_setup.sh 12 | 13 | script: bin/phpspec r && phpunit -v -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Manager 2 | === 3 | 4 | [![Build Status](https://travis-ci.org/MageTest/Manager.svg?branch=master)](https://travis-ci.org/MageTest/Manager) 5 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/MageTest/Manager/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/MageTest/Manager/?branch=master) 6 | 7 | Manager is a PHP library that manages test fixtures for a Magento site. 8 | 9 | Fixtures 10 | --- 11 | Manager takes YAML files as an input to create fixtures for a Magento test environment. 12 | 13 | A YAML file maps to a Magento model via the key of the collection. The collection then maps to the model attributes 14 | of the defined Magento model. 15 | 16 | Defining a model in a YAML file would look like this: 17 | ``` yaml 18 | customer/customer: 19 | firstname: test 20 | lastname: test 21 | email: customer@example.com 22 | password: 123123pass 23 | website_id: 1 24 | store: 1 25 | status: 1 26 | ``` 27 | The most important part, is the key in the collection. This is the argument supplied to `Mage::getModel()`. 28 | After we define the fixture, all we need to do now is load it into the Manager. 29 | 30 | ``` php 31 | loadFixture('customer/customer'); 40 | 41 | //Use key defined in fixture file, to return instance of fixture model 42 | $customer = $manager->getFixture('customer/customer'); 43 | 44 | //Use customer model, change values/behaviour, assert data for acceptance tests 45 | 46 | //Delete all fixtures from Magento test environment DB 47 | $manager->clear(); 48 | ``` 49 | Usage 50 | --- 51 | This library can be used in conjunction with Behat (or any other acceptance/functional testing tool of choice). 52 | The flow could look something like this: 53 | - Instantiate Manager before the scenario 54 | - Before a feature, load required model(s) for acceptance test 55 | - After the scenario, call `clear()` to clean up fixtures. 56 | 57 | The aim is to keep the Step Defintions slim, and abstract away the DB interactions required to set up test data 58 | (think what Mink does as a web browser emulator abstraction). 59 | 60 | Roadmap 61 | --- 62 | - Default model builder. 63 | - Add support for Configurable products, Bundled products 64 | - Handle multiple instances of the same fixture. 65 | - JSON, XML attribute providers. 66 | 67 | Contributors 68 | --- 69 | Authors: https://github.com/MageTest/Manager/contributors 70 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # ^ Syntax hint 3 | 4 | # -*- mode: ruby -*- 5 | # vi: set ft=ruby : 6 | 7 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 8 | VAGRANTFILE_API_VERSION = "2" 9 | 10 | Vagrant.require_version ">= 1.5.0" 11 | 12 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 13 | 14 | # Box configuration 15 | config.vm.box = "Ubuntu-12.04" 16 | config.vm.box_url = 'https://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-i386-vagrant-disk1.box' 17 | 18 | # Network configuration 19 | config.vm.network :private_network, ip: "10.199.45.152" 20 | config.ssh.forward_agent = true 21 | 22 | # Provision 23 | config.vm.provision :shell, :path => "build/vm_setup.sh" 24 | 25 | # Shared folders 26 | require 'ffi' 27 | mount_options = ["dmode=777", "fmode=777"] 28 | opts = if FFI::Platform::IS_WINDOWS 29 | { :mount_options => mount_options } 30 | else 31 | { :nfs => mount_options } 32 | end 33 | 34 | config.vm.synced_folder(".", "/vagrant", opts) 35 | 36 | # Virtualbox specific configuration 37 | config.vm.provider :virtualbox do |vb| 38 | #vb.gui = true 39 | vb.customize [ 40 | "modifyvm", :id, 41 | "--memory", "1024", 42 | "--name", "MageTest" 43 | ] 44 | end 45 | 46 | end 47 | -------------------------------------------------------------------------------- /build/debug.sh: -------------------------------------------------------------------------------- 1 | export XDEBUG_CONFIG="remote_connect_back=0 idekey=intellij remote_host=10.0.2.2" 2 | export PHP_IDE_CONFIG="serverName=manager.dev" 3 | bin/phpunit --stderr --filter=$1 4 | -------------------------------------------------------------------------------- /build/travis_setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Packages 3 | sudo a2enmod rewrite actions fastcgi alias 4 | sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf 5 | echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini 6 | ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm 7 | 8 | # Configure Apache 9 | WEBROOT="$(pwd)/vendor/magetest/magento/src" 10 | sudo echo " 11 | DocumentRoot $WEBROOT 12 | 13 | 14 | Options FollowSymLinks MultiViews ExecCGI 15 | AllowOverride All 16 | Order deny,allow 17 | Allow from all 18 | 19 | 20 | # Wire up Apache to use Travis CI's php-fpm. 21 | 22 | AddHandler php5-fcgi .php 23 | Action php5-fcgi /php5-fcgi 24 | Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi 25 | FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization 26 | 27 | 28 | " | sudo tee /etc/apache2/sites-available/default > /dev/null 29 | 30 | sudo service apache2 restart 31 | 32 | # Configure custom domain 33 | echo "127.0.0.1 manager.dev" | sudo tee --append /etc/hosts 34 | 35 | # Install Magento sample data 36 | wget -O magento-sample-data-1.6.1.0.tar.gz http://www.magentocommerce.com/downloads/assets/1.6.1.0/magento-sample-data-1.6.1.0.tar.gz 37 | tar -xzf magento-sample-data-1.6.1.0.tar.gz 38 | mysql -uroot -e 'CREATE DATABASE 'magento';' 39 | mysql -uroot magento < magento-sample-data-1.6.1.0/magento_sample_data_for_1.6.1.0.sql 40 | 41 | # Install Magento CE 1.8 42 | php -f vendor/magetest/magento/src/install.php -- --license_agreement_accepted yes --locale en_GB --timezone Europe/London --default_currency GBP --db_host localhost --db_name magento --db_user root --db_pass "" --url http://manager.dev/ --skip_url_validation yes --use_rewrites yes --use_secure no --secure_base_url --use_secure_admin no --admin_firstname admin --admin_lastname admin --admin_email admin@example.com --admin_username admin --admin_password adminadmin123123 -------------------------------------------------------------------------------- /build/vm_setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | #need this to get 'libapache2-mod-fastcgi' 4 | sudo sed -i "/^# deb.*multiverse/ s/^# //" /etc/apt/sources.list 5 | sudo apt-get update 6 | 7 | sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password root' 8 | sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password root' 9 | 10 | sudo apt-get install -y curl apache2 libapache2-mod-fastcgi php5 php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-xdebug mysql-server 11 | 12 | sudo sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php5/fpm/php.ini 13 | sudo sed -i "s/display_errors = .*/display_errors = On/" /etc/php5/fpm/php.ini 14 | sudo sed -i "s/disable_functions = .*/disable_functions = /" /etc/php5/cli/php.ini 15 | sudo sed -i "s/memory_limit = .*/memory_limit = 1024M/" /etc/php5/fpm/php.ini 16 | sudo sed -i "s#date\.timezone.*#date\.timezone = \"Europe\/London\"#" /etc/php5/fpm/php.ini 17 | 18 | sudo a2enmod rewrite actions fastcgi alias 19 | 20 | sudo bash -c "cat >> /etc/apache2/conf.d/servername.conf < 26 | DocumentRoot $WEBROOT 27 | 28 | 29 | Options FollowSymLinks MultiViews ExecCGI 30 | AllowOverride All 31 | Order deny,allow 32 | Allow from all 33 | 34 | 35 | 36 | AddHandler php5-fcgi .php 37 | Action php5-fcgi /php5-fcgi 38 | Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi 39 | FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization 40 | 41 | 42 | " | sudo tee /etc/apache2/sites-available/default > /dev/null 43 | 44 | sudo bash -c "cat >> /etc/php5/conf.d/xdebug.ini < /dev/null 59 | tar -xzf magento-sample-data-1.6.1.0.tar.gz 60 | mysql -uroot -e 'CREATE DATABASE 'magento';' 61 | mysql -uroot magento < magento-sample-data-1.6.1.0/magento_sample_data_for_1.6.1.0.sql 62 | rm -rf magento-sample-data-1.6.1.0* 63 | 64 | rm -f /vagrant/vendor/magetest/magento/src/app/etc/local.xml 65 | php -f /vagrant/vendor/magetest/magento/src/install.php -- --license_agreement_accepted yes --locale en_GB --timezone Europe/London --default_currency GBP --db_host localhost --db_name magento --db_user root --db_pass "" --url http://manager.dev/ --skip_url_validation yes --use_rewrites yes --use_secure no --secure_base_url --use_secure_admin no --admin_firstname admin --admin_lastname admin --admin_email admin@example.com --admin_username admin --admin_password adminadmin123123 66 | 67 | sudo bash -c "cat >> /etc/hosts <=5.3", 15 | "symfony/yaml": "~2.0" 16 | }, 17 | "require-dev": { 18 | "behat/mink": "~1.5.0", 19 | "behat/mink-goutte-driver": "~1.0.9", 20 | "magetest/magento": "~1.8.1.0", 21 | "phpspec/phpspec": "~2.0.1", 22 | "phpunit/phpunit": "~4.0.20" 23 | }, 24 | "autoload": { 25 | "psr-0": { 26 | "": [ 27 | "vendor/magetest/magento/src/app", 28 | "vendor/magetest/magento/src/lib", 29 | "vendor/magetest/magento/src/app/code/local", 30 | "vendor/magetest/magento/src/app/code/community", 31 | "vendor/magetest/magento/src/app/code/core" 32 | ], 33 | "MageTest\\Manager": ["src", "tests"] 34 | } 35 | }, 36 | "config": { 37 | "bin-dir": "bin" 38 | } 39 | } -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" 5 | ], 6 | "hash": "92279618d55ee9d2609b41e85b56e601", 7 | "packages": [ 8 | { 9 | "name": "symfony/yaml", 10 | "version": "v2.5.2", 11 | "target-dir": "Symfony/Component/Yaml", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/symfony/Yaml.git", 15 | "reference": "f868ecdbcc0276b6158dfbf08b9e98ce07f014e1" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/symfony/Yaml/zipball/f868ecdbcc0276b6158dfbf08b9e98ce07f014e1", 20 | "reference": "f868ecdbcc0276b6158dfbf08b9e98ce07f014e1", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3.3" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-master": "2.5-dev" 30 | } 31 | }, 32 | "autoload": { 33 | "psr-0": { 34 | "Symfony\\Component\\Yaml\\": "" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "Fabien Potencier", 44 | "email": "fabien@symfony.com", 45 | "homepage": "http://fabien.potencier.org", 46 | "role": "Lead Developer" 47 | }, 48 | { 49 | "name": "Symfony Community", 50 | "homepage": "http://symfony.com/contributors" 51 | } 52 | ], 53 | "description": "Symfony Yaml Component", 54 | "homepage": "http://symfony.com", 55 | "time": "2014-07-09 09:05:48" 56 | } 57 | ], 58 | "packages-dev": [ 59 | { 60 | "name": "behat/mink", 61 | "version": "v1.5.0", 62 | "source": { 63 | "type": "git", 64 | "url": "https://github.com/Behat/Mink.git", 65 | "reference": "0769e6d9726c140a54dbf827a438c0f9912749fe" 66 | }, 67 | "dist": { 68 | "type": "zip", 69 | "url": "https://api.github.com/repos/Behat/Mink/zipball/0769e6d9726c140a54dbf827a438c0f9912749fe", 70 | "reference": "0769e6d9726c140a54dbf827a438c0f9912749fe", 71 | "shasum": "" 72 | }, 73 | "require": { 74 | "php": ">=5.3.1", 75 | "symfony/css-selector": "~2.0" 76 | }, 77 | "suggest": { 78 | "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", 79 | "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", 80 | "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", 81 | "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" 82 | }, 83 | "type": "library", 84 | "extra": { 85 | "branch-alias": { 86 | "dev-develop": "1.5.x-dev" 87 | } 88 | }, 89 | "autoload": { 90 | "psr-0": { 91 | "Behat\\Mink": "src/" 92 | } 93 | }, 94 | "notification-url": "https://packagist.org/downloads/", 95 | "license": [ 96 | "MIT" 97 | ], 98 | "authors": [ 99 | { 100 | "name": "Konstantin Kudryashov", 101 | "email": "ever.zet@gmail.com", 102 | "homepage": "http://everzet.com" 103 | } 104 | ], 105 | "description": "Web acceptance testing framework for PHP 5.3", 106 | "homepage": "http://mink.behat.org/", 107 | "keywords": [ 108 | "browser", 109 | "testing", 110 | "web" 111 | ], 112 | "time": "2013-04-13 23:39:27" 113 | }, 114 | { 115 | "name": "behat/mink-browserkit-driver", 116 | "version": "v1.1.0", 117 | "source": { 118 | "type": "git", 119 | "url": "https://github.com/Behat/MinkBrowserKitDriver.git", 120 | "reference": "63960c8fcad4529faad1ff33e950217980baa64c" 121 | }, 122 | "dist": { 123 | "type": "zip", 124 | "url": "https://api.github.com/repos/Behat/MinkBrowserKitDriver/zipball/63960c8fcad4529faad1ff33e950217980baa64c", 125 | "reference": "63960c8fcad4529faad1ff33e950217980baa64c", 126 | "shasum": "" 127 | }, 128 | "require": { 129 | "behat/mink": "~1.5.0", 130 | "php": ">=5.3.1", 131 | "symfony/browser-kit": "~2.0", 132 | "symfony/dom-crawler": "~2.0" 133 | }, 134 | "require-dev": { 135 | "silex/silex": "@dev" 136 | }, 137 | "type": "mink-driver", 138 | "extra": { 139 | "branch-alias": { 140 | "dev-master": "1.1.x-dev" 141 | } 142 | }, 143 | "autoload": { 144 | "psr-0": { 145 | "Behat\\Mink\\Driver": "src/" 146 | } 147 | }, 148 | "notification-url": "https://packagist.org/downloads/", 149 | "license": [ 150 | "MIT" 151 | ], 152 | "authors": [ 153 | { 154 | "name": "Konstantin Kudryashov", 155 | "email": "ever.zet@gmail.com", 156 | "homepage": "http://everzet.com" 157 | } 158 | ], 159 | "description": "Symfony2 BrowserKit driver for Mink framework", 160 | "homepage": "http://mink.behat.org/", 161 | "keywords": [ 162 | "Mink", 163 | "Symfony2", 164 | "browser", 165 | "testing" 166 | ], 167 | "time": "2013-04-13 23:46:30" 168 | }, 169 | { 170 | "name": "behat/mink-goutte-driver", 171 | "version": "v1.0.9", 172 | "source": { 173 | "type": "git", 174 | "url": "https://github.com/Behat/MinkGoutteDriver.git", 175 | "reference": "fa1b073b48761464feb0b05e6825da44b20118d8" 176 | }, 177 | "dist": { 178 | "type": "zip", 179 | "url": "https://api.github.com/repos/Behat/MinkGoutteDriver/zipball/fa1b073b48761464feb0b05e6825da44b20118d8", 180 | "reference": "fa1b073b48761464feb0b05e6825da44b20118d8", 181 | "shasum": "" 182 | }, 183 | "require": { 184 | "behat/mink-browserkit-driver": ">=1.0.5,<1.2.0", 185 | "fabpot/goutte": "~1.0.1", 186 | "php": ">=5.3.1" 187 | }, 188 | "type": "mink-driver", 189 | "extra": { 190 | "branch-alias": { 191 | "dev-master": "1.0.x-dev" 192 | } 193 | }, 194 | "autoload": { 195 | "psr-0": { 196 | "Behat\\Mink\\Driver": "src/" 197 | } 198 | }, 199 | "notification-url": "https://packagist.org/downloads/", 200 | "license": [ 201 | "MIT" 202 | ], 203 | "authors": [ 204 | { 205 | "name": "Konstantin Kudryashov", 206 | "email": "ever.zet@gmail.com", 207 | "homepage": "http://everzet.com" 208 | } 209 | ], 210 | "description": "Goutte driver for Mink framework", 211 | "homepage": "http://mink.behat.org/", 212 | "keywords": [ 213 | "browser", 214 | "goutte", 215 | "headless", 216 | "testing" 217 | ], 218 | "time": "2013-07-03 18:43:54" 219 | }, 220 | { 221 | "name": "fabpot/goutte", 222 | "version": "v1.0.6", 223 | "source": { 224 | "type": "git", 225 | "url": "https://github.com/fabpot/Goutte.git", 226 | "reference": "06a5451288ffddd204b10fa6c6f9ab2b86dd515d" 227 | }, 228 | "dist": { 229 | "type": "zip", 230 | "url": "https://api.github.com/repos/fabpot/Goutte/zipball/06a5451288ffddd204b10fa6c6f9ab2b86dd515d", 231 | "reference": "06a5451288ffddd204b10fa6c6f9ab2b86dd515d", 232 | "shasum": "" 233 | }, 234 | "require": { 235 | "ext-curl": "*", 236 | "guzzle/http": "~3.1", 237 | "php": ">=5.3.0", 238 | "symfony/browser-kit": "~2.1", 239 | "symfony/css-selector": "~2.1", 240 | "symfony/dom-crawler": "~2.1", 241 | "symfony/finder": "~2.1", 242 | "symfony/process": "~2.1" 243 | }, 244 | "require-dev": { 245 | "guzzle/plugin-history": "~3.1", 246 | "guzzle/plugin-mock": "~3.1" 247 | }, 248 | "type": "application", 249 | "extra": { 250 | "branch-alias": { 251 | "dev-master": "1.0-dev" 252 | } 253 | }, 254 | "autoload": { 255 | "psr-0": { 256 | "Goutte": "." 257 | } 258 | }, 259 | "notification-url": "https://packagist.org/downloads/", 260 | "license": [ 261 | "MIT" 262 | ], 263 | "authors": [ 264 | { 265 | "name": "Fabien Potencier", 266 | "email": "fabien@symfony.com", 267 | "homepage": "http://fabien.potencier.org", 268 | "role": "Lead Developer" 269 | } 270 | ], 271 | "description": "A simple PHP Web Scraper", 272 | "homepage": "https://github.com/fabpot/Goutte", 273 | "keywords": [ 274 | "scraper" 275 | ], 276 | "time": "2014-03-14 13:02:09" 277 | }, 278 | { 279 | "name": "guzzle/common", 280 | "version": "v3.9.1", 281 | "target-dir": "Guzzle/Common", 282 | "source": { 283 | "type": "git", 284 | "url": "https://github.com/guzzle/common.git", 285 | "reference": "707428cd8a99486418a66c859777b56194d67d6c" 286 | }, 287 | "dist": { 288 | "type": "zip", 289 | "url": "https://api.github.com/repos/guzzle/common/zipball/707428cd8a99486418a66c859777b56194d67d6c", 290 | "reference": "707428cd8a99486418a66c859777b56194d67d6c", 291 | "shasum": "" 292 | }, 293 | "require": { 294 | "php": ">=5.3.2", 295 | "symfony/event-dispatcher": ">=2.1" 296 | }, 297 | "type": "library", 298 | "extra": { 299 | "branch-alias": { 300 | "dev-master": "3.7-dev" 301 | } 302 | }, 303 | "autoload": { 304 | "psr-0": { 305 | "Guzzle\\Common": "" 306 | } 307 | }, 308 | "notification-url": "https://packagist.org/downloads/", 309 | "license": [ 310 | "MIT" 311 | ], 312 | "description": "Common libraries used by Guzzle", 313 | "homepage": "http://guzzlephp.org/", 314 | "keywords": [ 315 | "collection", 316 | "common", 317 | "event", 318 | "exception" 319 | ], 320 | "time": "2014-05-07 17:04:22" 321 | }, 322 | { 323 | "name": "guzzle/http", 324 | "version": "v3.9.1", 325 | "target-dir": "Guzzle/Http", 326 | "source": { 327 | "type": "git", 328 | "url": "https://github.com/guzzle/http.git", 329 | "reference": "222c4e7bccb945c612283d1dd81762f2a20a4efc" 330 | }, 331 | "dist": { 332 | "type": "zip", 333 | "url": "https://api.github.com/repos/guzzle/http/zipball/222c4e7bccb945c612283d1dd81762f2a20a4efc", 334 | "reference": "222c4e7bccb945c612283d1dd81762f2a20a4efc", 335 | "shasum": "" 336 | }, 337 | "require": { 338 | "guzzle/common": "self.version", 339 | "guzzle/parser": "self.version", 340 | "guzzle/stream": "self.version", 341 | "php": ">=5.3.2" 342 | }, 343 | "suggest": { 344 | "ext-curl": "*" 345 | }, 346 | "type": "library", 347 | "extra": { 348 | "branch-alias": { 349 | "dev-master": "3.7-dev" 350 | } 351 | }, 352 | "autoload": { 353 | "psr-0": { 354 | "Guzzle\\Http": "" 355 | } 356 | }, 357 | "notification-url": "https://packagist.org/downloads/", 358 | "license": [ 359 | "MIT" 360 | ], 361 | "authors": [ 362 | { 363 | "name": "Michael Dowling", 364 | "email": "mtdowling@gmail.com", 365 | "homepage": "https://github.com/mtdowling" 366 | } 367 | ], 368 | "description": "HTTP libraries used by Guzzle", 369 | "homepage": "http://guzzlephp.org/", 370 | "keywords": [ 371 | "Guzzle", 372 | "client", 373 | "curl", 374 | "http", 375 | "http client" 376 | ], 377 | "time": "2014-05-01 21:56:28" 378 | }, 379 | { 380 | "name": "guzzle/parser", 381 | "version": "v3.9.1", 382 | "target-dir": "Guzzle/Parser", 383 | "source": { 384 | "type": "git", 385 | "url": "https://github.com/guzzle/parser.git", 386 | "reference": "6874d171318a8e93eb6d224cf85e4678490b625c" 387 | }, 388 | "dist": { 389 | "type": "zip", 390 | "url": "https://api.github.com/repos/guzzle/parser/zipball/6874d171318a8e93eb6d224cf85e4678490b625c", 391 | "reference": "6874d171318a8e93eb6d224cf85e4678490b625c", 392 | "shasum": "" 393 | }, 394 | "require": { 395 | "php": ">=5.3.2" 396 | }, 397 | "type": "library", 398 | "extra": { 399 | "branch-alias": { 400 | "dev-master": "3.7-dev" 401 | } 402 | }, 403 | "autoload": { 404 | "psr-0": { 405 | "Guzzle\\Parser": "" 406 | } 407 | }, 408 | "notification-url": "https://packagist.org/downloads/", 409 | "license": [ 410 | "MIT" 411 | ], 412 | "description": "Interchangeable parsers used by Guzzle", 413 | "homepage": "http://guzzlephp.org/", 414 | "keywords": [ 415 | "URI Template", 416 | "cookie", 417 | "http", 418 | "message", 419 | "url" 420 | ], 421 | "time": "2014-02-05 18:29:46" 422 | }, 423 | { 424 | "name": "guzzle/stream", 425 | "version": "v3.9.1", 426 | "target-dir": "Guzzle/Stream", 427 | "source": { 428 | "type": "git", 429 | "url": "https://github.com/guzzle/stream.git", 430 | "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0" 431 | }, 432 | "dist": { 433 | "type": "zip", 434 | "url": "https://api.github.com/repos/guzzle/stream/zipball/60c7fed02e98d2c518dae8f97874c8f4622100f0", 435 | "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0", 436 | "shasum": "" 437 | }, 438 | "require": { 439 | "guzzle/common": "self.version", 440 | "php": ">=5.3.2" 441 | }, 442 | "suggest": { 443 | "guzzle/http": "To convert Guzzle request objects to PHP streams" 444 | }, 445 | "type": "library", 446 | "extra": { 447 | "branch-alias": { 448 | "dev-master": "3.7-dev" 449 | } 450 | }, 451 | "autoload": { 452 | "psr-0": { 453 | "Guzzle\\Stream": "" 454 | } 455 | }, 456 | "notification-url": "https://packagist.org/downloads/", 457 | "license": [ 458 | "MIT" 459 | ], 460 | "authors": [ 461 | { 462 | "name": "Michael Dowling", 463 | "email": "mtdowling@gmail.com", 464 | "homepage": "https://github.com/mtdowling" 465 | } 466 | ], 467 | "description": "Guzzle stream wrapper component", 468 | "homepage": "http://guzzlephp.org/", 469 | "keywords": [ 470 | "Guzzle", 471 | "component", 472 | "stream" 473 | ], 474 | "time": "2014-05-01 21:36:02" 475 | }, 476 | { 477 | "name": "magetest/magento", 478 | "version": "v1.8.1.0", 479 | "source": { 480 | "type": "git", 481 | "url": "https://github.com/MageTest/magento.git", 482 | "reference": "2d3fa2dd48821ef25118512023b5266a98a00562" 483 | }, 484 | "dist": { 485 | "type": "zip", 486 | "url": "https://api.github.com/repos/MageTest/magento/zipball/2d3fa2dd48821ef25118512023b5266a98a00562", 487 | "reference": "2d3fa2dd48821ef25118512023b5266a98a00562", 488 | "shasum": "" 489 | }, 490 | "type": "library", 491 | "notification-url": "https://packagist.org/downloads/", 492 | "license": [ 493 | "OSL-3.0", 494 | "AFL-3.0" 495 | ], 496 | "authors": [ 497 | { 498 | "name": "Alistair Stead", 499 | "email": "astead@sessiondigital.com" 500 | }, 501 | { 502 | "name": "Marco De Bortoli", 503 | "email": "marco.debortoli@sessiondigital.com" 504 | }, 505 | { 506 | "name": "Other contributors", 507 | "homepage": "https://github.com/MageTest/contributors/contributors" 508 | } 509 | ], 510 | "description": "Latest Magento community version stable releases", 511 | "homepage": "http://www.magentocommerce.com", 512 | "keywords": [ 513 | "1.x", 514 | "community", 515 | "magento", 516 | "stable" 517 | ], 518 | "time": "2014-05-23 11:29:18" 519 | }, 520 | { 521 | "name": "phpdocumentor/reflection-docblock", 522 | "version": "2.0.2", 523 | "source": { 524 | "type": "git", 525 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 526 | "reference": "0bca477a34baea39add016af90046f002a175619" 527 | }, 528 | "dist": { 529 | "type": "zip", 530 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/0bca477a34baea39add016af90046f002a175619", 531 | "reference": "0bca477a34baea39add016af90046f002a175619", 532 | "shasum": "" 533 | }, 534 | "require": { 535 | "php": ">=5.3.3" 536 | }, 537 | "require-dev": { 538 | "phpunit/phpunit": "3.7.*@stable" 539 | }, 540 | "suggest": { 541 | "dflydev/markdown": "1.0.*", 542 | "erusev/parsedown": "~0.7" 543 | }, 544 | "type": "library", 545 | "extra": { 546 | "branch-alias": { 547 | "dev-master": "2.0.x-dev" 548 | } 549 | }, 550 | "autoload": { 551 | "psr-0": { 552 | "phpDocumentor": [ 553 | "src/" 554 | ] 555 | } 556 | }, 557 | "notification-url": "https://packagist.org/downloads/", 558 | "license": [ 559 | "MIT" 560 | ], 561 | "authors": [ 562 | { 563 | "name": "Mike van Riel", 564 | "email": "mike.vanriel@naenius.com" 565 | } 566 | ], 567 | "time": "2014-03-28 09:21:30" 568 | }, 569 | { 570 | "name": "phpspec/php-diff", 571 | "version": "v1.0.2", 572 | "source": { 573 | "type": "git", 574 | "url": "https://github.com/phpspec/php-diff.git", 575 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" 576 | }, 577 | "dist": { 578 | "type": "zip", 579 | "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", 580 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", 581 | "shasum": "" 582 | }, 583 | "type": "library", 584 | "autoload": { 585 | "psr-0": { 586 | "Diff": "lib/" 587 | } 588 | }, 589 | "notification-url": "https://packagist.org/downloads/", 590 | "license": [ 591 | "BSD-3-Clause" 592 | ], 593 | "authors": [ 594 | { 595 | "name": "Chris Boulton", 596 | "homepage": "http://github.com/chrisboulton", 597 | "role": "Original developer" 598 | } 599 | ], 600 | "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", 601 | "time": "2013-11-01 13:02:21" 602 | }, 603 | { 604 | "name": "phpspec/phpspec", 605 | "version": "2.0.1", 606 | "source": { 607 | "type": "git", 608 | "url": "https://github.com/phpspec/phpspec.git", 609 | "reference": "61712147412cb647b6cb68b19833a60bfda759a1" 610 | }, 611 | "dist": { 612 | "type": "zip", 613 | "url": "https://api.github.com/repos/phpspec/phpspec/zipball/61712147412cb647b6cb68b19833a60bfda759a1", 614 | "reference": "61712147412cb647b6cb68b19833a60bfda759a1", 615 | "shasum": "" 616 | }, 617 | "require": { 618 | "php": ">=5.3.3", 619 | "phpspec/php-diff": "~1.0.0", 620 | "phpspec/prophecy": "~1.1", 621 | "symfony/console": "~2.1", 622 | "symfony/event-dispatcher": "~2.1", 623 | "symfony/finder": "~2.1", 624 | "symfony/yaml": "~2.1" 625 | }, 626 | "require-dev": { 627 | "behat/behat": "~2.5", 628 | "bossa/phpspec2-expect": "dev-master", 629 | "symfony/filesystem": "~2.1" 630 | }, 631 | "suggest": { 632 | "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters" 633 | }, 634 | "bin": [ 635 | "bin/phpspec" 636 | ], 637 | "type": "library", 638 | "extra": { 639 | "branch-alias": { 640 | "dev-master": "2.0.x-dev" 641 | } 642 | }, 643 | "autoload": { 644 | "psr-0": { 645 | "PhpSpec": "src/" 646 | } 647 | }, 648 | "notification-url": "https://packagist.org/downloads/", 649 | "license": [ 650 | "MIT" 651 | ], 652 | "authors": [ 653 | { 654 | "name": "Konstantin Kudryashov", 655 | "email": "ever.zet@gmail.com", 656 | "homepage": "http://everzet.com" 657 | }, 658 | { 659 | "name": "Marcello Duarte", 660 | "homepage": "http://marcelloduarte.net/" 661 | } 662 | ], 663 | "description": "Specification-oriented BDD framework for PHP 5.3+", 664 | "homepage": "http://phpspec.net/", 665 | "keywords": [ 666 | "BDD", 667 | "SpecBDD", 668 | "TDD", 669 | "spec", 670 | "specification", 671 | "testing", 672 | "tests" 673 | ], 674 | "time": "2014-07-01 14:09:19" 675 | }, 676 | { 677 | "name": "phpspec/prophecy", 678 | "version": "v1.2.0", 679 | "source": { 680 | "type": "git", 681 | "url": "https://github.com/phpspec/prophecy.git", 682 | "reference": "328484c88ed3cd7d1980b624bb98fa635f212ec9" 683 | }, 684 | "dist": { 685 | "type": "zip", 686 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/328484c88ed3cd7d1980b624bb98fa635f212ec9", 687 | "reference": "328484c88ed3cd7d1980b624bb98fa635f212ec9", 688 | "shasum": "" 689 | }, 690 | "require": { 691 | "phpdocumentor/reflection-docblock": "~2.0" 692 | }, 693 | "require-dev": { 694 | "phpspec/phpspec": "~2.0" 695 | }, 696 | "type": "library", 697 | "extra": { 698 | "branch-alias": { 699 | "dev-master": "1.2.x-dev" 700 | } 701 | }, 702 | "autoload": { 703 | "psr-0": { 704 | "Prophecy\\": "src/" 705 | } 706 | }, 707 | "notification-url": "https://packagist.org/downloads/", 708 | "license": [ 709 | "MIT" 710 | ], 711 | "authors": [ 712 | { 713 | "name": "Konstantin Kudryashov", 714 | "email": "ever.zet@gmail.com", 715 | "homepage": "http://everzet.com" 716 | }, 717 | { 718 | "name": "Marcello Duarte", 719 | "email": "marcello.duarte@gmail.com" 720 | } 721 | ], 722 | "description": "Highly opinionated mocking framework for PHP 5.3+", 723 | "homepage": "http://phpspec.org", 724 | "keywords": [ 725 | "Double", 726 | "Dummy", 727 | "fake", 728 | "mock", 729 | "spy", 730 | "stub" 731 | ], 732 | "time": "2014-07-18 21:26:55" 733 | }, 734 | { 735 | "name": "phpunit/php-code-coverage", 736 | "version": "2.0.9", 737 | "source": { 738 | "type": "git", 739 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 740 | "reference": "ed8ac99ce38c3fd134128c898f7ca74665abef7f" 741 | }, 742 | "dist": { 743 | "type": "zip", 744 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ed8ac99ce38c3fd134128c898f7ca74665abef7f", 745 | "reference": "ed8ac99ce38c3fd134128c898f7ca74665abef7f", 746 | "shasum": "" 747 | }, 748 | "require": { 749 | "php": ">=5.3.3", 750 | "phpunit/php-file-iterator": "~1.3.1", 751 | "phpunit/php-text-template": "~1.2.0", 752 | "phpunit/php-token-stream": "~1.2.2", 753 | "sebastian/environment": "~1.0.0", 754 | "sebastian/version": "~1.0.3" 755 | }, 756 | "require-dev": { 757 | "ext-xdebug": ">=2.1.4", 758 | "phpunit/phpunit": "~4.0.14" 759 | }, 760 | "suggest": { 761 | "ext-dom": "*", 762 | "ext-xdebug": ">=2.2.1", 763 | "ext-xmlwriter": "*" 764 | }, 765 | "type": "library", 766 | "extra": { 767 | "branch-alias": { 768 | "dev-master": "2.0.x-dev" 769 | } 770 | }, 771 | "autoload": { 772 | "classmap": [ 773 | "src/" 774 | ] 775 | }, 776 | "notification-url": "https://packagist.org/downloads/", 777 | "include-path": [ 778 | "" 779 | ], 780 | "license": [ 781 | "BSD-3-Clause" 782 | ], 783 | "authors": [ 784 | { 785 | "name": "Sebastian Bergmann", 786 | "email": "sb@sebastian-bergmann.de", 787 | "role": "lead" 788 | } 789 | ], 790 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 791 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 792 | "keywords": [ 793 | "coverage", 794 | "testing", 795 | "xunit" 796 | ], 797 | "time": "2014-06-29 08:14:40" 798 | }, 799 | { 800 | "name": "phpunit/php-file-iterator", 801 | "version": "1.3.4", 802 | "source": { 803 | "type": "git", 804 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 805 | "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" 806 | }, 807 | "dist": { 808 | "type": "zip", 809 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", 810 | "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", 811 | "shasum": "" 812 | }, 813 | "require": { 814 | "php": ">=5.3.3" 815 | }, 816 | "type": "library", 817 | "autoload": { 818 | "classmap": [ 819 | "File/" 820 | ] 821 | }, 822 | "notification-url": "https://packagist.org/downloads/", 823 | "include-path": [ 824 | "" 825 | ], 826 | "license": [ 827 | "BSD-3-Clause" 828 | ], 829 | "authors": [ 830 | { 831 | "name": "Sebastian Bergmann", 832 | "email": "sb@sebastian-bergmann.de", 833 | "role": "lead" 834 | } 835 | ], 836 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 837 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 838 | "keywords": [ 839 | "filesystem", 840 | "iterator" 841 | ], 842 | "time": "2013-10-10 15:34:57" 843 | }, 844 | { 845 | "name": "phpunit/php-text-template", 846 | "version": "1.2.0", 847 | "source": { 848 | "type": "git", 849 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 850 | "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" 851 | }, 852 | "dist": { 853 | "type": "zip", 854 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", 855 | "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", 856 | "shasum": "" 857 | }, 858 | "require": { 859 | "php": ">=5.3.3" 860 | }, 861 | "type": "library", 862 | "autoload": { 863 | "classmap": [ 864 | "Text/" 865 | ] 866 | }, 867 | "notification-url": "https://packagist.org/downloads/", 868 | "include-path": [ 869 | "" 870 | ], 871 | "license": [ 872 | "BSD-3-Clause" 873 | ], 874 | "authors": [ 875 | { 876 | "name": "Sebastian Bergmann", 877 | "email": "sb@sebastian-bergmann.de", 878 | "role": "lead" 879 | } 880 | ], 881 | "description": "Simple template engine.", 882 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 883 | "keywords": [ 884 | "template" 885 | ], 886 | "time": "2014-01-30 17:20:04" 887 | }, 888 | { 889 | "name": "phpunit/php-timer", 890 | "version": "1.0.5", 891 | "source": { 892 | "type": "git", 893 | "url": "https://github.com/sebastianbergmann/php-timer.git", 894 | "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" 895 | }, 896 | "dist": { 897 | "type": "zip", 898 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", 899 | "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", 900 | "shasum": "" 901 | }, 902 | "require": { 903 | "php": ">=5.3.3" 904 | }, 905 | "type": "library", 906 | "autoload": { 907 | "classmap": [ 908 | "PHP/" 909 | ] 910 | }, 911 | "notification-url": "https://packagist.org/downloads/", 912 | "include-path": [ 913 | "" 914 | ], 915 | "license": [ 916 | "BSD-3-Clause" 917 | ], 918 | "authors": [ 919 | { 920 | "name": "Sebastian Bergmann", 921 | "email": "sb@sebastian-bergmann.de", 922 | "role": "lead" 923 | } 924 | ], 925 | "description": "Utility class for timing", 926 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 927 | "keywords": [ 928 | "timer" 929 | ], 930 | "time": "2013-08-02 07:42:54" 931 | }, 932 | { 933 | "name": "phpunit/php-token-stream", 934 | "version": "1.2.2", 935 | "source": { 936 | "type": "git", 937 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 938 | "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32" 939 | }, 940 | "dist": { 941 | "type": "zip", 942 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32", 943 | "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32", 944 | "shasum": "" 945 | }, 946 | "require": { 947 | "ext-tokenizer": "*", 948 | "php": ">=5.3.3" 949 | }, 950 | "type": "library", 951 | "extra": { 952 | "branch-alias": { 953 | "dev-master": "1.2-dev" 954 | } 955 | }, 956 | "autoload": { 957 | "classmap": [ 958 | "PHP/" 959 | ] 960 | }, 961 | "notification-url": "https://packagist.org/downloads/", 962 | "include-path": [ 963 | "" 964 | ], 965 | "license": [ 966 | "BSD-3-Clause" 967 | ], 968 | "authors": [ 969 | { 970 | "name": "Sebastian Bergmann", 971 | "email": "sb@sebastian-bergmann.de", 972 | "role": "lead" 973 | } 974 | ], 975 | "description": "Wrapper around PHP's tokenizer extension.", 976 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 977 | "keywords": [ 978 | "tokenizer" 979 | ], 980 | "time": "2014-03-03 05:10:30" 981 | }, 982 | { 983 | "name": "phpunit/phpunit", 984 | "version": "4.0.20", 985 | "source": { 986 | "type": "git", 987 | "url": "https://github.com/sebastianbergmann/phpunit.git", 988 | "reference": "de121ce8708b7ac7f628603d7682d0d57f528345" 989 | }, 990 | "dist": { 991 | "type": "zip", 992 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de121ce8708b7ac7f628603d7682d0d57f528345", 993 | "reference": "de121ce8708b7ac7f628603d7682d0d57f528345", 994 | "shasum": "" 995 | }, 996 | "require": { 997 | "ext-dom": "*", 998 | "ext-json": "*", 999 | "ext-pcre": "*", 1000 | "ext-reflection": "*", 1001 | "ext-spl": "*", 1002 | "php": ">=5.3.3", 1003 | "phpunit/php-code-coverage": ">=2.0.0,<2.1.0", 1004 | "phpunit/php-file-iterator": "~1.3.1", 1005 | "phpunit/php-text-template": "~1.2", 1006 | "phpunit/php-timer": "~1.0.2", 1007 | "phpunit/phpunit-mock-objects": ">=2.0.0,<2.1.0", 1008 | "sebastian/diff": "~1.1", 1009 | "sebastian/environment": "~1.0", 1010 | "sebastian/exporter": "~1.0.1", 1011 | "sebastian/version": "~1.0.3", 1012 | "symfony/yaml": "~2.0" 1013 | }, 1014 | "suggest": { 1015 | "phpunit/php-invoker": "~1.1" 1016 | }, 1017 | "bin": [ 1018 | "phpunit" 1019 | ], 1020 | "type": "library", 1021 | "extra": { 1022 | "branch-alias": { 1023 | "dev-master": "4.0.x-dev" 1024 | } 1025 | }, 1026 | "autoload": { 1027 | "classmap": [ 1028 | "src/" 1029 | ] 1030 | }, 1031 | "notification-url": "https://packagist.org/downloads/", 1032 | "include-path": [ 1033 | "", 1034 | "../../symfony/yaml/" 1035 | ], 1036 | "license": [ 1037 | "BSD-3-Clause" 1038 | ], 1039 | "authors": [ 1040 | { 1041 | "name": "Sebastian Bergmann", 1042 | "email": "sebastian@phpunit.de", 1043 | "role": "lead" 1044 | } 1045 | ], 1046 | "description": "The PHP Unit Testing framework.", 1047 | "homepage": "http://www.phpunit.de/", 1048 | "keywords": [ 1049 | "phpunit", 1050 | "testing", 1051 | "xunit" 1052 | ], 1053 | "time": "2014-05-02 07:19:37" 1054 | }, 1055 | { 1056 | "name": "phpunit/phpunit-mock-objects", 1057 | "version": "2.0.10", 1058 | "source": { 1059 | "type": "git", 1060 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1061 | "reference": "e60bb929c50ae4237aaf680a4f6773f4ee17f0a2" 1062 | }, 1063 | "dist": { 1064 | "type": "zip", 1065 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/e60bb929c50ae4237aaf680a4f6773f4ee17f0a2", 1066 | "reference": "e60bb929c50ae4237aaf680a4f6773f4ee17f0a2", 1067 | "shasum": "" 1068 | }, 1069 | "require": { 1070 | "php": ">=5.3.3", 1071 | "phpunit/php-text-template": "~1.2" 1072 | }, 1073 | "require-dev": { 1074 | "phpunit/phpunit": ">=4.0.0,<4.1.0" 1075 | }, 1076 | "suggest": { 1077 | "ext-soap": "*" 1078 | }, 1079 | "type": "library", 1080 | "extra": { 1081 | "branch-alias": { 1082 | "dev-master": "2.0.x-dev" 1083 | } 1084 | }, 1085 | "autoload": { 1086 | "classmap": [ 1087 | "src/" 1088 | ] 1089 | }, 1090 | "notification-url": "https://packagist.org/downloads/", 1091 | "include-path": [ 1092 | "" 1093 | ], 1094 | "license": [ 1095 | "BSD-3-Clause" 1096 | ], 1097 | "authors": [ 1098 | { 1099 | "name": "Sebastian Bergmann", 1100 | "email": "sb@sebastian-bergmann.de", 1101 | "role": "lead" 1102 | } 1103 | ], 1104 | "description": "Mock Object library for PHPUnit", 1105 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1106 | "keywords": [ 1107 | "mock", 1108 | "xunit" 1109 | ], 1110 | "time": "2014-06-12 07:19:48" 1111 | }, 1112 | { 1113 | "name": "sebastian/diff", 1114 | "version": "1.1.0", 1115 | "source": { 1116 | "type": "git", 1117 | "url": "https://github.com/sebastianbergmann/diff.git", 1118 | "reference": "1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d" 1119 | }, 1120 | "dist": { 1121 | "type": "zip", 1122 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d", 1123 | "reference": "1e091702a5a38e6b4c1ba9ca816e3dd343df2e2d", 1124 | "shasum": "" 1125 | }, 1126 | "require": { 1127 | "php": ">=5.3.3" 1128 | }, 1129 | "type": "library", 1130 | "extra": { 1131 | "branch-alias": { 1132 | "dev-master": "1.1-dev" 1133 | } 1134 | }, 1135 | "autoload": { 1136 | "classmap": [ 1137 | "src/" 1138 | ] 1139 | }, 1140 | "notification-url": "https://packagist.org/downloads/", 1141 | "license": [ 1142 | "BSD-3-Clause" 1143 | ], 1144 | "authors": [ 1145 | { 1146 | "name": "Sebastian Bergmann", 1147 | "email": "sebastian@phpunit.de", 1148 | "role": "lead" 1149 | }, 1150 | { 1151 | "name": "Kore Nordmann", 1152 | "email": "mail@kore-nordmann.de" 1153 | } 1154 | ], 1155 | "description": "Diff implementation", 1156 | "homepage": "http://www.github.com/sebastianbergmann/diff", 1157 | "keywords": [ 1158 | "diff" 1159 | ], 1160 | "time": "2013-08-03 16:46:33" 1161 | }, 1162 | { 1163 | "name": "sebastian/environment", 1164 | "version": "1.0.0", 1165 | "source": { 1166 | "type": "git", 1167 | "url": "https://github.com/sebastianbergmann/environment.git", 1168 | "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a" 1169 | }, 1170 | "dist": { 1171 | "type": "zip", 1172 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/79517609ec01139cd7e9fded0dd7ce08c952ef6a", 1173 | "reference": "79517609ec01139cd7e9fded0dd7ce08c952ef6a", 1174 | "shasum": "" 1175 | }, 1176 | "require": { 1177 | "php": ">=5.3.3" 1178 | }, 1179 | "require-dev": { 1180 | "phpunit/phpunit": "4.0.*@dev" 1181 | }, 1182 | "type": "library", 1183 | "extra": { 1184 | "branch-alias": { 1185 | "dev-master": "1.0.x-dev" 1186 | } 1187 | }, 1188 | "autoload": { 1189 | "classmap": [ 1190 | "src/" 1191 | ] 1192 | }, 1193 | "notification-url": "https://packagist.org/downloads/", 1194 | "license": [ 1195 | "BSD-3-Clause" 1196 | ], 1197 | "authors": [ 1198 | { 1199 | "name": "Sebastian Bergmann", 1200 | "email": "sebastian@phpunit.de", 1201 | "role": "lead" 1202 | } 1203 | ], 1204 | "description": "Provides functionality to handle HHVM/PHP environments", 1205 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1206 | "keywords": [ 1207 | "Xdebug", 1208 | "environment", 1209 | "hhvm" 1210 | ], 1211 | "time": "2014-02-18 16:17:19" 1212 | }, 1213 | { 1214 | "name": "sebastian/exporter", 1215 | "version": "1.0.1", 1216 | "source": { 1217 | "type": "git", 1218 | "url": "https://github.com/sebastianbergmann/exporter.git", 1219 | "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529" 1220 | }, 1221 | "dist": { 1222 | "type": "zip", 1223 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529", 1224 | "reference": "1f9a98e6f5dfe0524cb8c6166f7c82f3e9ae1529", 1225 | "shasum": "" 1226 | }, 1227 | "require": { 1228 | "php": ">=5.3.3" 1229 | }, 1230 | "require-dev": { 1231 | "phpunit/phpunit": "4.0.*@dev" 1232 | }, 1233 | "type": "library", 1234 | "extra": { 1235 | "branch-alias": { 1236 | "dev-master": "1.0.x-dev" 1237 | } 1238 | }, 1239 | "autoload": { 1240 | "classmap": [ 1241 | "src/" 1242 | ] 1243 | }, 1244 | "notification-url": "https://packagist.org/downloads/", 1245 | "license": [ 1246 | "BSD-3-Clause" 1247 | ], 1248 | "authors": [ 1249 | { 1250 | "name": "Sebastian Bergmann", 1251 | "email": "sebastian@phpunit.de", 1252 | "role": "lead" 1253 | }, 1254 | { 1255 | "name": "Jeff Welch", 1256 | "email": "whatthejeff@gmail.com" 1257 | }, 1258 | { 1259 | "name": "Volker Dusch", 1260 | "email": "github@wallbash.com" 1261 | }, 1262 | { 1263 | "name": "Adam Harvey", 1264 | "email": "aharvey@php.net", 1265 | "role": "Lead" 1266 | }, 1267 | { 1268 | "name": "Bernhard Schussek", 1269 | "email": "bschussek@2bepublished.at" 1270 | } 1271 | ], 1272 | "description": "Provides the functionality to export PHP variables for visualization", 1273 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1274 | "keywords": [ 1275 | "export", 1276 | "exporter" 1277 | ], 1278 | "time": "2014-02-16 08:26:31" 1279 | }, 1280 | { 1281 | "name": "sebastian/version", 1282 | "version": "1.0.3", 1283 | "source": { 1284 | "type": "git", 1285 | "url": "https://github.com/sebastianbergmann/version.git", 1286 | "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43" 1287 | }, 1288 | "dist": { 1289 | "type": "zip", 1290 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43", 1291 | "reference": "b6e1f0cf6b9e1ec409a0d3e2f2a5fb0998e36b43", 1292 | "shasum": "" 1293 | }, 1294 | "type": "library", 1295 | "autoload": { 1296 | "classmap": [ 1297 | "src/" 1298 | ] 1299 | }, 1300 | "notification-url": "https://packagist.org/downloads/", 1301 | "license": [ 1302 | "BSD-3-Clause" 1303 | ], 1304 | "authors": [ 1305 | { 1306 | "name": "Sebastian Bergmann", 1307 | "email": "sebastian@phpunit.de", 1308 | "role": "lead" 1309 | } 1310 | ], 1311 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1312 | "homepage": "https://github.com/sebastianbergmann/version", 1313 | "time": "2014-03-07 15:35:33" 1314 | }, 1315 | { 1316 | "name": "symfony/browser-kit", 1317 | "version": "v2.5.2", 1318 | "target-dir": "Symfony/Component/BrowserKit", 1319 | "source": { 1320 | "type": "git", 1321 | "url": "https://github.com/symfony/BrowserKit.git", 1322 | "reference": "b5e807a669333ac9e7def19ef39a6e542786010d" 1323 | }, 1324 | "dist": { 1325 | "type": "zip", 1326 | "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/b5e807a669333ac9e7def19ef39a6e542786010d", 1327 | "reference": "b5e807a669333ac9e7def19ef39a6e542786010d", 1328 | "shasum": "" 1329 | }, 1330 | "require": { 1331 | "php": ">=5.3.3", 1332 | "symfony/dom-crawler": "~2.0" 1333 | }, 1334 | "require-dev": { 1335 | "symfony/css-selector": "~2.0", 1336 | "symfony/process": "~2.0" 1337 | }, 1338 | "suggest": { 1339 | "symfony/process": "" 1340 | }, 1341 | "type": "library", 1342 | "extra": { 1343 | "branch-alias": { 1344 | "dev-master": "2.5-dev" 1345 | } 1346 | }, 1347 | "autoload": { 1348 | "psr-0": { 1349 | "Symfony\\Component\\BrowserKit\\": "" 1350 | } 1351 | }, 1352 | "notification-url": "https://packagist.org/downloads/", 1353 | "license": [ 1354 | "MIT" 1355 | ], 1356 | "authors": [ 1357 | { 1358 | "name": "Fabien Potencier", 1359 | "email": "fabien@symfony.com", 1360 | "homepage": "http://fabien.potencier.org", 1361 | "role": "Lead Developer" 1362 | }, 1363 | { 1364 | "name": "Symfony Community", 1365 | "homepage": "http://symfony.com/contributors" 1366 | } 1367 | ], 1368 | "description": "Symfony BrowserKit Component", 1369 | "homepage": "http://symfony.com", 1370 | "time": "2014-07-09 09:05:48" 1371 | }, 1372 | { 1373 | "name": "symfony/console", 1374 | "version": "v2.5.2", 1375 | "target-dir": "Symfony/Component/Console", 1376 | "source": { 1377 | "type": "git", 1378 | "url": "https://github.com/symfony/Console.git", 1379 | "reference": "386fa63407805959bd2c5fe540294721ad4224c8" 1380 | }, 1381 | "dist": { 1382 | "type": "zip", 1383 | "url": "https://api.github.com/repos/symfony/Console/zipball/386fa63407805959bd2c5fe540294721ad4224c8", 1384 | "reference": "386fa63407805959bd2c5fe540294721ad4224c8", 1385 | "shasum": "" 1386 | }, 1387 | "require": { 1388 | "php": ">=5.3.3" 1389 | }, 1390 | "require-dev": { 1391 | "psr/log": "~1.0", 1392 | "symfony/event-dispatcher": "~2.1" 1393 | }, 1394 | "suggest": { 1395 | "psr/log": "For using the console logger", 1396 | "symfony/event-dispatcher": "" 1397 | }, 1398 | "type": "library", 1399 | "extra": { 1400 | "branch-alias": { 1401 | "dev-master": "2.5-dev" 1402 | } 1403 | }, 1404 | "autoload": { 1405 | "psr-0": { 1406 | "Symfony\\Component\\Console\\": "" 1407 | } 1408 | }, 1409 | "notification-url": "https://packagist.org/downloads/", 1410 | "license": [ 1411 | "MIT" 1412 | ], 1413 | "authors": [ 1414 | { 1415 | "name": "Fabien Potencier", 1416 | "email": "fabien@symfony.com", 1417 | "homepage": "http://fabien.potencier.org", 1418 | "role": "Lead Developer" 1419 | }, 1420 | { 1421 | "name": "Symfony Community", 1422 | "homepage": "http://symfony.com/contributors" 1423 | } 1424 | ], 1425 | "description": "Symfony Console Component", 1426 | "homepage": "http://symfony.com", 1427 | "time": "2014-07-15 14:15:12" 1428 | }, 1429 | { 1430 | "name": "symfony/css-selector", 1431 | "version": "v2.5.2", 1432 | "target-dir": "Symfony/Component/CssSelector", 1433 | "source": { 1434 | "type": "git", 1435 | "url": "https://github.com/symfony/CssSelector.git", 1436 | "reference": "e24b8215bf39a6a2ce0c262bc5b000724077afa9" 1437 | }, 1438 | "dist": { 1439 | "type": "zip", 1440 | "url": "https://api.github.com/repos/symfony/CssSelector/zipball/e24b8215bf39a6a2ce0c262bc5b000724077afa9", 1441 | "reference": "e24b8215bf39a6a2ce0c262bc5b000724077afa9", 1442 | "shasum": "" 1443 | }, 1444 | "require": { 1445 | "php": ">=5.3.3" 1446 | }, 1447 | "type": "library", 1448 | "extra": { 1449 | "branch-alias": { 1450 | "dev-master": "2.5-dev" 1451 | } 1452 | }, 1453 | "autoload": { 1454 | "psr-0": { 1455 | "Symfony\\Component\\CssSelector\\": "" 1456 | } 1457 | }, 1458 | "notification-url": "https://packagist.org/downloads/", 1459 | "license": [ 1460 | "MIT" 1461 | ], 1462 | "authors": [ 1463 | { 1464 | "name": "Fabien Potencier", 1465 | "email": "fabien@symfony.com", 1466 | "homepage": "http://fabien.potencier.org", 1467 | "role": "Lead Developer" 1468 | }, 1469 | { 1470 | "name": "Symfony Community", 1471 | "homepage": "http://symfony.com/contributors" 1472 | }, 1473 | { 1474 | "name": "Jean-François Simon", 1475 | "email": "jeanfrancois.simon@sensiolabs.com" 1476 | } 1477 | ], 1478 | "description": "Symfony CssSelector Component", 1479 | "homepage": "http://symfony.com", 1480 | "time": "2014-07-09 09:05:48" 1481 | }, 1482 | { 1483 | "name": "symfony/dom-crawler", 1484 | "version": "v2.5.2", 1485 | "target-dir": "Symfony/Component/DomCrawler", 1486 | "source": { 1487 | "type": "git", 1488 | "url": "https://github.com/symfony/DomCrawler.git", 1489 | "reference": "b3d748f9d7ae77890d935bb97445c666b83dd59e" 1490 | }, 1491 | "dist": { 1492 | "type": "zip", 1493 | "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/b3d748f9d7ae77890d935bb97445c666b83dd59e", 1494 | "reference": "b3d748f9d7ae77890d935bb97445c666b83dd59e", 1495 | "shasum": "" 1496 | }, 1497 | "require": { 1498 | "php": ">=5.3.3" 1499 | }, 1500 | "require-dev": { 1501 | "symfony/css-selector": "~2.0" 1502 | }, 1503 | "suggest": { 1504 | "symfony/css-selector": "" 1505 | }, 1506 | "type": "library", 1507 | "extra": { 1508 | "branch-alias": { 1509 | "dev-master": "2.5-dev" 1510 | } 1511 | }, 1512 | "autoload": { 1513 | "psr-0": { 1514 | "Symfony\\Component\\DomCrawler\\": "" 1515 | } 1516 | }, 1517 | "notification-url": "https://packagist.org/downloads/", 1518 | "license": [ 1519 | "MIT" 1520 | ], 1521 | "authors": [ 1522 | { 1523 | "name": "Fabien Potencier", 1524 | "email": "fabien@symfony.com", 1525 | "homepage": "http://fabien.potencier.org", 1526 | "role": "Lead Developer" 1527 | }, 1528 | { 1529 | "name": "Symfony Community", 1530 | "homepage": "http://symfony.com/contributors" 1531 | } 1532 | ], 1533 | "description": "Symfony DomCrawler Component", 1534 | "homepage": "http://symfony.com", 1535 | "time": "2014-07-09 09:05:48" 1536 | }, 1537 | { 1538 | "name": "symfony/event-dispatcher", 1539 | "version": "v2.5.2", 1540 | "target-dir": "Symfony/Component/EventDispatcher", 1541 | "source": { 1542 | "type": "git", 1543 | "url": "https://github.com/symfony/EventDispatcher.git", 1544 | "reference": "2215d2ef6fd7ab24d55576a3d924df575c741762" 1545 | }, 1546 | "dist": { 1547 | "type": "zip", 1548 | "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/2215d2ef6fd7ab24d55576a3d924df575c741762", 1549 | "reference": "2215d2ef6fd7ab24d55576a3d924df575c741762", 1550 | "shasum": "" 1551 | }, 1552 | "require": { 1553 | "php": ">=5.3.3" 1554 | }, 1555 | "require-dev": { 1556 | "psr/log": "~1.0", 1557 | "symfony/config": "~2.0", 1558 | "symfony/dependency-injection": "~2.0", 1559 | "symfony/stopwatch": "~2.2" 1560 | }, 1561 | "suggest": { 1562 | "symfony/dependency-injection": "", 1563 | "symfony/http-kernel": "" 1564 | }, 1565 | "type": "library", 1566 | "extra": { 1567 | "branch-alias": { 1568 | "dev-master": "2.5-dev" 1569 | } 1570 | }, 1571 | "autoload": { 1572 | "psr-0": { 1573 | "Symfony\\Component\\EventDispatcher\\": "" 1574 | } 1575 | }, 1576 | "notification-url": "https://packagist.org/downloads/", 1577 | "license": [ 1578 | "MIT" 1579 | ], 1580 | "authors": [ 1581 | { 1582 | "name": "Fabien Potencier", 1583 | "email": "fabien@symfony.com", 1584 | "homepage": "http://fabien.potencier.org", 1585 | "role": "Lead Developer" 1586 | }, 1587 | { 1588 | "name": "Symfony Community", 1589 | "homepage": "http://symfony.com/contributors" 1590 | } 1591 | ], 1592 | "description": "Symfony EventDispatcher Component", 1593 | "homepage": "http://symfony.com", 1594 | "time": "2014-07-09 09:05:48" 1595 | }, 1596 | { 1597 | "name": "symfony/finder", 1598 | "version": "v2.5.2", 1599 | "target-dir": "Symfony/Component/Finder", 1600 | "source": { 1601 | "type": "git", 1602 | "url": "https://github.com/symfony/Finder.git", 1603 | "reference": "576d8f69feec477067e91b6bd0367c113e76a1a0" 1604 | }, 1605 | "dist": { 1606 | "type": "zip", 1607 | "url": "https://api.github.com/repos/symfony/Finder/zipball/576d8f69feec477067e91b6bd0367c113e76a1a0", 1608 | "reference": "576d8f69feec477067e91b6bd0367c113e76a1a0", 1609 | "shasum": "" 1610 | }, 1611 | "require": { 1612 | "php": ">=5.3.3" 1613 | }, 1614 | "type": "library", 1615 | "extra": { 1616 | "branch-alias": { 1617 | "dev-master": "2.5-dev" 1618 | } 1619 | }, 1620 | "autoload": { 1621 | "psr-0": { 1622 | "Symfony\\Component\\Finder\\": "" 1623 | } 1624 | }, 1625 | "notification-url": "https://packagist.org/downloads/", 1626 | "license": [ 1627 | "MIT" 1628 | ], 1629 | "authors": [ 1630 | { 1631 | "name": "Fabien Potencier", 1632 | "email": "fabien@symfony.com", 1633 | "homepage": "http://fabien.potencier.org", 1634 | "role": "Lead Developer" 1635 | }, 1636 | { 1637 | "name": "Symfony Community", 1638 | "homepage": "http://symfony.com/contributors" 1639 | } 1640 | ], 1641 | "description": "Symfony Finder Component", 1642 | "homepage": "http://symfony.com", 1643 | "time": "2014-07-15 14:15:12" 1644 | }, 1645 | { 1646 | "name": "symfony/process", 1647 | "version": "v2.5.2", 1648 | "target-dir": "Symfony/Component/Process", 1649 | "source": { 1650 | "type": "git", 1651 | "url": "https://github.com/symfony/Process.git", 1652 | "reference": "5e53efbf61a7fbf73c79e3e08feea50f64c20bfa" 1653 | }, 1654 | "dist": { 1655 | "type": "zip", 1656 | "url": "https://api.github.com/repos/symfony/Process/zipball/5e53efbf61a7fbf73c79e3e08feea50f64c20bfa", 1657 | "reference": "5e53efbf61a7fbf73c79e3e08feea50f64c20bfa", 1658 | "shasum": "" 1659 | }, 1660 | "require": { 1661 | "php": ">=5.3.3" 1662 | }, 1663 | "type": "library", 1664 | "extra": { 1665 | "branch-alias": { 1666 | "dev-master": "2.5-dev" 1667 | } 1668 | }, 1669 | "autoload": { 1670 | "psr-0": { 1671 | "Symfony\\Component\\Process\\": "" 1672 | } 1673 | }, 1674 | "notification-url": "https://packagist.org/downloads/", 1675 | "license": [ 1676 | "MIT" 1677 | ], 1678 | "authors": [ 1679 | { 1680 | "name": "Fabien Potencier", 1681 | "email": "fabien@symfony.com", 1682 | "homepage": "http://fabien.potencier.org", 1683 | "role": "Lead Developer" 1684 | }, 1685 | { 1686 | "name": "Symfony Community", 1687 | "homepage": "http://symfony.com/contributors" 1688 | } 1689 | ], 1690 | "description": "Symfony Process Component", 1691 | "homepage": "http://symfony.com", 1692 | "time": "2014-07-09 09:05:48" 1693 | } 1694 | ], 1695 | "aliases": [], 1696 | "minimum-stability": "stable", 1697 | "stability-flags": [], 1698 | "platform": { 1699 | "php": ">=5.3" 1700 | }, 1701 | "platform-dev": [] 1702 | } 1703 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | tests 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ../src 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /spec/MageTest/Manager/Attributes/Provider/YamlProviderSpec.php: -------------------------------------------------------------------------------- 1 | readFile(getcwd() . '/src/MageTest/Manager/Fixtures/Address.yml'); 13 | } 14 | function it_should_implement_provider_interface() 15 | { 16 | $this->shouldImplement('MageTest\Manager\Attributes\Provider\ProviderInterface'); 17 | } 18 | 19 | function it_should_read_yaml_file() 20 | { 21 | $this->readAttributes()->shouldBeLike(array( 22 | 'company' => 'Session Digital', 23 | 'street' => 'Brown Street', 24 | 'street1' => 'Brown Street', 25 | 'city' => 'Manchester', 26 | 'postcode' => 'M2 2JG', 27 | 'region' => 'Lancashire', 28 | 'country' => 'United Kingdom', 29 | 'country_id' => 'GB', 30 | 'telephone' => '1234567890', 31 | 'is_default_billing' => '1', 32 | 'is_default_shipping' => '1', 33 | 'save_in_address_book' => '1' 34 | )); 35 | } 36 | 37 | function it_should_get_the_magento_model_from_the_yaml_file() 38 | { 39 | $this->getModelType()->shouldReturn('customer/address'); 40 | } 41 | 42 | function it_should_read_any_dependencies_on_other_fixtures() 43 | { 44 | $this->getFixtureDependencies()->shouldReturn(array('customer/customer')); 45 | } 46 | 47 | function it_should_says_if_there_are_fixture_dependencies() 48 | { 49 | $this->hasFixtureDependencies()->shouldReturn(true); 50 | } 51 | 52 | function it_should_yaml_file_type() 53 | { 54 | $this->getFileType()->shouldReturn('.yml'); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/MageTest/Manager/Attributes/Provider/ProviderInterface.php: -------------------------------------------------------------------------------- 1 | yaml = Yaml::parse($file); 24 | } 25 | 26 | /** 27 | * @return mixed 28 | */ 29 | public function readAttributes() 30 | { 31 | return reset($this->yaml); 32 | } 33 | 34 | /** 35 | * @return string 36 | */ 37 | public function getFileType() 38 | { 39 | return '.yml'; 40 | } 41 | 42 | /** 43 | * @return mixed 44 | */ 45 | public function getModelType() 46 | { 47 | $key = explode(' (', key($this->yaml)); 48 | return $key[0]; 49 | } 50 | 51 | /** 52 | * @return array 53 | */ 54 | public function getFixtureDependencies() 55 | { 56 | $fixtureKey = key($this->yaml); 57 | $beforeBracket = substr($fixtureKey, strrpos($fixtureKey, '(') + 1); 58 | return explode(' ', substr( $beforeBracket, 0, strpos( $beforeBracket, ')'))); 59 | } 60 | 61 | /** 62 | * @return bool 63 | */ 64 | public function hasFixtureDependencies() 65 | { 66 | return (strpos(key($this->yaml), '(') === false) ? false : true; 67 | } 68 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/AbstractBuilder.php: -------------------------------------------------------------------------------- 1 | attributes = array(); 27 | $this->model = Mage::getModel($modelType); 28 | } 29 | 30 | /** 31 | * @param $attributes 32 | */ 33 | public function setAttributes($attributes) 34 | { 35 | $this->attributes = $attributes; 36 | } 37 | 38 | /** 39 | * @return array 40 | */ 41 | public function getWebsiteIds() 42 | { 43 | $ids = array(); 44 | foreach (Mage::getModel('core/website')->getCollection() as $website) { 45 | $ids[] = $website->getId(); 46 | } 47 | return $ids; 48 | } 49 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/Address.php: -------------------------------------------------------------------------------- 1 | attributes['customer_id'] = $customer->getId(); 18 | $this->attributes['firstname'] = $customer->getFirstname(); 19 | $this->attributes['lastname'] = $customer->getLastname(); 20 | return $this; 21 | } 22 | 23 | /** 24 | * @return \Mage_Customer_Model_Address 25 | */ 26 | public function build() 27 | { 28 | $this->model->setCustomerId($this->attributes['customer_id']); 29 | return $this->model->addData($this->attributes); 30 | } 31 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/Admin.php: -------------------------------------------------------------------------------- 1 | model->addData($this->attributes); 17 | $this->model->save(); 18 | 19 | $this->addAdminRole(); 20 | 21 | return $this->model; 22 | } 23 | 24 | private function addAdminRole() 25 | { 26 | $role = \Mage::getModel("admin/role"); 27 | $role->setParentId(1); 28 | $role->setTreeLevel(1); 29 | $role->setRoleType('U'); 30 | $role->setUserId($this->model->getId()); 31 | $role->save(); 32 | } 33 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/BuilderInterface.php: -------------------------------------------------------------------------------- 1 | model->addData($this->attributes); 17 | $this->model->save(); 18 | $this->model->setConfirmation(null); 19 | return $this->model; 20 | } 21 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/General.php: -------------------------------------------------------------------------------- 1 | model->addData($this->attributes); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/Order.php: -------------------------------------------------------------------------------- 1 | model->addProduct($product, new \Varien_Object(array( 21 | 'qty' => $qty 22 | ))); 23 | return $this; 24 | } 25 | 26 | /** 27 | * @param \Mage_Customer_Model_Customer $customer 28 | * @return $this 29 | */ 30 | public function withCustomer($customer) 31 | { 32 | $this->model->assignCustomer($customer); 33 | return $this; 34 | } 35 | 36 | /** 37 | * @param \Mage_Customer_Model_Address $address 38 | * @return $this 39 | */ 40 | public function withAddress($address) 41 | { 42 | $this->model->getBillingAddress()->addData($address->getData()); 43 | $this->model->getShippingAddress()->addData($address->getData()) 44 | ->setCollectShippingRates(true)->collectShippingRates() 45 | ->setShippingMethod($this->attributes['shipping_method']) 46 | ->setPaymentMethod($this->attributes['payment_method']); 47 | 48 | return $this; 49 | } 50 | 51 | /** 52 | * Build fixture model 53 | */ 54 | public function build() 55 | { 56 | $this->model->setStoreId($this->model->getStoreId()); 57 | 58 | $this->model->getPayment()->importData(array('method' => $this->attributes['payment_method'])); 59 | 60 | $this->model->collectTotals()->save(); 61 | 62 | \Mage::app()->getStore()->setConfig(\Mage_Sales_Model_Order::XML_PATH_EMAIL_ENABLED, '0'); 63 | 64 | $service = Mage::getModel('sales/service_quote', $this->model); 65 | $service->submitAll(); 66 | return $service->getOrder(); 67 | } 68 | } -------------------------------------------------------------------------------- /src/MageTest/Manager/Builders/Product.php: -------------------------------------------------------------------------------- 1 | model->setStockItem(\Mage::getModel('cataloginventory/stock_item')); 17 | return $this->model->addData($this->attributes); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/MageTest/Manager/FixtureManager.php: -------------------------------------------------------------------------------- 1 | fixtures = array(); 33 | $this->builders = array(); 34 | $this->attributesProvider = $attributesProvider; 35 | } 36 | 37 | /** 38 | * @param $fixtureFile 39 | * @return mixed 40 | */ 41 | public function loadFixture($fixtureType, $userFixtureFile = null) 42 | { 43 | $attributesProvider = clone $this->attributesProvider; 44 | 45 | if(!is_null($userFixtureFile)) 46 | { 47 | $this->fixtureFileExists($userFixtureFile); 48 | $attributesProvider->readFile($userFixtureFile); 49 | } else { 50 | $fixtureFile = $this->getDefaultFixtureTemplate($fixtureType); 51 | $this->fixtureFileExists($fixtureFile); 52 | $attributesProvider->readFile($fixtureFile); 53 | } 54 | 55 | $builder = $this->getBuilder($attributesProvider->getModelType()); 56 | $builder->setAttributes($attributesProvider->readAttributes()); 57 | 58 | if($attributesProvider->hasFixtureDependencies()) 59 | { 60 | foreach($attributesProvider->getFixtureDependencies() as $dependency) 61 | { 62 | $withDependency = 'with' . $this->getFixtureTemplate($dependency); 63 | $builder->$withDependency($this->loadFixture($dependency)); 64 | } 65 | } 66 | 67 | return $this->create($attributesProvider->getModelType(), $builder); 68 | } 69 | 70 | /** 71 | * @param $name 72 | * @param BuilderInterface $builder 73 | * @return mixed 74 | * @throws \InvalidArgumentException 75 | */ 76 | public function create($name, BuilderInterface $builder) 77 | { 78 | if($this->hasFixture($name)) 79 | { 80 | throw new \InvalidArgumentException("Fixture $name has already been set. Please use unique names."); 81 | } 82 | 83 | $model = $builder->build(); 84 | 85 | \Mage::app()->setCurrentStore(\Mage_Core_Model_App::ADMIN_STORE_ID); 86 | $model->save(); 87 | \Mage::app()->setCurrentStore(\Mage_Core_Model_App::DISTRO_STORE_ID); 88 | 89 | return $this->fixtures[$name] = $model; 90 | } 91 | 92 | /** 93 | * @param $name 94 | * @return mixed 95 | * @throws \InvalidArgumentException 96 | */ 97 | public function getFixture($name) 98 | { 99 | if(!$this->hasFixture($name)) 100 | { 101 | throw new \InvalidArgumentException("Could not find a fixture: $name"); 102 | } 103 | return $this->fixtures[$name]; 104 | } 105 | 106 | /** 107 | * Deletes all the magento fixtures 108 | */ 109 | public function clear() 110 | { 111 | foreach ($this->fixtures as $fixture) { 112 | \Mage::app()->setCurrentStore(\Mage_Core_Model_App::ADMIN_STORE_ID); 113 | $fixture->delete(); 114 | \Mage::app()->setCurrentStore(\Mage_Core_Model_App::DISTRO_STORE_ID); 115 | } 116 | $this->fixtures = array(); 117 | } 118 | 119 | /** 120 | * @param $name 121 | * @return bool 122 | */ 123 | private function hasFixture($name) { 124 | return array_key_exists($name, $this->fixtures); 125 | } 126 | 127 | /** 128 | * @param $name 129 | * @return bool 130 | */ 131 | private function hasBuilder($name) { 132 | return array_key_exists($name, $this->builders); 133 | } 134 | 135 | /** 136 | * @param $modelType 137 | * @return Builders\Address|Builders\Customer|Builders\Order|Builders\Product 138 | */ 139 | private function getBuilder($modelType) 140 | { 141 | if($this->hasBuilder($modelType)) 142 | { 143 | return $this->builders[$modelType]; 144 | } 145 | 146 | switch($modelType) 147 | { 148 | case 'admin/user': return $this->builders[$modelType] = new Builders\Admin($modelType); 149 | case 'customer/address': return $this->builders[$modelType] = new Builders\Address($modelType); 150 | case 'customer/customer': return $this->builders[$modelType] = new Builders\Customer($modelType); 151 | case 'catalog/product': return $this->builders[$modelType] = new Builders\Product($modelType); 152 | case 'sales/quote': return $this->builders[$modelType] = new Builders\Order($modelType); 153 | default : return $this->builders[$modelType] = new Builders\General($modelType); 154 | } 155 | } 156 | 157 | /** 158 | * @param $fixtureFile 159 | * @throws \InvalidArgumentException 160 | */ 161 | private function fixtureFileExists($fixtureFile) 162 | { 163 | if (!file_exists($fixtureFile)) { 164 | throw new \InvalidArgumentException("The fixture file: $fixtureFile does not exist. Please check path."); 165 | } 166 | } 167 | 168 | /** 169 | * @param $dependency 170 | * @return string 171 | */ 172 | private function getFixtureTemplate($dependency) 173 | { 174 | $fixtureTemplate = explode('/', $dependency); 175 | return ucfirst($fixtureTemplate[1]); 176 | } 177 | 178 | /** 179 | * @param $fixtureType 180 | * @return string 181 | */ 182 | private function getDefaultFixtureTemplate($fixtureType) 183 | { 184 | $filePath = __DIR__ . '/Fixtures/'; 185 | switch($fixtureType) 186 | { 187 | case 'admin/user': return $filePath . 'Admin.yml'; 188 | case 'customer/address': return $filePath . 'Address.yml'; 189 | case 'customer/customer': return $filePath . 'Customer.yml'; 190 | case 'catalog/product': return $filePath . 'Product.yml'; 191 | case 'sales/quote': return $filePath . 'Order.yml'; 192 | } 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /src/MageTest/Manager/Fixtures/Address.yml: -------------------------------------------------------------------------------- 1 | customer/address (customer/customer): 2 | company: Session Digital 3 | street: Brown Street 4 | street1: Brown Street 5 | city: Manchester 6 | postcode: M2 2JG 7 | region: Lancashire 8 | country: United Kingdom 9 | country_id: GB 10 | telephone: 1234567890 11 | is_default_billing: 1 12 | is_default_shipping: 1 13 | save_in_address_book: 1 -------------------------------------------------------------------------------- /src/MageTest/Manager/Fixtures/Admin.yml: -------------------------------------------------------------------------------- 1 | admin/user: 2 | username: testadmin 3 | firstname: admin 4 | lastname: admin 5 | email: testadmin@example.com 6 | password: testadmin123 -------------------------------------------------------------------------------- /src/MageTest/Manager/Fixtures/Customer.yml: -------------------------------------------------------------------------------- 1 | customer/customer: 2 | firstname: test 3 | lastname: test 4 | email: customer@example.com 5 | password: 123123pass 6 | website_id: 1 7 | store: 1 8 | status: 1 -------------------------------------------------------------------------------- /src/MageTest/Manager/Fixtures/Order.yml: -------------------------------------------------------------------------------- 1 | sales/quote (catalog/product customer/address): 2 | shipping_method: flatrate_flatrate 3 | payment_method: checkmo -------------------------------------------------------------------------------- /src/MageTest/Manager/Fixtures/Product.yml: -------------------------------------------------------------------------------- 1 | catalog/product: 2 | sku: testsku123 3 | attribute_set_id: 9 4 | name: product name 5 | weight: 2 6 | price: 100 7 | description: Product description 8 | short_description: Product short description 9 | tax_class_id: 1 10 | type_id: simple 11 | visibility: 4 12 | status: 1 13 | stock_data: { is_in_stock: 1, qty: 99999 } 14 | website_ids: [1] -------------------------------------------------------------------------------- /tests/MageTest/Manager/AddressTest.php: -------------------------------------------------------------------------------- 1 | addressFixture = $this->manager->loadFixture('customer/address'); 12 | } 13 | 14 | public function testAssignAddressToCustomer() 15 | { 16 | $customer = $this->manager->getFixture('customer/customer'); 17 | 18 | $this->customerLogin($customer->getEmail(), $customer->getPassword()); 19 | 20 | $this->assertSession()->pageTextContains($this->addressFixture->getPostcode()); 21 | } 22 | 23 | public function testDeleteAddressOfCustomer() 24 | { 25 | $customer = $this->manager->getFixture('customer/customer'); 26 | 27 | $this->customerLogin($customer->getEmail(), $customer->getPassword()); 28 | 29 | $this->manager->clear(); 30 | 31 | $this->assertSession()->pageTextContains($this->addressFixture->getPostcode()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/MageTest/Manager/AdminTest.php: -------------------------------------------------------------------------------- 1 | so we can send you a copy immediately. 16 | * 17 | * @copyright Copyright (c) 2014 MageTest team and contributors. 18 | */ 19 | namespace MageTest\Manager; 20 | 21 | class AdminTest extends WebTestCase 22 | { 23 | protected function setUp() 24 | { 25 | parent::setUp(); 26 | } 27 | 28 | public function testCreateAdmin() 29 | { 30 | $adminFixture = $this->manager->loadFixture('admin/user'); 31 | 32 | /*Password from src/MageTest/Manager/Fixtures/Admin.yml due to hashing*/ 33 | $this->adminLogin($adminFixture->getUsername(), 'testadmin123'); 34 | 35 | $this->assertSession()->elementExists('css', 'body.adminhtml-dashboard-index'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /tests/MageTest/Manager/Assets/370x370.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MageTest/Manager/077c845fb36745082f7aac68a295d2c71a296336/tests/MageTest/Manager/Assets/370x370.jpg -------------------------------------------------------------------------------- /tests/MageTest/Manager/CategoryTest.php: -------------------------------------------------------------------------------- 1 | so we can send you a copy immediately. 16 | * 17 | * @copyright Copyright (c) 2014 MageTest team and contributors. 18 | */ 19 | namespace MageTest\Manager; 20 | 21 | class CategoryTest extends WebTestCase 22 | { 23 | protected function setUp() 24 | { 25 | parent::setUp(); 26 | } 27 | 28 | public function testCreateCategoryViaId() 29 | { 30 | $categoryFixture = $this->manager->loadFixture('catalog/category', __DIR__ . '/Fixtures/Category.yml'); 31 | 32 | $this->getSession()->visit(getenv('BASE_URL') . '/catalog/category/view/id/' . $categoryFixture->getId()); 33 | 34 | $this->assertSession()->statusCodeEquals(200); 35 | } 36 | 37 | public function testCreateCategoryViaUrlKey() 38 | { 39 | $categoryFixture = $this->manager->loadFixture('catalog/category', __DIR__ . '/Fixtures/Category.yml'); 40 | 41 | $this->getSession()->visit(getenv('BASE_URL') . '/' . $categoryFixture->getUrlKey() . '.html'); 42 | 43 | $this->assertSession()->statusCodeEquals(200); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /tests/MageTest/Manager/CustomerTest.php: -------------------------------------------------------------------------------- 1 | so we can send you a copy immediately. 16 | * 17 | * @copyright Copyright (c) 2014 MageTest team and contributors. 18 | */ 19 | namespace MageTest\Manager; 20 | 21 | class CustomerTest extends WebTestCase 22 | { 23 | private $customerFixture; 24 | 25 | protected function setUp() 26 | { 27 | parent::setUp(); 28 | } 29 | 30 | public function testCreatesCustomerDefault() 31 | { 32 | $this->customerFixture = $this->manager->loadFixture('customer/customer'); 33 | 34 | $this->customerLogin($this->customerFixture->getEmail(), $this->customerFixture->getPassword()); 35 | 36 | $this->assertSession()->addressEquals('/customer/account/'); 37 | } 38 | 39 | public function testDeletesCustomerDefault() 40 | { 41 | $this->customerFixture = $this->manager->loadFixture('customer/customer'); 42 | 43 | $this->manager->clear(); 44 | 45 | $this->customerLogin($this->customerFixture->getEmail(), $this->customerFixture->getPassword()); 46 | 47 | $this->assertSession()->addressEquals('/customer/account/login/'); 48 | } 49 | 50 | public function testCreatesUserDefinedCustomer() 51 | { 52 | $this->customerFixture = $this->manager->loadFixture('customer/customer', __DIR__ . '/Fixtures/Customer.yml'); 53 | 54 | $this->customerLogin($this->customerFixture->getEmail(), $this->customerFixture->getPassword()); 55 | 56 | $this->assertSession()->addressEquals('/customer/account/'); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /tests/MageTest/Manager/Fixtures/Category.yml: -------------------------------------------------------------------------------- 1 | #creates root catalog (id=3) therefore path=1/3 2 | catalog/category: 3 | name: Test Category 4 | url_key: test-category 5 | path: 1/3 6 | is_active: 1 7 | is_anchor: 1 8 | include_in_menu: 1 9 | display_mode: PRODUCTS -------------------------------------------------------------------------------- /tests/MageTest/Manager/Fixtures/Customer.yml: -------------------------------------------------------------------------------- 1 | customer/customer: 2 | firstname: test-user-defined 3 | lastname: test-user-defined 4 | email: customer@example.com 5 | password: 123123pass 6 | website_id: 1 7 | store: 1 8 | status: 1 -------------------------------------------------------------------------------- /tests/MageTest/Manager/OrderTest.php: -------------------------------------------------------------------------------- 1 | orderFixture = $this->manager->loadFixture('sales/quote'); 12 | } 13 | 14 | public function testCreateOrderWithOneProduct() 15 | { 16 | $this->adminLogin('admin', 'adminadmin123123'); 17 | 18 | $session = $this->getSession(); 19 | $session->visit(getenv('BASE_URL') . '/admin/sales_order/index'); 20 | $this->assertSession()->pageTextContains($this->orderFixture->getIncrementId()); 21 | } 22 | 23 | public function testDeleteOrderWithOneProduct() 24 | { 25 | $this->manager->clear(); 26 | 27 | $this->adminLogin('admin', 'adminadmin123123'); 28 | 29 | $session = $this->getSession(); 30 | $session->visit(getenv('BASE_URL') . '/admin/sales_order/index'); 31 | $this->assertSession()->pageTextNotContains($this->orderFixture->getIncrementId()); 32 | } 33 | } -------------------------------------------------------------------------------- /tests/MageTest/Manager/ProductTest.php: -------------------------------------------------------------------------------- 1 | productFixture = $this->manager->loadFixture('catalog/product'); 12 | } 13 | 14 | public function testCreateSimpleProduct() 15 | { 16 | $session = $this->getSession(); 17 | $session->visit(getenv('BASE_URL') . '/catalog/product/view/id/' . $this->productFixture->getId()); 18 | $this->assertSession()->statusCodeEquals(200); 19 | } 20 | 21 | public function testDeleteSimpleProduct() 22 | { 23 | $this->manager->clear(); 24 | 25 | $session = $this->getSession(); 26 | $session->visit(getenv('BASE_URL') . '/catalog/product/view/id/' . $this->productFixture->getId()); 27 | $this->assertSession()->statusCodeEquals(404); 28 | } 29 | 30 | public function testCreateSimpleProductWithImage() 31 | { 32 | $imageURL = getcwd() . '/tests/MageTest/Manager/Assets/370x370.jpg'; 33 | 34 | $this->productFixture->setMediaGallery (array('images'=>array (), 'values'=>array ())); 35 | $this->productFixture->addImageToMediaGallery($imageURL, array('image','thumbnail','small_image'), false, false); 36 | $this->productFixture->save(); 37 | 38 | $session = $this->getSession(); 39 | $session->visit(getenv('BASE_URL') . '/catalog/product/view/id/' . $this->productFixture->getId()); 40 | $this->assertSession()->elementExists('css', '#image'); 41 | } 42 | } -------------------------------------------------------------------------------- /tests/MageTest/Manager/WebTestCase.php: -------------------------------------------------------------------------------- 1 | mink = new Mink(array( 28 | 'goutte' => new Session(new GoutteDriver()) 29 | )); 30 | $this->mink->setDefaultSessionName('goutte'); 31 | $this->manager = new FixtureManager(new YamlProvider()); 32 | } 33 | 34 | protected function tearDown() 35 | { 36 | $this->manager->clear(); 37 | Mage::getSingleton("core/session")->unsetAll(); 38 | Mage::unregister('controller'); 39 | } 40 | 41 | /** 42 | * @param null|string $name 43 | * 44 | * @return Session 45 | */ 46 | protected function getSession($name = null) 47 | { 48 | return $this->mink->getSession($name); 49 | } 50 | 51 | /** 52 | * @param null|string $name 53 | * 54 | * @return WebAssert 55 | */ 56 | protected function assertSession($name = null) 57 | { 58 | return $this->mink->assertSession($name); 59 | } 60 | 61 | /** 62 | * @param $username 63 | * @param $pass 64 | * 65 | */ 66 | protected function adminLogin($username, $pass) 67 | { 68 | $session = $this->getSession(); 69 | $session->visit(getenv('BASE_URL') . '/admin'); 70 | $session->getPage()->fillField('username', $username); 71 | $session->getPage()->fillField('login', $pass); 72 | $session->getPage()->pressButton('Login'); 73 | } 74 | 75 | /** 76 | * @param $email 77 | * @param $pass 78 | */ 79 | protected function customerLogin($email, $pass) 80 | { 81 | $session = $this->getSession(); 82 | $session->visit(getenv('BASE_URL') . '/customer/account/login'); 83 | $session->getPage()->fillField('Email Address', $email); 84 | $session->getPage()->fillField('Password', $pass); 85 | $session->getPage()->pressButton('Login'); 86 | } 87 | } --------------------------------------------------------------------------------