/** * @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); }
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_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); }