2009-08-11 01:34:32 +02:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* This test class will focus on the when an search filter contains relational component,
|
|
|
|
* such as has_one, has_many, many_many, the SearchFilter::applyRelation($query) will add
|
|
|
|
* the right "join" clauses to $query without the component parent class missing from
|
|
|
|
* "join" chain.
|
|
|
|
*
|
|
|
|
* @package sapphire
|
|
|
|
* @subpackage testing
|
|
|
|
*/
|
|
|
|
class SearchFilterApplyRelationTest extends SapphireTest{
|
2011-03-30 08:49:11 +02:00
|
|
|
static $fixture_file = 'SearchFilterApplyRelationTest.yml';
|
2009-08-11 01:34:32 +02:00
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
protected $extraDataObjects = array(
|
|
|
|
'SearchFilterApplyRelationTest_DO',
|
|
|
|
'SearchFilterApplyRelationTest_HasOneParent',
|
|
|
|
'SearchFilterApplyRelationTest_HasOneChild',
|
|
|
|
'SearchFilterApplyRelationTest_HasOneGrantChild',
|
|
|
|
'SearchFilterApplyRelationTest_HasManyParent',
|
|
|
|
'SearchFilterApplyRelationTest_HasManyChild',
|
|
|
|
'SearchFilterApplyRelationTest_HasManyGrantChild',
|
|
|
|
'SearchFilterApplyRelationTest_ManyManyParent',
|
|
|
|
'SearchFilterApplyRelationTest_ManyManyChild',
|
|
|
|
'SearchFilterApplyRelationTest_ManyManyGrantChild',
|
|
|
|
);
|
2009-08-11 01:34:32 +02:00
|
|
|
|
|
|
|
function testApplyRelationHasOne(){
|
|
|
|
|
|
|
|
$all = singleton("SearchFilterApplyRelationTest_DO");
|
|
|
|
$context = $all->getDefaultSearchContext();
|
|
|
|
|
|
|
|
$filter = new ExactMatchFilter("SearchFilterApplyRelationTest_HasOneGrantChild.Title");
|
|
|
|
$context->setFilters(null);
|
|
|
|
$context->addFilter($filter);
|
|
|
|
$params = array(
|
|
|
|
"Title" => "I am has_one object",
|
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(2, $results->count());
|
|
|
|
}
|
|
|
|
|
|
|
|
function testApplyRelationHasMany(){
|
2009-10-02 00:20:04 +02:00
|
|
|
$do1 = $this->objFromFixture('SearchFilterApplyRelationTest_DO', 'do1');
|
|
|
|
$do2 = $this->objFromFixture('SearchFilterApplyRelationTest_DO', 'do2');
|
|
|
|
|
2009-08-11 01:34:32 +02:00
|
|
|
$all = singleton("SearchFilterApplyRelationTest_DO");
|
|
|
|
$context = $all->getDefaultSearchContext();
|
|
|
|
|
|
|
|
$filter = new PartialMatchFilter("SearchFilterApplyRelationTest_HasManyGrantChildren.Title");
|
|
|
|
$context->setFilters(null);
|
|
|
|
$context->addFilter($filter);
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"SearchFilterApplyRelationTest_HasManyGrantChildren__Title" => "I am has_many object1",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(1, $results->count());
|
2009-10-02 00:20:04 +02:00
|
|
|
$this->assertEquals(array($do1->ID), $results->column('ID'));
|
2009-08-11 01:34:32 +02:00
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"SearchFilterApplyRelationTest_HasManyGrantChildren__Title" => "I am has_many object3",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(1, $results->count());
|
2009-10-02 00:20:04 +02:00
|
|
|
$this->assertEquals(array($do2->ID), $results->column('ID'));
|
2009-08-11 01:34:32 +02:00
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"SearchFilterApplyRelationTest_HasManyGrantChildren__Title" => "I am has_many object",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(2, $results->count());
|
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"SearchFilterApplyRelationTest_HasManyGrantChildren__Title" => "not exist",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(0, $results->count());
|
|
|
|
}
|
|
|
|
|
|
|
|
function testApplyRelationManyMany(){
|
|
|
|
$all = singleton("SearchFilterApplyRelationTest_DO");
|
|
|
|
$context = $all->getDefaultSearchContext();
|
|
|
|
|
2009-08-11 02:11:17 +02:00
|
|
|
$filter = new PartialMatchFilter("ManyManyGrantChildren.Title");
|
2009-08-11 01:34:32 +02:00
|
|
|
$context->setFilters(null);
|
|
|
|
$context->addFilter($filter);
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"ManyManyGrantChildren__Title" => "I am many_many object1",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(2, $results->count());
|
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"ManyManyGrantChildren__Title" => "I am many_many object2",
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(2, $results->count());
|
2009-08-11 02:11:17 +02:00
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"ManyManyGrantChildren__Title" => "I am many_many object",
|
2009-08-11 02:11:17 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(2, $results->count());
|
|
|
|
|
|
|
|
$params = array(
|
2009-09-16 00:00:08 +02:00
|
|
|
"ManyManyGrantChildren__Title" => "not exist",
|
2009-08-11 02:11:17 +02:00
|
|
|
);
|
|
|
|
$results = $context->getResults($params);
|
|
|
|
$this->assertEquals(0, $results->count());
|
2009-08-11 01:34:32 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_DO extends DataObject implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
static $has_one = array(
|
|
|
|
'SearchFilterApplyRelationTest_HasOneGrantChild' => 'SearchFilterApplyRelationTest_HasOneGrantChild'
|
|
|
|
);
|
|
|
|
|
|
|
|
static $has_many = array(
|
|
|
|
'SearchFilterApplyRelationTest_HasManyGrantChildren' => 'SearchFilterApplyRelationTest_HasManyGrantChild'
|
|
|
|
);
|
|
|
|
|
|
|
|
static $many_many = array(
|
2009-08-11 02:11:17 +02:00
|
|
|
'ManyManyGrantChildren' => 'SearchFilterApplyRelationTest_ManyManyGrantChild'
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_HasOneParent extends DataObject implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
static $db = array(
|
|
|
|
"Title" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_HasOneChild extends SearchFilterApplyRelationTest_HasOneParent implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
// This is to create an seperate Table only.
|
|
|
|
static $db = array(
|
|
|
|
"ChildField" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_HasOneGrantChild extends SearchFilterApplyRelationTest_HasOneChild implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
// This is to create an seperate Table only.
|
|
|
|
static $db = array(
|
|
|
|
"GrantChildField" => "Varchar"
|
|
|
|
);
|
|
|
|
static $has_many = array(
|
|
|
|
"SearchFilterApplyRelationTest_DOs" => "SearchFilterApplyRelationTest_DO"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_HasManyParent extends DataObject implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
static $db = array(
|
|
|
|
"Title" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_HasManyChild extends SearchFilterApplyRelationTest_HasManyParent implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
// This is to create an seperate Table only.
|
|
|
|
static $db = array(
|
|
|
|
"ChildField" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
class SearchFilterApplyRelationTest_HasManyGrantChild extends SearchFilterApplyRelationTest_HasManyChild{
|
|
|
|
static $has_one = array(
|
|
|
|
"SearchFilterApplyRelationTest_DO" => "SearchFilterApplyRelationTest_DO"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
class SearchFilterApplyRelationTest_ManyManyParent extends DataObject implements TestOnly{
|
|
|
|
static $db = array(
|
|
|
|
"Title" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_ManyManyChild extends SearchFilterApplyRelationTest_ManyManyParent implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
// This is to create an seperate Table only.
|
|
|
|
static $db = array(
|
|
|
|
"ChildField" => "Varchar"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2010-04-12 04:03:16 +02:00
|
|
|
class SearchFilterApplyRelationTest_ManyManyGrantChild extends SearchFilterApplyRelationTest_ManyManyChild implements TestOnly {
|
2009-08-11 01:34:32 +02:00
|
|
|
// This is to create an seperate Table only.
|
|
|
|
static $db = array(
|
|
|
|
"GrantChildField" => "Varchar"
|
|
|
|
);
|
|
|
|
static $belongs_many_many = array(
|
2009-08-11 02:11:17 +02:00
|
|
|
"DOs" => "SearchFilterApplyRelationTest_DO"
|
2009-08-11 01:34:32 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|