Browse Source

Merge PR #1393 branch 'yii2-basic-codeception' of https://github.com/Ragazzo/yii2 into Ragazzo-yii2-basic-codeception

* 'yii2-basic-codeception' of https://github.com/Ragazzo/yii2:
  small typo fix
  added readme, changelog, license and composer files.
  added new extension yii2-codeception, modified composer settings
  modified tests according yii2-codeception extension
  added testcase for unit tests, bootstrap files improved, tests inherited from base testcase
  configs fixed and improved
  tests modified, bootstrap added
  colors added
  new entry points for application
  codeception configs, web config modifed for db-settings

Conflicts:
	composer.json
tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
57277f7415
  1. 1
      apps/basic/codeception.yml
  2. 1
      apps/basic/composer.json
  3. 9
      apps/basic/config/codeception/acceptance.php
  4. 9
      apps/basic/config/codeception/functional.php
  5. 13
      apps/basic/config/codeception/unit.php
  6. 2
      apps/basic/config/web-test.php
  7. 11
      apps/basic/config/web.php
  8. 3
      apps/basic/tests/_bootstrap.php
  9. 10
      apps/basic/tests/_pages/AboutPage.php
  10. 63
      apps/basic/tests/_pages/ContactPage.php
  11. 40
      apps/basic/tests/_pages/LoginPage.php
  12. 7
      apps/basic/tests/acceptance.suite.dist.yml
  13. 4
      apps/basic/tests/acceptance/AboutCept.php
  14. 38
      apps/basic/tests/acceptance/ContactCept.php
  15. 33
      apps/basic/tests/acceptance/LoginCept.php
  16. 2109
      apps/basic/tests/acceptance/WebGuy.php
  17. 9
      apps/basic/tests/acceptance/_bootstrap.php
  18. 4
      apps/basic/tests/functional.suite.dist.yml
  19. 5
      apps/basic/tests/functional/AboutCept.php
  20. 37
      apps/basic/tests/functional/ContactCept.php
  21. 32
      apps/basic/tests/functional/LoginCept.php
  22. 19
      apps/basic/tests/functional/TestGuy.php
  23. 10
      apps/basic/tests/functional/_bootstrap.php
  24. 56
      apps/basic/tests/functional/_pages/ContactPage.php
  25. 33
      apps/basic/tests/functional/_pages/LoginPage.php
  26. 17
      apps/basic/tests/unit/CodeGuy.php
  27. 8
      apps/basic/tests/unit/_bootstrap.php
  28. 8
      apps/basic/tests/unit/models/ContactFormTest.php
  29. 8
      apps/basic/tests/unit/models/LoginFormTest.php
  30. 25
      apps/basic/tests/unit/models/UserTest.php
  31. 10
      apps/basic/tests/yii_bootstrap.php
  32. 13
      apps/basic/web/index-debug.php
  33. 16
      apps/basic/web/index-test-accept.php
  34. 16
      apps/basic/web/index-test-func.php
  35. 24
      apps/basic/web/index-test.php
  36. 4
      apps/basic/web/index.php
  37. 2
      composer.json
  38. 45
      extensions/codeception/BasePage.php
  39. 12
      extensions/codeception/CHANGELOG.md
  40. 32
      extensions/codeception/LICENSE.md
  41. 128
      extensions/codeception/README.md
  42. 54
      extensions/codeception/TestCase.php
  43. 26
      extensions/codeception/composer.json

1
apps/basic/codeception.yml

@ -8,6 +8,7 @@ settings:
suite_class: \PHPUnit_Framework_TestSuite suite_class: \PHPUnit_Framework_TestSuite
memory_limit: 1024M memory_limit: 1024M
log: true log: true
colors: true
modules: modules:
config: config:
Db: Db:

1
apps/basic/composer.json

@ -18,6 +18,7 @@
"yiisoft/yii2": "*", "yiisoft/yii2": "*",
"yiisoft/yii2-swiftmailer": "*", "yiisoft/yii2-swiftmailer": "*",
"yiisoft/yii2-bootstrap": "*", "yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*", "yiisoft/yii2-debug": "*",
"yiisoft/yii2-gii": "*" "yiisoft/yii2-gii": "*"
}, },

9
apps/basic/config/codeception/acceptance.php

