Skip to content

Instantly share code, notes, and snippets.

@tmsnvd
Created August 6, 2014 08:02
Show Gist options
  • Save tmsnvd/5435aa009fc42cd5b73c to your computer and use it in GitHub Desktop.
Save tmsnvd/5435aa009fc42cd5b73c to your computer and use it in GitHub Desktop.
<?php
namespace tests\unit\models;
use app\tests\fixtures\UserFixture;
use Yii;
use yii\codeception\DbTestCase;
use Codeception\Specify;
use Codeception\Util\Debug;
use app\models\User;
use yii\db\Query;
class UserTest extends DbTestCase
{
use Specify;
protected function setUp()
{
parent::setUp();
Yii::$app->mailer->fileTransportCallback = function ($mailer, $message) {
return 'testing_message.eml';
};
}
protected function tearDown()
{
parent::tearDown();
}
public function fixtures()
{
return [
'users' => UserFixture::className()
];
}
public function testFirstScenarioValidation()
{
//$model = $this->getMock('app\models\User', ['validate', 'save']);
//$model->expects($this->once())->method('validate');
//$model->expects($this->once())->method('save')->will($this->returnValue(false));
$model = new User;
$model->scenario = 'register_step_1';
$model->attributes = [
'name' => 'tester',
'surname' => '',
'email' => 'unit@test.lt',
'pass' => '123',
'repeat_password' => '123',
'has_esign' => '0',
'has_eula' => '0',
'verifyCode' => 'b',
];
$query = new Query;
$this->specify('Model validation should FAIL in first scenario', function () use ($model, $query){
expect('Validation failed', $model->validate() )->false();
expect('Save to DB failed', $model->save() )->false();
expect('Should be 5 validation errors', count($model->errors) )->equals(5);
expect('Should be 0 users in DB', $query->from($model->tableName())->count() )->equals(0);
});
$model->attributes = [
'name' => 'Jonai',
'surname' => 'param param',
'email' => 'unit@test.lt',
'pass' => '123456',
'repeat_password' => '123456',
'has_esign' => '1',
'has_eula' => '1',
'verifyCode' => 'a',
];
$this->specify('Model validation should SUCCEED in first scenario', function () use ($model, $query){
expect('Validation successful', $model->validate())->true();
expect('Save to DB successful', $model->save())->true();
expect('Should NONE (0) validation errors', count($model->errors))->equals(0);
expect('Should be 1 user in DB', $query->from($model->tableName())->count() )->equals(1);
});
$model = new User;
$model->scenario = 'register_step_1';
$model->attributes = [
'name' => 'Jonai',
'surname' => 'param param',
'email' => 'unit@test.lt',
'pass' => '123456',
'repeat_password' => '123456',
'has_esign' => '1',
'has_eula' => '1',
'verifyCode' => 'a',
];
$this->specify('Model validation should FAIL in first scenario, user email not unique', function () use ($model, $query){
expect('Validation failed', $model->validate())->false();
expect('Save to DB failed', $model->save())->false();
expect('Should 1 validation error', count($model->errors))->equals(1);
expect('Should be 1 user in DB', $query->from($model->tableName())->count() )->equals(1);
});
$model->sendActivation('unit@test.lt');
$this->specify('email should be send', function () {
expect('email file should exist', file_exists($this->getMessageFile()))->true();
});
$this->specify('message should contain correct data', function () use ($model) {
$emailMessage = file_get_contents($this->getMessageFile());
expect('email should contain user name', $emailMessage)->contains($model->name);
});
unlink($this->getMessageFile());
}
public function testActivation()
{
//$model->scenario = 'register_step_1';
//$model->attributes = $this->users[0];
$model = new User;
$query = new Query;
$this->specify('Model validation should FAIL in first scenario', function () use ($model, $query){
expect('Should be 2 users in DB', $query->from($model->tableName())->count() )->equals(2);
});
/**/
}
private function getMessageFile()
{
return Yii::getAlias(Yii::$app->mailer->fileTransportPath) . '/testing_message.eml';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment