/** * @covers WFormRelation::getInstance */ public function testGetInstance() { $model = $this->getModelMock(); $model->expects($this->any())->method('setOptions'); $options = array('required' => true, 'type' => 'someUnexpectedType'); // for 'relations' => array('someRelation' => array(..options..)) $this->assertInstanceOf('WFormRelationHasOne', WFormRelation::getInstance($model, 'hasOne', $options)); $this->assertInstanceOf('WFormRelationHasMany', WFormRelation::getInstance($model, 'hasMany', $options)); $this->assertInstanceOf('WFormRelationManyMany', WFormRelation::getInstance($model, 'manyMany', $options)); $this->assertInstanceOf('WFormRelationBelongsTo', WFormRelation::getInstance($model, 'belongsTo', $options)); $this->assertNull(WFormRelation::getInstance($model, 'stat', $options)); $this->assertNull(WFormRelation::getInstance($model, 'misteriousRelation', $options)); // for 'relations' => array('someRelation','someOtherRelation') $this->assertInstanceOf('WFormRelationHasOne', WFormRelation::getInstance($model, 0, 'hasOne')); $this->assertInstanceOf('WFormRelationHasMany', WFormRelation::getInstance($model, 1, 'hasMany')); $this->assertInstanceOf('WFormRelationManyMany', WFormRelation::getInstance($model, 2, 'manyMany')); $this->assertInstanceOf('WFormRelationBelongsTo', WFormRelation::getInstance($model, 3, 'belongsTo')); $this->assertNull(WFormRelation::getInstance($model, 4, 'stat')); $this->assertNull(WFormRelation::getInstance($model, 5, 'misteriousRelation')); $relation = WFormRelation::getInstance($model, 'hasOne', $options); $this->assertAttributeNotEmpty('name', $relation); $this->assertAttributeNotEmpty('info', $relation); $this->assertAttributeNotEmpty('type', $relation); $this->assertAttributeNotEmpty('model', $relation); }
/** * @covers WFormRelationHasMany::getActualRelatedModels */ public function testGetActualRelatedModels() { $product = $this->_getProductWithRelation(1); $relation = WFormRelation::getInstance($product, 'images'); $this->assertCount(1, $relation->getRelatedModels()); $this->assertCount(1, $relation->getActualRelatedModels()); $product->attributes = array('name' => 'name', 'images' => array()); $this->assertCount(1, $relation->getActualRelatedModels()); $this->assertCount(0, $relation->getRelatedModels()); $product->attributes = array('name' => 'name', 'images' => array(array('file' => 'newfile1.txt'), array('file' => 'newfile2.txt'))); $this->assertCount(2, $relation->getRelatedModels()); $this->assertCount(1, $relation->getActualRelatedModels()); }
/** * @covers WFormRelationHasOne::getActualRelatedModel */ public function testGetActualRelatedModel() { $product = $this->_getProductWithRelation(1, array('required' => false)); $relation = WFormRelation::getInstance($product, 'description', array('required' => false)); $this->assertNotEmpty($relation->getRelatedModel(false)); $this->assertNotEmpty($relation->getActualRelatedModel()); $product->attributes = array('name' => 'name', 'description' => null); $this->assertNotEmpty($relation->getActualRelatedModel()); $this->assertEmpty($relation->getRelatedModel(false)); $product->attributes = array('name' => 'name', 'description' => array('size' => '10')); $this->assertNotEmpty($relation->getActualRelatedModel()); $this->assertNotEmpty($relation->getRelatedModel(false)); }
/** * Rebuild related models * * @param $parentModel * @return void */ protected function _buildRelatedModel($parentModel) { $this->relatedModels = array(); if (is_null($this->relations)) { $this->relations = array_keys($parentModel->relations()); } foreach ($this->relations as $index => $options) { $relation = $index; if (is_numeric($index)) { $relation = $options; $options = array(); } if (($relationModel = WFormRelation::getInstance($parentModel, $relation, $options)) !== null) { $this->relatedModels[$relation] = $relationModel; $this->relatedModels[$relation]->setPreloaded(in_array($relation, self::$preloadedRelations)); } else { unset($this->relations[$index]); } } }
/** * @covers WFormRelationHasMany::getRelatedModel */ public function testGetRelatedModel() { $product = $this->_getProductWithRelation(); $relation = WFormRelation::getInstance($product, 'category'); $this->assertEmpty($relation->getRelatedModel(false)); // $this->assertNotEmpty($relation->getRelatedModel(true)); $product->attributes = array('name' => 'product_name', 'category' => array('id' => 1, 'name' => '10')); $this->assertNotEmpty($relation->getRelatedModel()); $product = $this->_getProductWithRelation(1); $relation = WFormRelation::getInstance($product, 'category'); $this->assertNotEmpty($relation->getRelatedModel()); }