예제 #1
0
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage cannot find field for alias 'myUnknownField'
  */
 public function test_that_getting_a_field_by_unknown_alias_throws_exception()
 {
     $resource = new Resource('my__0', 'myCoolResource', 'my_cool_table', 'my_cool_id');
     $field = new Field($resource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING);
     $resource->addField($field);
     $this->assertEquals($field, $resource->getFieldByAlias('myUnknownField'));
 }
 /**
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage relationship must be of type one-to-many
  */
 public function test_that_to_many_queries_without_one_to_many_relationship_throws_exception()
 {
     $mainResource = new Resource('my__0', 'myCoolResource', 'my_cool_table', 'id');
     $mainResourceField = new Field($mainResource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING);
     $mainResource->addField($mainResourceField);
     $referencedResource = new Resource('my__1', 'myHotResource', 'my_hot_table', 'id');
     $referencedResourceField = new Field($referencedResource, 'myHotField', 'my_hot_field', Field::TYPE_STRING);
     $referencedResource->addField($referencedResourceField);
     $relationship = new Relationship($mainResource, $referencedResource, Relationship::TYPE_MANY_TO_ONE, 'hot_id');
     $mainResource->addRelationship($relationship);
     $generatedToManySql = $this->dbalQueryBuilder->buildToManyQueries($relationship);
 }
예제 #3
0
 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);
 }
