Przeglądaj źródła

tests modified, bootstrap added

Mark 12 lat temu
rodzic
commit
d2214e4f0a

+ 1 - 0
tests/_bootstrap.php

@@ -0,0 +1 @@
+<?php

+ 10 - 0
tests/_pages/AboutPage.php

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

+ 45 - 0
tests/_pages/BasePage.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace tests\_pages;
+
+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);
+	}
+
+}

+ 63 - 0
tests/_pages/ContactPage.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace tests\_pages;
+
+class ContactPage extends 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 - 0
tests/_pages/LoginPage.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace tests\_pages;
+
+class LoginPage extends 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);
+	}
+
+}

+ 4 - 3
tests/acceptance.suite.dist.yml

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

+ 3 - 1
tests/acceptance/AboutCept.php

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

+ 24 - 14
tests/acceptance/ContactCept.php

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

+ 18 - 15
tests/acceptance/LoginCept.php

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

Plik diff jest za duży
+ 1432 - 757
tests/acceptance/WebGuy.php


+ 9 - 0
tests/acceptance/_bootstrap.php

@@ -1,2 +1,11 @@
 <?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/acceptance.php')
+);
+
+$application = new yii\web\Application($config);

+ 2 - 2
tests/functional.suite.dist.yml

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

+ 4 - 1
tests/functional/AboutCept.php

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

+ 23 - 14
tests/functional/ContactCept.php

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

+ 17 - 15
tests/functional/LoginCept.php

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

+ 70 - 51
tests/functional/TestGuy.php

@@ -27,7 +27,7 @@ use Codeception\Module\Yii2;
 
 class TestGuy extends \Codeception\AbstractGuy
 {
-
+    
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -49,7 +49,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -79,7 +79,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -106,7 +106,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -133,7 +133,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -161,7 +161,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -220,7 +220,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -281,7 +281,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -336,7 +336,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -355,7 +355,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -412,7 +412,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -439,13 +439,32 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
+ 
+    /**
+     * 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();
+    }
 
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
      * ----------------------------------------------
      *
-     * Authenticates user for HTTP_AUTH
+     * Authenticates user for HTTP_AUTH 
      *
      * @param $username
      * @param $password
@@ -461,7 +480,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -494,7 +513,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -540,7 +559,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -605,7 +624,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -670,7 +689,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -733,7 +752,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -794,7 +813,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -853,7 +872,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -906,7 +925,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -963,7 +982,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1020,7 +1039,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1075,7 +1094,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1130,7 +1149,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1161,7 +1180,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1224,7 +1243,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1285,7 +1304,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1354,7 +1373,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1421,7 +1440,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1477,16 +1496,16 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
      * ----------------------------------------------
      *
      * Fills a text field or textarea with value.
-     *
+     * 
      * Example:
-     *
+     * 
      * ``` php
      * <?php
      * $I->fillField("//input[@type='text']", "Hello World!");
@@ -1507,7 +1526,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1547,7 +1566,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1577,7 +1596,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1606,7 +1625,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1637,7 +1656,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1662,7 +1681,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1698,7 +1717,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1731,7 +1750,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1764,7 +1783,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1817,7 +1836,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1826,7 +1845,7 @@ class TestGuy extends \Codeception\AbstractGuy
      * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath
      *
      * Example:
-     *
+     * 
      * ``` php
      * <?php
      * $I->dontSeeElement('.error');
@@ -1854,7 +1873,7 @@ class TestGuy extends \Codeception\AbstractGuy
      * Checks if element does not exist (or is visible) on a page, matching it by CSS or XPath
      *
      * Example:
-     *
+     * 
      * ``` php
      * <?php
      * $I->dontSeeElement('.error');
@@ -1874,7 +1893,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1931,7 +1950,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -1988,7 +2007,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -2025,7 +2044,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -2068,7 +2087,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.
@@ -2123,7 +2142,7 @@ class TestGuy extends \Codeception\AbstractGuy
         return new Maybe();
     }
 
-
+ 
     /**
      * This method is generated.
      * Documentation taken from corresponding module.

+ 9 - 1
tests/functional/_bootstrap.php

@@ -1,2 +1,10 @@
 <?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 - 0
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 - 0
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,
+		]);
+	}
+
+}

+ 18 - 1
tests/unit/CodeGuy.php

@@ -25,6 +25,23 @@ use Codeception\Module\CodeHelper;
 
 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();
+    }
 }
 

+ 9 - 1
tests/unit/_bootstrap.php

@@ -1,2 +1,10 @@
 <?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/unit.php')
+);
+
+$application = new yii\web\Application($config);

+ 16 - 0
tests/unit/models/ContactFormTest.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace tests\unit\models;
+
+class ContactFormTest extends \PHPUnit_Framework_TestCase
+{
+
+	protected function setUp()
+	{
+	}
+
+	protected function tearDown()
+	{
+	}
+
+}

+ 16 - 0
tests/unit/models/LoginFormTest.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace tests\unit\models;
+
+class LoginFormTest extends \PHPUnit_Framework_TestCase
+{
+
+    protected function setUp()
+    {
+    }
+
+    protected function tearDown()
+    {
+    }
+
+}

+ 27 - 0
tests/unit/models/UserTest.php

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

+ 10 - 0
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');