diff --git a/tests/unit/framework/behaviors/AutoTimestampTest.php b/tests/unit/framework/behaviors/AutoTimestampTest.php new file mode 100644 index 0000000..de96630 --- /dev/null +++ b/tests/unit/framework/behaviors/AutoTimestampTest.php @@ -0,0 +1,115 @@ +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'; + } +} \ No newline at end of file