Inheritance: extends Webiny\Component\Entity\AbstractEntity
コード例 #1
0
ファイル: EntityTest.php プロジェクト: webiny/entity
 /**
  * This test runs a simple populate on entity with no validators.
  *
  * It tests:
  * - all attribute types
  * - all reference attributes: many2one, one2many and many2many
  * - it tests both on-fly creation and linking with existing entities
  */
 public function testPopulateNoValidationAllNew()
 {
     $many2one = new Many2One();
     $many2one->char = 'many2oneExisting';
     $many2one->save();
     $many2many = new Many2Many();
     $many2many->char = 'many2many1';
     $many2many->save();
     $many2many2 = new Many2Many();
     $many2many2->char = 'many2many2';
     $many2many2->save();
     $data = ['boolean' => true, 'char' => 'char', 'skip' => 'this value will not be set', 'integer' => 12, 'calculation' => 5, 'float' => 20.35, 'date' => '2016-03-14', 'datetime' => '2016-03-14T13:45:20+0000', 'arr' => [1, 2, 3], 'object' => ['key1' => 'value', 'key2' => 12], 'geoPoint' => ['lat' => 50, 'lng' => 100, 'stripThisKey' => 'whatever'], 'many2oneNew' => ['char' => 'many2oneNew'], 'many2oneExisting' => $many2one, 'one2many' => [['char' => 'one2many1'], ['char' => 'one2many2']], 'many2many' => [$many2many->id, $many2many2]];
     $class = Lib\Classes::ENTITY_NO_VALIDATION;
     $entity = new $class();
     $entity->populate($data)->save();
     // Test current $entity state
     $this->assertEntityStateNoValidation($entity);
     // Load entity from DB and test state again
     $id = $entity->id;
     Entity::getInstance()->remove($entity);
     $entity = $class::findById($id);
     $this->assertEntityStateNoValidation($entity);
     // Test toArray conversion
     $array = new ArrayObject($entity->toArray('*,float:2,arr,object[key1],dynamicWithParams:4,many2oneNew[char,relations.integer],one2many,many2many', 2));
     $this->assertEquals('char', $array->keyNested('char'));
     $this->assertEquals(4, $array->keyNested('float'));
     $this->assertArrayNotHasKey('boolean', $array->val());
     $this->assertArrayNotHasKey('skip', $array->val());
     $this->assertEquals([1, 2, 3], $array->keyNested('arr'));
     $this->assertEquals('value', $array->keyNested('object.key1'));
     $this->assertNull($array->keyNested('object.key2'));
     // GeoPoint should return an array of lat/lng values
     $this->assertEquals(50, $array->keyNested('geoPoint.lat'));
     $this->assertEquals(100, $array->keyNested('geoPoint.lng'));
     // If return value of dynamic attribute is AbstractEntity or EntityCollection,
     // EntityDataExtractor should call toArray() an those objects
     $this->assertEquals(24, $array->key('dynamicWithDefaultParams'));
     $this->assertEquals(48, $array->key('dynamicWithParams'));
     $this->assertInternalType('array', $array->key('dynamicEntity'));
     $this->assertInternalType('array', $array->key('dynamicEntityCollection'));
     $this->assertCount(2, $array->key('dynamicEntityCollection'));
     $this->assertEquals('many2oneExisting', $array->keyNested('dynamicEntityCollection.0.char'));
     $this->assertEquals('many2oneNew', $array->keyNested('dynamicEntityCollection.1.char'));
     // GeoPoint attribute should strips all values not related to mongo Point
     $this->assertArrayNotHasKey('stripThisKey', $array->keyNested('geoPoint'));
     $this->assertEquals('many2oneNew', $array->keyNested('many2oneNew.char'));
     $this->assertEquals(12, $array->keyNested('many2oneNew.relations.0.integer'));
     $this->assertEquals('one2many1', $array->keyNested('one2many.0.char'));
     $this->assertEquals('one2many2', $array->keyNested('one2many.1.char'));
     $this->assertEquals('many2many1', $array->keyNested('many2many.0.char'));
     $this->assertEquals('many2many2', $array->keyNested('many2many.1.char'));
 }
コード例 #2
0
ファイル: EntityTest.php プロジェクト: Webiny/Framework
 public function testMany2Many()
 {
     $entity = new Lib\NoValidation\Entity();
     $entity->char = 'Webiny Test';
     // Set initial value
     $entity->many2many = [['char' => 'many1']];
     // Append another value
     $entity->many2many[] = ['char' => 'many2'];
     $this->assertCount(2, $entity->many2many);
     $entity->save();
     $id = $entity->id;
     // Reload entity and assert values are saved
     Entity::getInstance()->reset();
     $entity = Lib\NoValidation\Entity::findById($id);
     $this->assertCount(2, $entity->many2many);
     // Test simple "unset"
     unset($entity->many2many[0]);
     $this->assertCount(1, $entity->many2many);
     // Assert that the correct index was unset
     $this->assertEquals('many2', $entity->many2many[1]->char);
     // Test appending of entity instances
     $many3 = new Many2Many();
     $many3->populate(['char' => 'many3']);
     $entity->many2many[] = ['char' => 'many2'];
     $entity->many2many[] = $many3;
     $entity->save();
     // Reload and test removal of single and all values
     Entity::getInstance()->reset();
     $entity = Lib\NoValidation\Entity::findById($id);
     $this->assertCount(3, $entity->many2many);
     $entity->getAttribute('many2many')->unlink($many3);
     $this->assertCount(2, $entity->many2many);
     $entity->getAttribute('many2many')->unlinkAll();
     $this->assertCount(0, $entity->many2many);
     $entity->save();
     // Reload and assert no values are saved
     Entity::getInstance()->reset();
     $entity = Lib\NoValidation\Entity::findById($id);
     $this->assertCount(0, $entity->many2many);
     // Append 2 values, save, reload and try setting an empty array to remove all values
     $entity->many2many[] = ['char' => 'many1'];
     $entity->many2many[] = ['char' => 'many2'];
     $this->assertCount(2, $entity->many2many);
     $entity->save();
     Entity::getInstance()->reset();
     $entity = Lib\NoValidation\Entity::findById($id);
     // Remove all items by setting an empty array
     $entity->many2many = [];
     $this->assertCount(0, $entity->many2many);
     $entity->save();
     // Reload and make sure nothing was loaded from DB
     Entity::getInstance()->reset();
     $entity = Lib\NoValidation\Entity::findById($id);
     $this->assertCount(0, $entity->many2many);
 }