예제 #4
0
 public function test_data_extractor_with_two_to_many_resource()
 {
     $rootResource = new Resource('my__1', 'myCoolResource', 'my_cool_table', 'id');
     $rootField = new Field($rootResource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING);
     $rootResource->addField($rootField);
     $referencedResource = new Resource('my__2', 'myHotResource', 'my_hot_table', 'id');
     $coolField = new Field($referencedResource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING);
     $referencedResource->addField($coolField);
     $relationship = new Relationship($rootResource, $referencedResource, 'one-to-many', 'cool_id');
     $rootResource->addRelationship($relationship);
     $thirdResource = new Resource('my__3', 'myThirdResource', 'my_third_table', 'id');
     $thirdField = new Field($thirdResource, 'myThirdField', 'my_third_field', Field::TYPE_STRING);
     $thirdResource->addField($thirdField);
     $thirdRelationship = new Relationship($rootResource, $thirdResource, 'one-to-many', 'cool_id');
     $rootResource->addRelationship($thirdRelationship);
     $mainSql = 'select my__1.id as my__1_id, my__1.my_cool_field as my__1_myCoolField from my_cool_table my__1';
     $mainData = array(array('my__1_id' => 1, 'my__1_myCoolField' => 'hello'), array('my__1_id' => 2, 'my__1_myCoolField' => 'world!'));
     $toManyData1 = array(array('my__2_id' => 1, 'my__2_myHotField' => 'clean'), array('my__2_id' => 2, 'my__2_myHotField' => 'code'));
     $toManyData2 = array(array('my__2_id' => 5, 'my__2_myHotField' => 'tdd'), array('my__2_id' => 6, 'my__2_myHotField' => 'rulez'));
     $thirdToManyData = array(array('my__3_id' => 1, 'my__3_myThirdField' => 'ugly'), array('my__3_id' => 2, 'my__3_myThirdField' => 'bugs'));
     $thirdToManyData2 = array(array('my__3_id' => 3, 'my__3_myThirdField' => 'fix'), array('my__3_id' => 4, 'my__3_myThirdField' => 'me'));
     $toManySqls = 'select my__2.id as my__2_id, my__2.my_hot_field as my__2_myHotField from my_hot_table my__2 where my__2.cool_id = :my__1_id';
     $toManySqlsThird = 'select my__3.id as my__3_id, my__3.my_third_field as my__3_myThirdField from my_third_table my__3 where my__3.cool_id = :my__1_id';
     $queryBuilder = $this->getMock('\\FlyRRM\\QueryBuilding\\QueryBuilder');
     $queryBuilder->expects($this->at(0))->method('buildQuery')->with($this->equalTo($rootResource))->will($this->returnValue($mainSql));
     $queryBuilder->expects($this->at(1))->method('buildToManyQueries')->with($this->equalTo($relationship))->will($this->returnValue($toManySqls));
     $queryBuilder->expects($this->at(2))->method('buildToManyQueries')->with($this->equalTo($thirdRelationship))->will($this->returnValue($toManySqlsThird));
     $queryExecutor = $this->getMock('\\FlyRRM\\QueryExecution\\QueryExecutor');
     $queryExecutor->expects($this->at(0))->method('executeQuery')->with($this->equalTo($mainSql))->will($this->returnValue($mainData));
     $queryExecutor->expects($this->at(1))->method('executeQuery')->with($this->equalTo($toManySqls), $this->equalTo(array(':my__1_id' => 1)))->will($this->returnValue($toManyData1));
     $queryExecutor->expects($this->at(2))->method('executeQuery')->with($this->equalTo($toManySqls), $this->equalTo(array(':my__1_id' => 2)))->will($this->returnValue($toManyData2));
     $queryExecutor->expects($this->at(3))->method('executeQuery')->with($this->equalTo($toManySqlsThird), $this->equalTo(array(':my__1_id' => 1)))->will($this->returnValue($thirdToManyData));
     $queryExecutor->expects($this->at(4))->method('executeQuery')->with($this->equalTo($toManySqlsThird), $this->equalTo(array(':my__1_id' => 2)))->will($this->returnValue($thirdToManyData2));
     $dataExtractor = new DataExtractor($queryBuilder, $queryExecutor);
     $extractedData = $dataExtractor->extractData($rootResource);
     $expectedData = $mainData;
     $expectedData[0]['my__2'] = $toManyData1;
     $expectedData[1]['my__2'] = $toManyData2;
     $expectedData[0]['my__3'] = $thirdToManyData;
     $expectedData[1]['my__3'] = $thirdToManyData2;
     $this->assertEquals($expectedData, $extractedData);
 }
 public function test_that_a_structured_data_with_nested_one_to_many_relationship_is_formatted()
 {
     $mainResource = new Resource('my__0', 'myCoolResource', 'my_cool_table', 'id');
     $stringField = new Field($mainResource, 'myCoolField', 'my_cool_field', Field::TYPE_STRING);
     $mainResource->addField($stringField);
     $referencedResource = new Resource('my__1', 'myHotResource', 'my_hot_resource', 'id');
     $dateField = new Field($referencedResource, 'myHotField', 'my_hot_field', Field::TYPE_DATE, 'd/m/Y');
     $referencedResource->addField($dateField);
     $relationship = new Relationship($mainResource, $referencedResource, 'one-to-many', 'cool_id');
     $mainResource->addRelationship($relationship);
     $thirdResource = new Resource('my__2', 'myThirdResource', 'my_third_resource', 'id');
     $thirdField = new Field($thirdResource, 'myThirdField', 'my_third_field', Field::TYPE_NUMBER);
     $thirdResource->addField($thirdField);
     $thirdRelationship = new Relationship($referencedResource, $thirdResource, 'one-to-many', 'hot_id');
     $referencedResource->addRelationship($thirdRelationship);
     $structuredData = array('myCoolResource' => array(array('myCoolField' => 'my cool value!', 'myHotResource' => array(array('myHotField' => new \DateTime('2014-02-18'), 'myThirdResource' => array(array('myThirdField' => 10), array('myThirdField' => 20), array('myThirdField' => 30))), array('myHotField' => new \DateTime('2014-02-19'), 'myThirdResource' => array(array('myThirdField' => 10.1))), array('myHotField' => new \DateTime('2014-02-20'), 'myThirdResource' => array())))));
     $expectedData = array('myCoolResource' => array(array('myCoolField' => 'my cool value!', 'myHotResource' => array(array('myHotField' => '18/02/2014', 'myThirdResource' => array(array('myThirdField' => 10), array('myThirdField' => 20), array('myThirdField' => 30))), array('myHotField' => '19/02/2014', 'myThirdResource' => array(array('myThirdField' => 10.1))), array('myHotField' => '20/02/2014', 'myThirdResource' => array())))));
     $outputtedData = $this->arrayFormatter->format($structuredData, $mainResource);
     $this->assertEquals($expectedData, $outputtedData);
 }