2 changed files with 116 additions and 1 deletions
			
			
		| @ -0,0 +1,115 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace yiiunit\framework\behaviors; | ||||
| 
 | ||||
| use Yii; | ||||
| use yiiunit\TestCase; | ||||
| use yii\db\Connection; | ||||
| use yii\db\ActiveRecord; | ||||
| use yii\behaviors\AutoTimestamp; | ||||
| 
 | ||||
| /** | ||||
|  * Unit test for [[\yii\behaviors\AutoTimestamp]]. | ||||
|  * @see AutoTimestamp | ||||
|  */ | ||||
| class AutoTimestampTest extends TestCase | ||||
| { | ||||
| 	/** | ||||
| 	 * @var Connection test db connection | ||||
| 	 */ | ||||
| 	protected $dbConnection; | ||||
| 
 | ||||
| 	public static function setUpBeforeClass() | ||||
| 	{ | ||||
| 		if (!extension_loaded('pdo') || !extension_loaded('pdo_sqlite')) { | ||||
| 			static::markTestSkipped('PDO and SQLite extensions are required.'); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public function setUp() { | ||||
| 		$this->mockApplication( | ||||
| 			array( | ||||
| 				'components' => array( | ||||
| 					'db' => array( | ||||
| 						'class' => '\yii\db\Connection', | ||||
| 						'dsn' => 'sqlite::memory:', | ||||
| 					) | ||||
| 				) | ||||
| 			) | ||||
| 		); | ||||
| 
 | ||||
| 		$columns = array( | ||||
| 			'id' => 'pk', | ||||
| 			'create_time' => 'integer', | ||||
| 			'update_time' => 'integer', | ||||
| 		); | ||||
| 		Yii::$app->getDb()->createCommand()->createTable('test_auto_timestamp', $columns)->execute(); | ||||
| 	} | ||||
| 
 | ||||
| 	public function tearDown() | ||||
| 	{ | ||||
| 		Yii::$app->getDb()->close(); | ||||
| 		parent::tearDown(); | ||||
| 	} | ||||
| 
 | ||||
| 	// Tests : | ||||
| 
 | ||||
| 	public function testNewRecord() | ||||
| 	{ | ||||
| 		$currentTime = time(); | ||||
| 
 | ||||
| 		$model = new ActiveRecordAutoTimestamp(); | ||||
| 		$model->save(false); | ||||
| 
 | ||||
| 		$this->assertTrue($model->create_time >= $currentTime); | ||||
| 		$this->assertTrue($model->update_time >= $currentTime); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @depends testNewRecord | ||||
| 	 */ | ||||
| 	public function testUpdateRecord() | ||||
| 	{ | ||||
| 		$currentTime = time(); | ||||
| 
 | ||||
| 		$model = new ActiveRecordAutoTimestamp(); | ||||
| 		$model->save(false); | ||||
| 
 | ||||
| 		$enforcedTime = $currentTime - 100; | ||||
| 
 | ||||
| 		$model->create_time = $enforcedTime; | ||||
| 		$model->update_time = $enforcedTime; | ||||
| 		$model->save(false); | ||||
| 
 | ||||
| 		$this->assertEquals($enforcedTime, $model->create_time, 'Create time has been set on update!'); | ||||
| 		$this->assertTrue($model->update_time >= $currentTime, 'Update time has NOT been set on update!'); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Test Active Record class with [[AutoTimestamp]] behavior attached. | ||||
|  * | ||||
|  * @property integer $id | ||||
|  * @property integer $create_time | ||||
|  * @property integer $update_time | ||||
|  */ | ||||
| class ActiveRecordAutoTimestamp extends ActiveRecord | ||||
| { | ||||
| 	public function behaviors() | ||||
| 	{ | ||||
| 		return array( | ||||
| 			'timestamp' => array( | ||||
| 				'class' => AutoTimestamp::className(), | ||||
| 				'attributes' => array( | ||||
| 					static::EVENT_BEFORE_INSERT => array('create_time', 'update_time'), | ||||
| 					static::EVENT_BEFORE_UPDATE => 'update_time', | ||||
| 				), | ||||
| 			), | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	public static function tableName() | ||||
| 	{ | ||||
| 		return 'test_auto_timestamp'; | ||||
| 	} | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue