ruijiang@yiguanjia.me 9090b65671 2 8 rokov pred
..
EMongoDbFixtureManager.php 9090b65671 2 8 rokov pred
EMongoDbTestCase.php 9090b65671 2 8 rokov pred
README.mkd 9090b65671 2 8 rokov pred

README.mkd

Fixture manager for MongoRecords

Setup

In your protected/config/main.php config file, add the following :

[php]


    'import' => array(
      ...
      'ext.YiiMongoDbSuite.*',
      'ext.YiiMongoDbSuite.test.*',
    ),

    'components' => array(
		'fixture'=>array(
			'class'=>'EMongoDbFixtureManager',
		),
      ...
    ),


That's all you can start using the fixture manager right now.

MongoDocument object

[php]

    class User extends EMongoDocument
    {
      public $login;
      public $name;
      public $pass;

      // This has to be defined in every model, this is same as with standard Yii ActiveRecord
      public static function model($className=__CLASS__)
      {
        return parent::model($className);
      }

      // This method is required!
      public function getCollectionName()
      {
        return 'Users';
      }

      public function rules()
      {
        return array(
          array('login, pass', 'required'),
          array('login, pass', 'length', 'max' => 20),
          array('name', 'length', 'max' => 255),
        );
      }

      public function attributeLabels()
      {
        return array(
          'login'  => 'User Login',
          'name'   => 'Full name',
          'pass'   => 'Password',
        );
      }
    }


Create fixture

Define the fixture collection like for ActiveRecords. Please check http://www.yiiframework.com/doc/guide/1.1/en/test.fixture

Fixture file Users.php for collection elements User

[php]
return array(
    'sample1'=>array(
        'login'=>'userLogin',
        'name'=>'User firstname',
        'pass'=>'pass fixture value',
    ),
    'sample2'=>array(
        'login'=>'otherLogin',
        'name'=>'Other User firstname',
        'pass'=>'other pass value',
    ),
);

Use it

Now you can use your fixtured records in your test cases

[php]
class UserTest extends EMongoDbTestCase {
	public $fixtures = array(
		'Users'=>'User',
	);
	public function testFindUser() {
		$criteria = new EMongoCriteria();
		$criteria->login('==',$this->Users['sample1']['login']);
		$userFromDb = User::model()->find($criteria);
		$this->assertEquals($userFromDb->login, $this->users['sample1']['login']);
	}
}

Embedded documents

Embedded document can be defined in fixtures as array as all the difficult work to map embedded documents is done in the EMongoDocument class.