Example #1
0
 private function givenIHaveCreatedAValidRecordForThisTable()
 {
     $generator = new FieldValuesGenerator();
     $data = $generator->getRequiredRandomRecordData($this->table->getFields());
     $this->record = $this->table->createRecord($data);
     $this->thenTheRecordShouldBeValid();
 }
 public function testGenerateValidFieldValues()
 {
     $rm = self::createDefaultRecordManager();
     $table = $rm->getTable('data_types');
     $fieldValues = $this->generator->getRandomRecordData($table->getFields(), array(), FieldValuesGenerator::MAXIMAL_WITHOUT_AUTOINCREMENT);
     $dataTypeMapper = $rm->getDriver()->getDataTypeMapper();
     foreach ($fieldValues as $fieldName => $value) {
         $field = $table->getField($fieldName);
         $fieldValidator = $dataTypeMapper->getOrmTypeInstance($field['type']);
         $this->assertTrue($fieldValidator->validateType($value, $field), "Field type for '{$fieldName}' is not valid!");
         $this->assertTrue($fieldValidator->validateLength($value, $field), "Field length for '{$fieldName}' is not valid!");
     }
 }
Example #3
0
 /**
  * Saves record
  *
  * @param  Table  $table
  * @param  array  $row
  * @param  string $key
  * @return string
  */
 private function saveRecord(Table $table, array $row, $key)
 {
     $tableName = $table->getTableName();
     if ($key && $this->isInRecordMap($tableName, $key)) {
         return $this->getRecordIdFromMap($tableName, $key);
     }
     // keep foreign key relations in array to process after record has been saved
     $owningRelations = array();
     $beforeSaveGeneratedRecords = $this->generatedRecords;
     $this->generatedRecords = array();
     foreach ($row as $relationName => $value) {
         if ($table->hasRelation($relationName)) {
             $relation = $table->getRelation($relationName);
             if ($relation->isReferencedSide($relationName)) {
                 $row = $this->saveRecordOnReferencedRelation($row, $relation, $value);
             } else {
                 $owningRelations[$relationName] = array('related' => $value, 'relation' => $relation);
             }
             unset($row[$relationName]);
         }
     }
     $row = $this->saveRequiredRelations($table, $row);
     // save record
     $row = $this->fieldValueGenerator->getRandomRecordData($table->getFields(), $row);
     $record = $this->rm->getOrCreateRecord($tableName, $row);
     $this->rm->scheduleSave($record);
     $this->rm->commit();
     // keep record identifier in the record map
     $id = $record->getIdentifierAsString();
     if ($key !== null) {
         $this->recordAliasIdMap[$tableName][$key] = $id;
     }
     $this->generatedRecords = array_merge($beforeSaveGeneratedRecords, array(array('tableName' => $tableName, 'id' => $id)), $this->generatedRecords);
     // save owning relations
     foreach ($owningRelations as $relationData) {
         /** @var $relation Relation */
         $relation = $relationData['relation'];
         $relatedRows = $relationData['related'];
         $this->saveRecordsOnOwningRelation($relation, $relatedRows, $id);
     }
     return $id;
 }
Example #4
0
 /**
  * @param RecordManager $rm
  * @param Relation      $relation
  * @return string
  */
 protected function insertRequiredLocalRelationGraph(RecordManager $rm, Relation $relation)
 {
     $randomGenerator = new FieldValuesGenerator();
     $conn = $rm->getConnection();
     $refTableName = $relation->getReferencedTable();
     $refTable = $rm->getTable($refTableName);
     $refFields = $refTable->getFields();
     $data = array();
     // recursion: walk through all local relations that are required and handle this by calling this method with
     //  next relation
     $owningRelations = $refTable->getReferencedRelationsIndexedByOwningField();
     foreach ($owningRelations as $owningField => $owningRelation) {
         // check if field is required (default of matchType) and insert required related data
         if ($randomGenerator->matchType($refFields[$owningField])) {
             $data[$owningField] = $this->insertRequiredLocalRelationGraph($rm, $owningRelation);
         }
     }
     // insert a record and return its id
     $data = $randomGenerator->getRandomRecordData($refFields, $data);
     $conn->insert($refTable, $data);
     return $conn->getLastInsertId($refTableName);
 }
Example #5
0
 /**
  * @param  Table $table
  * @param  array $defaultFieldValues
  * @return Record
  */
 protected function getRecordWithRandomData(Table $table, array $defaultFieldValues = array())
 {
     $fieldValueGenerator = new FieldValuesGenerator();
     $recordData = $fieldValueGenerator->getRandomRecordData($table->getFields(), $defaultFieldValues);
     return $table->createRecord($recordData);
 }
 /**
  * @param array $recordData
  * @return \Dive\Record
  */
 private function createRecordWithRandomData(array $recordData)
 {
     $table = $this->rm->getTable('unique_constraint_test');
     $fieldValueGenerator = new FieldValuesGenerator();
     $recordData = $fieldValueGenerator->getRandomRecordData($table->getFields(), $recordData, FieldValuesGenerator::MAXIMAL_WITHOUT_AUTOINCREMENT);
     return $table->createRecord($recordData);
 }