@ -0,0 +1,9 @@
<?php
return [
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2basic_acceptance',
],
],
];

9
apps/basic/config/codeception/functional.php

@ -0,0 +1,9 @@
<?php
return [
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2basic_functional',
],
],
];

13
apps/basic/config/codeception/unit.php

@ -0,0 +1,13 @@
<?php
return [
'components' => [
'fixture' => [
'class' => 'yii\test\DbFixtureManager',
'basePath' => '@app/tests/unit/fixtures',
],
'db' => [
'dsn' => 'mysql:host=localhost;dbname=yii2basic_unit',
],
],
];

2
apps/basic/config/web-test.php

@ -1,5 +1,7 @@
<?php <?php
Yii::setAlias('tests', realpath(__DIR__ . '/../tests'));
$config = require(__DIR__ . '/web.php'); $config = require(__DIR__ . '/web.php');
// ... customize $config for the "test" environment here... // ... customize $config for the "test" environment here...

11
apps/basic/config/web.php

@ -1,5 +1,9 @@
<?php <?php
Yii::setAlias('tests', realpath(__DIR__ . '/../tests'));
$params = require(__DIR__ . '/params.php'); $params = require(__DIR__ . '/params.php');
$config = [ $config = [
'id' => 'basic', 'id' => 'basic',
'basePath' => dirname(__DIR__), 'basePath' => dirname(__DIR__),
@ -26,6 +30,13 @@ $config = [
], ],
], ],
], ],
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
], ],
'params' => $params, 'params' => $params,
]; ];

3
apps/basic/tests/_bootstrap.php

@ -0,0 +1,3 @@
<?php
require_once(__DIR__.'/yii_bootstrap.php');

10
apps/basic/tests/_pages/AboutPage.php

@ -0,0 +1,10 @@
<?php
namespace tests\_pages;
class AboutPage extends \yii\codeception\BasePage
{
public static $URL = '?r=site/about';
}

63
apps/basic/tests/_pages/ContactPage.php

@ -0,0 +1,63 @@
<?php
namespace tests\_pages;
class ContactPage extends \yii\codeception\BasePage
{
public static $URL = '?r=site/contact';
/**
* contact form name text field locator
* @var string
*/
public $name = 'input[name="ContactForm[name]"]';
/**
* contact form email text field locator
* @var string
*/
public $email = 'input[name="ContactForm[email]"]';
/**
* contact form subject text field locator
* @var string
*/
public $subject = 'input[name="ContactForm[subject]"]';
/**
* contact form body textarea locator
* @var string
*/
public $body = 'textarea[name="ContactForm[body]"]';
/**
* contact form verification code text field locator
* @var string
*/
public $verifyCode = 'input[name="ContactForm[verifyCode]"]';
/**
* contact form submit button
* @var string
*/
public $button = 'button[type=submit]';
/**
*
* @param array $contactData
*/
public function submit(array $contactData)
{
if (!empty($contactData))
{
$this->guy->fillField($this->name,$contactData['name']);
$this->guy->fillField($this->email,$contactData['email']);
$this->guy->fillField($this->subject,$contactData['subject']);
$this->guy->fillField($this->body,$contactData['body']);
$this->guy->fillField($this->verifyCode,$contactData['verifyCode']);
}
$this->guy->click($this->button);
}
}

40
apps/basic/tests/_pages/LoginPage.php

@ -0,0 +1,40 @@
<?php
namespace tests\_pages;
class LoginPage extends \yii\codeception\BasePage
{
public static $URL = '?r=site/login';
/**
* login form username text field locator
* @var string
*/
public $username = 'input[name="LoginForm[username]"]';
/**
* login form password text field locator
* @var string
*/
public $password = 'input[name="LoginForm[password]"]';
/**
* login form submit button locator
* @var string
*/
public $button = 'button[type=submit]';
/**
*
* @param string $username
* @param string $password
*/
public function login($username, $password)
{
$this->guy->fillField($this->username,$username);
$this->guy->fillField($this->password,$password);
$this->guy->click($this->button);
}
}

7
apps/basic/tests/acceptance.suite.dist.yml

