Browse Source

added scenario test while reproducing #10034

tags/3.0.0-alpha1
Carsten Brandt 9 years ago
parent
commit
939b3a9283
  1. 22
      tests/data/base/RulesModel.php
  2. 53
      tests/framework/base/ModelTest.php

22
tests/data/base/RulesModel.php

@ -0,0 +1,22 @@
<?php
namespace yiiunit\data\base;
use yii\base\Model;
/**
* model to test different rules combinations in ModelTest
*/
class RulesModel extends Model
{
public $account_id;
public $user_id;
public $email;
public $name;
public $rules = [];
public function rules()
{
return $this->rules;
}
}

53
tests/framework/base/ModelTest.php

@ -3,6 +3,7 @@
namespace yiiunit\framework\base;
use yii\base\Model;
use yiiunit\data\base\RulesModel;
use yiiunit\TestCase;
use yiiunit\data\base\Speaker;
use yiiunit\data\base\Singer;
@ -124,6 +125,58 @@ class ModelTest extends TestCase
}
public function testSafeScenarios()
{
$model = new RulesModel();
$model->rules = [
// validated and safe on every scenario
[['account_id', 'user_id'], 'required'],
];
$model->scenario = Model::SCENARIO_DEFAULT;
$this->assertEquals(['account_id', 'user_id'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id'], $model->activeAttributes());
$model->scenario = 'update'; // not exsisting scenario
$this->assertEquals([], $model->safeAttributes());
$this->assertEquals([], $model->activeAttributes());
$model = new RulesModel();
$model->rules = [
// validated and safe on every scenario
[['account_id', 'user_id'], 'required'],
// only in create and update scenario
[['user_id'], 'number', 'on' => ['create', 'update']],
[['email', 'name'], 'required', 'on' => 'create']
];
$model->scenario = Model::SCENARIO_DEFAULT;
$this->assertEquals(['account_id', 'user_id'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id'], $model->activeAttributes());
$model->scenario = 'update';
$this->assertEquals(['account_id', 'user_id'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id'], $model->activeAttributes());
$model->scenario = 'create';
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->activeAttributes());
$model = new RulesModel();
$model->rules = [
// validated and safe on every scenario
[['account_id', 'user_id'], 'required'],
// only in create and update scenario
[['user_id'], 'number', 'on' => ['create', 'update']],
[['email', 'name'], 'required', 'on' => 'create'],
[['email', 'name'], 'required', 'on' => 'update'],
];
$model->scenario = Model::SCENARIO_DEFAULT;
$this->assertEquals(['account_id', 'user_id'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id'], $model->activeAttributes());
$model->scenario = 'update';
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->activeAttributes());
$model->scenario = 'create';
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->safeAttributes());
$this->assertEquals(['account_id', 'user_id', 'email', 'name'], $model->activeAttributes());
}
public function testErrors()
{
$speaker = new Speaker();

Loading…
Cancel
Save