public function test_that_a_null_one_to_many_relationship_is_hydrated_to_a_structured_array() { $mainResource = new Resource('my__0', 'myCoolResource', 'my_cool_table', 'my_cool_id'); $mainResourceField = new Field($mainResource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING); $mainResource->addField($mainResourceField); $referencedResource = new Resource('my__1', 'myHotResource', 'my_hot_table', 'my_hot_id'); $referencedResourceField = new Field($referencedResource, 'myHotField', 'my_hot_field', Field::TYPE_STRING); $referencedResource->addField($referencedResourceField); $referencedResourceField = new Field($referencedResource, 'myHotField2', 'my_hot_field_2', Field::TYPE_STRING); $referencedResource->addField($referencedResourceField); $relationship = new Relationship($mainResource, $referencedResource, 'one-to-many', 'cool_id'); $mainResource->addRelationship($relationship); $plainArray = array(array('my__0_myCoolField' => 'my cool value!', 'my__1' => null)); $expectedStructuredArray = array('myCoolResource' => array(array('myCoolField' => 'my cool value!', 'myHotResource' => array()))); $resultArray = $this->hydrator->hydrate($plainArray, $mainResource); $this->assertEquals($expectedStructuredArray, $resultArray); }
public function test_end_to_end_components_integration() { $yamlMapping = <<<EOT resource: alias: 'impiegati' table: 'employees' primary-key: 'id' fields: - name: 'name' alias: 'nome' - name: 'surname' alias: 'cognome' - name: 'code' alias: 'codice' - name: 'birthday' alias: 'dataNascita' type: 'date' - name: 'created' alias: 'creatoIl' type: 'datetime' - name: 'edited' alias: 'modificatoIl' type: 'datetime' relationships: - type: 'many-to-one' join-column: 'id_user_creator' resource: alias: 'utenteCreazione' table: 'users' primary-key: 'id' fields: - name: 'username' alias: 'Username' - name: 'firstname' alias: 'Nome' - name: 'lastname' alias: 'Cognome' - type: 'many-to-one' join-column: 'id_user_last_edit' resource: alias: 'utenteUltimaModifica' table: 'users' primary-key: 'id' fields: - name: 'username' alias: 'Username' - name: 'firstname' alias: 'Nome' - name: 'lastname' alias: 'Cognome' - type: 'many-to-one' join-column: 'id_contract' resource: alias: 'contratto' table: 'contracts' primary-key: 'id' fields: - name: 'name' alias: 'nome' - name: 'created' alias: 'creatoIl' type: 'datetime' - name: 'edited' alias: 'modificatoIl' type: 'datetime' relationships: - type: 'many-to-one' join-column: 'id_user_creator' resource: alias: 'utenteCreazione' table: 'users' primary-key: 'id' fields: - name: 'username' alias: 'Username' - name: 'firstname' alias: 'Nome' - name: 'lastname' alias: 'Cognome' - type: 'many-to-one' join-column: 'id_user_last_edit' resource: alias: 'utenteUltimaModifica' table: 'users' primary-key: 'id' fields: - name: 'username' alias: 'Username' - name: 'firstname' alias: 'Nome' - name: 'lastname' alias: 'Cognome' - type: 'one-to-many' join-column: 'id_employee' resource: alias: 'pagamenti' table: 'payments' primary-key: 'id' fields: - name: 'value' alias: 'Valore' type: 'number' relationships: - type: 'many-to-one' join-column: 'id_bank' resource: alias: 'banca' table: 'banks' primary-key: 'id' fields: - name: 'name' alias: 'Nome' EOT; $parser = new YamlMappingParser(); $resource = $parser->parse($yamlMapping); $dbalQueryBuilder = new DBALQueryBuilder(); $databaseConf = new DatabaseConfiguration(); $databaseConf->setDatabaseName($GLOBALS['DB_DBNAME']); $databaseConf->setDriver('pdo_mysql'); $databaseConf->setHost($GLOBALS['DB_HOST']); $databaseConf->setPassword($GLOBALS['DB_PASSWD']); $databaseConf->setPort($GLOBALS['DB_PORT']); $databaseConf->setUsername($GLOBALS['DB_USER']); $queryExecutor = new DBALQueryExecutor($databaseConf); $dataExtractor = new DataExtractor($dbalQueryBuilder, $queryExecutor); $plainData = $dataExtractor->extractData($resource); $dataHydrator = new ArrayHydrator(new FieldHydrationConcreteFactory()); $hydratedData = $dataHydrator->hydrate($plainData, $resource); $expectedData = array('impiegati' => array(0 => array('nome' => 'Mario', 'cognome' => 'Rossi', 'codice' => 'ABC002', 'dataNascita' => new \DateTime('1987-04-07'), 'creatoIl' => new \DateTime('2014-02-10 14:41:23'), 'modificatoIl' => new \DateTime('2014-02-10 14:44:59'), 'utenteCreazione' => array('Username' => 'g.white', 'Nome' => 'Gabriel', 'Cognome' => 'White'), 'utenteUltimaModifica' => array('Username' => 'admin', 'Nome' => 'Mark', 'Cognome' => 'Green'), 'contratto' => array('nome' => 'full-time', 'creatoIl' => new \DateTime('2014-02-01 10:29:50'), 'modificatoIl' => new \DateTime('2014-02-01 10:29:59'), 'utenteCreazione' => array('Username' => 'admin', 'Nome' => 'Mark', 'Cognome' => 'Green'), 'utenteUltimaModifica' => array('Username' => 'g.white', 'Nome' => 'Gabriel', 'Cognome' => 'White')), 'pagamenti' => array(array('Valore' => 1000.0, 'banca' => array('Nome' => 'global bank')), array('Valore' => 2000.0, 'banca' => array('Nome' => 'global bank')), array('Valore' => 3000.0, 'banca' => array('Nome' => 'global bank')))), 1 => array('nome' => 'Giovanni', 'cognome' => 'Verdi', 'codice' => null, 'dataNascita' => null, 'creatoIl' => new \DateTime('2014-02-10 14:50:23'), 'modificatoIl' => null, 'utenteCreazione' => array('Username' => 'admin', 'Nome' => 'Mark', 'Cognome' => 'Green'), 'utenteUltimaModifica' => null, 'contratto' => array('nome' => 'intern', 'creatoIl' => new \DateTime('2014-02-01 10:29:12'), 'modificatoIl' => null, 'utenteCreazione' => array('Username' => 'admin', 'Nome' => 'Mark', 'Cognome' => 'Green'), 'utenteUltimaModifica' => null), 'pagamenti' => array(array('Valore' => 1500, 'banca' => array('Nome' => 'money back bank')))))); $this->assertEquals($expectedData, $hydratedData); }