@ -11,8 +11,9 @@
class_name: WebGuy class_name: WebGuy
modules: modules:
enabled: enabled:
- PhpBrowser
- WebHelper - WebHelper
- WebDriver
config: config:
PhpBrowser: WebDriver:
url: 'http://localhost/index-test.php' url: 'http://localhost/basic/web/index-test-accept.php'
browser: firefox

4
apps/basic/tests/acceptance/AboutCept.php

@ -1,5 +1,7 @@
<?php <?php
use tests\_pages\AboutPage;
$I = new WebGuy($scenario); $I = new WebGuy($scenario);
$I->wantTo('ensure that about works'); $I->wantTo('ensure that about works');
$I->amOnPage('?r=site/about'); $I->amOnPage(AboutPage::$URL);
$I->see('About', 'h1'); $I->see('About', 'h1');

38
apps/basic/tests/acceptance/ContactCept.php

@ -1,10 +1,16 @@
<?php <?php
use tests\_pages\ContactPage;
$I = new WebGuy($scenario); $I = new WebGuy($scenario);
$I->wantTo('ensure that contact works'); $I->wantTo('ensure that contact works');
$I->amOnPage('?r=site/contact'); $contactPage = ContactPage::of($I);
$I->amOnPage(ContactPage::$URL);
$I->see('Contact', 'h1'); $I->see('Contact', 'h1');
$I->submitForm('#contact-form', []); $I->amGoingTo('submit contact form with no data');
$contactPage->submit([]);
$I->expectTo('see validations errors');
$I->see('Contact', 'h1'); $I->see('Contact', 'h1');
$I->see('Name cannot be blank'); $I->see('Name cannot be blank');
$I->see('Email cannot be blank'); $I->see('Email cannot be blank');
@ -12,25 +18,29 @@ $I->see('Subject cannot be blank');
$I->see('Body cannot be blank'); $I->see('Body cannot be blank');
$I->see('The verification code is incorrect'); $I->see('The verification code is incorrect');
$I->submitForm('#contact-form', [ $I->amGoingTo('submit contact form with not correct email');
'ContactForm[name]' => 'tester', $contactPage->submit([
'ContactForm[email]' => 'tester.email', 'name' => 'tester',
'ContactForm[subject]' => 'test subject', 'email' => 'tester.email',
'ContactForm[body]' => 'test content', 'subject' => 'test subject',
'ContactForm[verifyCode]' => 'testme', 'body' => 'test content',
'verifyCode' => 'testme',
]); ]);
$I->expectTo('see that email adress is wrong');
$I->dontSee('Name cannot be blank', '.help-inline'); $I->dontSee('Name cannot be blank', '.help-inline');
$I->see('Email is not a valid email address.'); $I->see('Email is not a valid email address.');
$I->dontSee('Subject cannot be blank', '.help-inline'); $I->dontSee('Subject cannot be blank', '.help-inline');
$I->dontSee('Body cannot be blank', '.help-inline'); $I->dontSee('Body cannot be blank', '.help-inline');
$I->dontSee('The verification code is incorrect', '.help-inline'); $I->dontSee('The verification code is incorrect', '.help-inline');
$I->submitForm('#contact-form', [ $I->amGoingTo('submit contact form with correct data');
'ContactForm[name]' => 'tester', $contactPage->submit([
'ContactForm[email]' => 'tester@example.com', 'name' => 'tester',
'ContactForm[subject]' => 'test subject', 'email' => 'tester@example.com',
'ContactForm[body]' => 'test content', 'subject' => 'test subject',
'ContactForm[verifyCode]' => 'testme', 'body' => 'test content',
'verifyCode' => 'testme',
]); ]);
$I->wait(3);
$I->dontSeeElement('#contact-form'); $I->dontSeeElement('#contact-form');
$I->see('Thank you for contacting us. We will respond to you as soon as possible.'); $I->see('Thank you for contacting us. We will respond to you as soon as possible.');

33
apps/basic/tests/acceptance/LoginCept.php

@ -1,23 +1,26 @@
<?php <?php
use tests\_pages\LoginPage;
$I = new WebGuy($scenario); $I = new WebGuy($scenario);
$I->wantTo('ensure that login works'); $I->wantTo('ensure that login works');
$I->amOnPage('?r=site/login'); $loginPage = LoginPage::of($I);
$I->amOnPage(LoginPage::$URL);
$I->see('Login', 'h1'); $I->see('Login', 'h1');
$I->submitForm('#login-form', []); $I->amGoingTo('try to login with empty credentials');
$I->dontSee('Logout (admin)'); $loginPage->login('', '');
$I->see('Username cannot be blank'); $I->expectTo('see validations errors');
$I->see('Password cannot be blank'); $I->see('Username cannot be blank.');
$I->see('Password cannot be blank.');
$I->submitForm('#login-form', [ $I->amGoingTo('try to login with wrong credentials');
'LoginForm[username]' => 'admin', $loginPage->login('admin', 'wrong');
'LoginForm[password]' => 'wrong', $I->expectTo('see validations errors');
]); $I->see('Incorrect username or password.');
$I->dontSee('Logout (admin)');
$I->see('Incorrect username or password');
$I->submitForm('#login-form', [ $I->amGoingTo('try to login with correct credentials');
'LoginForm[username]' => 'admin', $loginPage->login('admin', 'admin');
'LoginForm[password]' => 'admin', $I->wait(3);
]); $I->expectTo('see user info');
$I->see('Logout (admin)'); $I->see('Logout (admin)');

2109
apps/basic/tests/acceptance/WebGuy.php

File diff suppressed because it is too large Load Diff

9
apps/basic/tests/acceptance/_bootstrap.php

@ -1,2 +1,11 @@
<?php <?php
// Here you can initialize variables that will for your tests // Here you can initialize variables that will for your tests
$config = require(__DIR__.'/../yii_bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
$config,
require(__DIR__ . '/../../config/codeception/acceptance.php')
);
$application = new yii\web\Application($config);

4
apps/basic/tests/functional.suite.dist.yml

@ -5,11 +5,11 @@
# (tip: better to use with frameworks). # (tip: better to use with frameworks).
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. # RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
#basic/web/index-test-func.php
class_name: TestGuy class_name: TestGuy
modules: modules:
enabled: [Filesystem, TestHelper, Yii2] enabled: [Filesystem, TestHelper, Yii2]
config: config:
Yii2: Yii2:
entryScript: 'web/index-test.php' entryScript: 'web/index-test-func.php'
url: 'http://localhost/' url: 'http://localhost/'

5
apps/basic/tests/functional/AboutCept.php

@ -1,5 +1,8 @@
<?php <?php
use tests\_pages\AboutPage;
$I = new TestGuy($scenario); $I = new TestGuy($scenario);
$I->wantTo('ensure that about works'); $I->wantTo('ensure that about works');
$I->amOnPage('?r=site/about'); $I->amOnPage(AboutPage::$URL);
$I->see('About', 'h1'); $I->see('About', 'h1');

37
apps/basic/tests/functional/ContactCept.php

@ -1,10 +1,16 @@
<?php <?php
use tests\functional\_pages\ContactPage;
$I = new TestGuy($scenario); $I = new TestGuy($scenario);
$I->wantTo('ensure that contact works'); $I->wantTo('ensure that contact works');
$I->amOnPage('?r=site/contact'); $contactPage = ContactPage::of($I);
$I->amOnPage(ContactPage::$URL);
$I->see('Contact', 'h1'); $I->see('Contact', 'h1');
$I->submitForm('#contact-form', []); $I->amGoingTo('submit contact form with no data');
$contactPage->submit([]);
$I->expectTo('see validations errors');
$I->see('Contact', 'h1'); $I->see('Contact', 'h1');
$I->see('Name cannot be blank'); $I->see('Name cannot be blank');
$I->see('Email cannot be blank'); $I->see('Email cannot be blank');
@ -12,25 +18,28 @@ $I->see('Subject cannot be blank');
$I->see('Body cannot be blank'); $I->see('Body cannot be blank');
$I->see('The verification code is incorrect'); $I->see('The verification code is incorrect');
$I->submitForm('#contact-form', [ $I->amGoingTo('submit contact form with not correct email');
'ContactForm[name]' => 'tester', $contactPage->submit([
'ContactForm[email]' => 'tester.email', 'name' => 'tester',
'ContactForm[subject]' => 'test subject', 'email' => 'tester.email',
'ContactForm[body]' => 'test content', 'subject' => 'test subject',
'ContactForm[verifyCode]' => 'testme', 'body' => 'test content',
'verifyCode' => 'testme',
]); ]);
$I->expectTo('see that email adress is wrong');
$I->dontSee('Name cannot be blank', '.help-inline'); $I->dontSee('Name cannot be blank', '.help-inline');
$I->see('Email is not a valid email address.'); $I->see('Email is not a valid email address.');
$I->dontSee('Subject cannot be blank', '.help-inline'); $I->dontSee('Subject cannot be blank', '.help-inline');
$I->dontSee('Body cannot be blank', '.help-inline'); $I->dontSee('Body cannot be blank', '.help-inline');
$I->dontSee('The verification code is incorrect', '.help-inline'); $I->dontSee('The verification code is incorrect', '.help-inline');
$I->submitForm('#contact-form', [ $I->amGoingTo('submit contact form with correct data');
'ContactForm[name]' => 'tester', $contactPage->submit([
'ContactForm[email]' => 'tester@example.com', 'name' => 'tester',
'ContactForm[subject]' => 'test subject', 'email' => 'tester@example.com',
'ContactForm[body]' => 'test content', 'subject' => 'test subject',
'ContactForm[verifyCode]' => 'testme', 'body' => 'test content',
'verifyCode' => 'testme',
]); ]);
$I->dontSeeElement('#contact-form'); $I->dontSeeElement('#contact-form');
$I->see('Thank you for contacting us. We will respond to you as soon as possible.'); $I->see('Thank you for contacting us. We will respond to you as soon as possible.');

32
apps/basic/tests/functional/LoginCept.php

@ -1,23 +1,25 @@
<?php <?php
use tests\functional\_pages\LoginPage;
$I = new TestGuy($scenario); $I = new TestGuy($scenario);
$I->wantTo('ensure that login works'); $I->wantTo('ensure that login works');
$I->amOnPage('?r=site/login'); $loginPage = LoginPage::of($I);
$I->amOnPage(LoginPage::$URL);
$I->see('Login', 'h1'); $I->see('Login', 'h1');
$I->submitForm('#login-form', []); $I->amGoingTo('try to login with empty credentials');
$I->dontSee('Logout (admin)'); $loginPage->login('', '');
$I->see('Username cannot be blank'); $I->expectTo('see validations errors');
$I->see('Password cannot be blank'); $I->see('Username cannot be blank.');
$I->see('Password cannot be blank.');
$I->submitForm('#login-form', [ $I->amGoingTo('try to login with wrong credentials');
'LoginForm[username]' => 'admin', $loginPage->login('admin', 'wrong');
'LoginForm[password]' => 'wrong', $I->expectTo('see validations errors');
]); $I->see('Incorrect username or password.');
$I->dontSee('Logout (admin)');
$I->see('Incorrect username or password');
$I->submitForm('#login-form', [ $I->amGoingTo('try to login with correct credentials');
'LoginForm[username]' => 'admin', $loginPage->login('admin', 'admin');
'LoginForm[password]' => 'admin', $I->expectTo('see user info');
]);
$I->see('Logout (admin)'); $I->see('Logout (admin)');

19
apps/basic/tests/functional/TestGuy.php

@ -445,6 +445,25 @@ class TestGuy extends \Codeception\AbstractGuy
* Documentation taken from corresponding module. * Documentation taken from corresponding module.
* ---------------------------------------------- * ----------------------------------------------
* *
*
* @see Codeception\Module::getName()
* @return \Codeception\Maybe
*/
public function getName() {
$this->scenario->addStep(new \Codeception\Step\Action('getName', func_get_args()));
if ($this->scenario->running()) {
$result = $this->scenario->runStep();
return new Maybe($result);
}
return new Maybe();
}
/**
* This method is generated.
* Documentation taken from corresponding module.
* ----------------------------------------------
*
* Authenticates user for HTTP_AUTH * Authenticates user for HTTP_AUTH
* *
* @param $username * @param $username

10
apps/basic/tests/functional/_bootstrap.php

@ -1,2 +1,10 @@
<?php <?php
// Here you can initialize variables that will for your tests
$config = require(__DIR__.'/../yii_bootstrap.php');
$config = yii\helpers\ArrayHelper::merge(
$config,
require(__DIR__ . '/../../config/codeception/functional.php')
);
$application = new yii\web\Application($config);

56
apps/basic/tests/functional/_pages/ContactPage.php

@ -0,0 +1,56 @@
<?php
namespace tests\functional\_pages;
class ContactPage extends \tests\_pages\ContactPage
{
/**
* contact form name text field locator
* @var string
*/
public $name = 'ContactForm[name]';
/**
* contact form email text field locator
* @var string
*/
public $email = 'ContactForm[email]';
/**
* contact form subject text field locator
* @var string
*/
public $subject = 'ContactForm[subject]';
/**
* contact form body textarea locator
* @var string
*/
public $body = 'ContactForm[body]';
/**
* contact form verification code text field locator
* @var string
*/
public $verifyCode = 'ContactForm[verifyCode]';
/**
*
* @param array $contactData
*/
public function submit(array $contactData)
{
if (empty($contactData))
$this->guy->submitForm('#contact-form',[]);
else
$this->guy->submitForm('#contact-form',[
$this->name => $contactData['name'],
$this->email => $contactData['email'],
$this->subject => $contactData['subject'],
$this->body => $contactData['body'],
$this->verifyCode => $contactData['verifyCode'],
]);
}
}

33
apps/basic/tests/functional/_pages/LoginPage.php

@ -0,0 +1,33 @@
<?php
namespace tests\functional\_pages;
class LoginPage extends \tests\_pages\LoginPage
{
/**
* login form username text field locator
* @var string
*/
public $username = 'LoginForm[username]';
/**
* login form password text field locator
* @var string
*/
public $password = 'LoginForm[password]';
/**
*
* @param string $username
* @param string $password
*/
public function login($username, $password)
{
$this->guy->submitForm('#login-form',[
$this->username => $username,
$this->password => $password,
]);
}
}

17
apps/basic/tests/unit/CodeGuy.php

@ -26,5 +26,22 @@ use Codeception\Module\CodeHelper;
class CodeGuy extends \Codeception\AbstractGuy class CodeGuy extends \Codeception\AbstractGuy
{ {
/**
* This method is generated.
* Documentation taken from corresponding module.
* ----------------------------------------------
*
*
* @see Codeception\Module::getName()
* @return \Codeception\Maybe
*/
public function getName() {
$this->scenario->addStep(new \Codeception\Step\Action('getName', func_get_args()));
if ($this->scenario->running()) {
$result = $this->scenario->runStep();
return new Maybe($result);
}
return new Maybe();
}
} }

8
apps/basic/tests/unit/_bootstrap.php

@ -1,2 +1,8 @@
<?php <?php
// Here you can initialize variables that will for your tests
$config = require(__DIR__.'/../yii_bootstrap.php');
return yii\helpers\ArrayHelper::merge(
$config,
require(__DIR__ . '/../../config/codeception/unit.php')
);

8
apps/basic/tests/unit/models/ContactFormTest.php

@ -0,0 +1,8 @@
<?php
namespace tests\unit\models;
class ContactFormTest extends \yii\codeception\TestCase
{
}

8
apps/basic/tests/unit/models/LoginFormTest.php

@ -0,0 +1,8 @@
<?php
namespace tests\unit\models;
class LoginFormTest extends \yii\codeception\TestCase
{
}

25
apps/basic/tests/unit/models/UserTest.php

@ -0,0 +1,25 @@
<?php
namespace tests\unit\models;
#use yii\test\DbTestTrait;
class UserTest extends \yii\codeception\TestCase
{
use DbTestTrait;
protected function setUp()
{
/*
*
* you can load fixtures in this way
*
parent::setUp();
$this->loadFixtures([
'tbl_user',
]);
*/
}
}

10
apps/basic/tests/yii_bootstrap.php

@ -0,0 +1,10 @@
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../vendor/autoload.php');
require_once(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
return require(__DIR__ . '/../config/web.php');

13
apps/basic/web/index-debug.php

@ -0,0 +1,13 @@
<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
$config = require(__DIR__ . '/../config/web.php');
$application = new yii\web\Application($config);
$application->run();

16
apps/basic/web/index-test-accept.php

@ -0,0 +1,16 @@
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../vendor/autoload.php');
require_once(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../config/web-test.php'),
require(__DIR__ . '/../config/codeception/acceptance.php')
);
$application = new yii\web\Application($config);
$application->run();

16
apps/basic/web/index-test-func.php

@ -0,0 +1,16 @@
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../vendor/autoload.php');
require_once(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../config/web-test.php'),
require(__DIR__ . '/../config/codeception/functional.php')
);
$config['class'] = 'yii\web\Application';
return $config;

24
apps/basic/web/index-test.php

@ -1,24 +0,0 @@
<?php
if (!in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'])) {
die('You are not allowed to access this file.');
}
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'test');
require_once(__DIR__ . '/../vendor/autoload.php');
require_once(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
$config = require(__DIR__ . '/../config/web-test.php');
if (isset($this)) {
// run in functional tests
$config['class'] = 'yii\web\Application';
return $config;
} else {
// run in acceptance tests
$application = new yii\web\Application($config);
$application->run();
}

4
apps/basic/web/index.php

@ -1,8 +1,8 @@
<?php <?php
// comment out the following two lines when deployed to production // comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'dev'); defined('YII_ENV') or define('YII_ENV', 'prod');
require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');

2
composer.json

@ -51,6 +51,7 @@
"minimum-stability": "dev", "minimum-stability": "dev",
"replace": { "replace": {
"yiisoft/yii2-bootstrap": "self.version", "yiisoft/yii2-bootstrap": "self.version",
"yiisoft/yii2-codeception": "self.version",
"yiisoft/yii2-debug": "self.version", "yiisoft/yii2-debug": "self.version",
"yiisoft/yii2-elasticsearch": "self.version", "yiisoft/yii2-elasticsearch": "self.version",
"yiisoft/yii2-gii": "self.version", "yiisoft/yii2-gii": "self.version",
@ -80,6 +81,7 @@
"autoload": { "autoload": {
"psr-0": { "psr-0": {
"yii\\bootstrap\\": "extensions/", "yii\\bootstrap\\": "extensions/",
"yii\\codeception\\": "extensions/",
"yii\\debug\\": "extensions/", "yii\\debug\\": "extensions/",
"yii\\elasticsearch\\": "extensions/", "yii\\elasticsearch\\": "extensions/",
"yii\\gii\\": "extensions/", "yii\\gii\\": "extensions/",

45
extensions/codeception/BasePage.php

@ -0,0 +1,45 @@
<?php
namespace yii\codeception;
class BasePage
{
// include url of current page
public static $URL = '';
/**
* Declare UI map for this page here. CSS or XPath allowed.
* public static $usernameField = '#username';
* public static $formSubmitButton = "#mainForm input[type=submit]";
*/
/**
* Basic route example for your current URL
* You can append any additional parameter to URL
* and use it in tests like: EditPage::route('/123-post');
*/
public static function route($param)
{
return static::$URL.$param;
}
/**
* @var
*/
protected $guy;
public function __construct($I)
{
$this->guy = $I;
}
/**
* @return $this
*/
public static function of($I)
{
return new static($I);
}
}

12
extensions/codeception/CHANGELOG.md

@ -0,0 +1,12 @@
Yii Framework 2 Codeception extension Change Log
================================================
2.0.0 beta under development
----------------------------
- no changes in this release.
2.0.0 alpha, December 1, 2013
-----------------------------
- Initial release.

32
extensions/codeception/LICENSE.md

@ -0,0 +1,32 @@
The Yii framework is free software. It is released under the terms of
the following BSD License.
Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of Yii Software LLC nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

128
extensions/codeception/README.md

@ -0,0 +1,128 @@
Codeception Extension for Yii 2
===============================
This extension provides a `Codeception` mail solution for Yii 2. It includes some classes that are useful
for unit-testing (```TestCase```) or for codeception page-objects (```BasePage```).
When using codeception page-objects they have some similar code, this code was extracted and put into the ```BasePage```
class to reduce code duplication. Simply extend your page object from this class, like it is done in ```yii2-basic``` and
```yii2-advanced``` boilerplates.
For unit testing there is a ```TestCase``` class which holds some common features like application creation before each test
and application destroy after each test. You can configure your application by this class. ```TestCase``` is extended from ```PHPUnit_Framework_TestCase``` so all
methods and assertions are available.
```php
SomeConsoleTest extends yii\codeception\TestCase
{
# by default it is @tests/unit/_bootstrap.php which holds some basic things like:
# including composer autoload, include BaseYii class.
public $baseConfig = '@app/config/console.php';
public $applicationClass = 'yii\console\Application';
}
```
Dont forget that you still need to include autoload and BaseYii class, like in the _bootstrap.php file (comments above).
You also can reconfigure some components for tests, for this purpose there is a ```$config``` property in the testcase.
```php
SomeOtherTest extends yii\codeception\TestCase
{
public $config = [
'components' => [
'mail' => [
'useFileTransport' => true,
],
]
];
}
```
Because of Codeception buffers all output you cant make simple ```var_dump()``` in the TestCase, instead you need to use
```Codeception\Util\Debug::debug()``` function and then run test with ```--debug``` key, for example:
```php
use \Codeception\Util\Debug;
SomeDebugTest extends yii\codeception\TestCase
{
public function testSmth()
{
Debug::debug('some my string');
Debug::debug($someArray);
Debug::debug($someObject);
}
}
```
Then run command ```php codecept.phar run --debug unit/SomeDebugTest``` (Codeception also available through composer) and you will see in output:
```html
some my string
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
yii\web\User Object
(
[identityClass] => app\models\User
[enableAutoLogin] =>
[loginUrl] => Array
(
[0] => site/login
)
[identityCookie] => Array
(
[name] => _identity
[httpOnly] => 1
)
[authTimeout] =>
[autoRenewCookie] => 1
[idVar] => __id
[authTimeoutVar] => __expire
[returnUrlVar] => __returnUrl
[_access:yii\web\User:private] => Array
(
)
[_identity:yii\web\User:private] =>
[_events:yii\base\Component:private] =>
[_behaviors:yii\base\Component:private] =>
)
```
For further instructions refer to the related section in the Yii Definitive Guide (https://github.com/yiisoft/yii2/blob/master/docs/guide/testing.md).
Installation
------------
The preferred way to install this extension is through [composer](http://getcomposer.org/download/).
Either run
```
php composer.phar require yiisoft/yii2-codeception "*"
```
or add
```json
"yiisoft/yii2-codeception": "*"
```
to the require section of your composer.json.

54
extensions/codeception/TestCase.php

@ -0,0 +1,54 @@
<?php
namespace yii\codeception;
use Yii;
class TestCase extends \PHPUnit_Framework_TestCase
{
/**
* Your application base config that will be used for creating application each time before test.
* This can be an array or alias, pointing to the config file. For example for console application it can be
* '@tests/unit/console_bootstrap.php' that can be similar to existing unit tests bootstrap file.
* @var mixed
*/
protected $baseConfig = '@tests/unit/_bootstrap.php';
/**
* Your application config, will be merged with base config when creating application. Can be an alias too.
* @var mixed
*/
protected $config = array();
/**
* Created application class
* @var string
*/
protected $appClass = '\yii\web\Application';
protected function setUp()
{
parent::setUp();
$this->mockApplication();
}
protected function tearDown()
{
$this->destroyApplication();
parent::tearDown();
}
protected function mockApplication()
{
$baseConfig = is_array($this->baseConfig)? $this->baseConfig : require(Yii::getAlias($this->baseConfig, true));
$config = is_array($this->config)? $this->config : require(Yii::getAlias($this->config, true));
new $this->appClass(\yii\helpers\ArrayHelper::merge($baseConfig,$config));
}
protected function destroyApplication()
{
\Yii::$app = null;
}
}

26
extensions/codeception/composer.json

@ -0,0 +1,26 @@
{
"name": "yiisoft/yii2-codeception",
"description": "The Codeception integration for the Yii framework",
"keywords": ["yii", "codeception"],
"type": "yii2-extension",
"license": "BSD-3-Clause",
"support": {
"forum": "http://www.yiiframework.com/forum/",
"wiki": "http://www.yiiframework.com/wiki/",
"irc": "irc://irc.freenode.net/yii",
"source": "https://github.com/yiisoft/yii2"
},
"authors": [
{
"name": "Mark Jebri",
"email": "mark.github@yandex.ru"
}
],
"require": {
"yiisoft/yii2": "*"
},
"autoload": {
"psr-0": { "yii\\codeception\\": "" }
},
"target-dir": "yii/codeception"
}
Loading…
Cancel
Save