mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-18 23:46:21 +02:00
e6b877df27
# Conflicts: # control/Director.php # control/HTTP.php # core/startup/ParameterConfirmationToken.php # docs/en/00_Getting_Started/01_Installation/05_Common_Problems.md # docs/en/00_Getting_Started/04_Directory_Structure.md # docs/en/00_Getting_Started/05_Coding_Conventions.md # docs/en/01_Tutorials/01_Building_A_Basic_Site.md # docs/en/01_Tutorials/02_Extending_A_Basic_Site.md # docs/en/01_Tutorials/03_Forms.md # docs/en/01_Tutorials/04_Site_Search.md # docs/en/01_Tutorials/05_Dataobject_Relationship_Management.md # docs/en/02_Developer_Guides/12_Search/01_Searchcontext.md # docs/en/02_Developer_Guides/13_i18n/index.md # docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/06_Javascript_Development.md # docs/en/03_Upgrading/index.md # docs/en/changelogs/index.md # docs/en/howto/customize-cms-menu.md # docs/en/howto/navigation-menu.md # docs/en/index.md # docs/en/installation/index.md # docs/en/installation/windows-manual-iis-6.md # docs/en/misc/contributing/code.md # docs/en/misc/contributing/issues.md # docs/en/misc/module-release-process.md # docs/en/reference/dataobject.md # docs/en/reference/execution-pipeline.md # docs/en/reference/grid-field.md # docs/en/reference/modeladmin.md # docs/en/reference/rssfeed.md # docs/en/reference/templates.md # docs/en/topics/commandline.md # docs/en/topics/debugging.md # docs/en/topics/email.md # docs/en/topics/forms.md # docs/en/topics/index.md # docs/en/topics/module-development.md # docs/en/topics/modules.md # docs/en/topics/page-type-templates.md # docs/en/topics/page-types.md # docs/en/topics/search.md # docs/en/topics/testing/index.md # docs/en/topics/testing/testing-guide-troubleshooting.md # docs/en/topics/theme-development.md # docs/en/tutorials/1-building-a-basic-site.md # docs/en/tutorials/2-extending-a-basic-site.md # docs/en/tutorials/3-forms.md # docs/en/tutorials/4-site-search.md # docs/en/tutorials/5-dataobject-relationship-management.md # docs/en/tutorials/building-a-basic-site.md # docs/en/tutorials/dataobject-relationship-management.md # docs/en/tutorials/extending-a-basic-site.md # docs/en/tutorials/forms.md # docs/en/tutorials/index.md # docs/en/tutorials/site-search.md # main.php # model/SQLQuery.php # security/ChangePasswordForm.php # security/MemberLoginForm.php # tests/control/ControllerTest.php # tests/core/startup/ParameterConfirmationTokenTest.php # tests/model/SQLQueryTest.php # tests/security/SecurityTest.php # tests/view/SSViewerTest.php # view/SSTemplateParser.php # view/SSTemplateParser.php.inc # view/SSViewer.php
121 lines
4.2 KiB
PHP
Executable File
121 lines
4.2 KiB
PHP
Executable File
<?php
|
|
|
|
class FulltextFilterTest extends SapphireTest {
|
|
|
|
protected $extraDataObjects = array(
|
|
'FulltextFilterTest_DataObject'
|
|
);
|
|
|
|
protected static $fixture_file = "FulltextFilterTest.yml";
|
|
|
|
public function testFilter() {
|
|
if(DB::get_conn() instanceof MySQLDatabase) {
|
|
$baseQuery = FulltextFilterTest_DataObject::get();
|
|
$this->assertEquals(3, $baseQuery->count(), "FulltextFilterTest_DataObject count does not match.");
|
|
|
|
// First we'll text the 'SearchFields' which has been set using an array
|
|
$search = $baseQuery->filter("SearchFields:fulltext", 'SilverStripe');
|
|
$this->assertEquals(1, $search->count());
|
|
|
|
$search = $baseQuery->exclude("SearchFields:fulltext", "SilverStripe");
|
|
$this->assertEquals(2, $search->count());
|
|
|
|
// Now we'll run the same tests on 'OtherSearchFields' which should yield the same resutls
|
|
// but has been set using a string.
|
|
$search = $baseQuery->filter("OtherSearchFields:fulltext", 'SilverStripe');
|
|
$this->assertEquals(1, $search->count());
|
|
|
|
$search = $baseQuery->exclude("OtherSearchFields:fulltext", "SilverStripe");
|
|
$this->assertEquals(2, $search->count());
|
|
|
|
// Search on a single field
|
|
$search = $baseQuery->filter("ColumnE:fulltext", 'Dragons');
|
|
$this->assertEquals(1, $search->count());
|
|
|
|
$search = $baseQuery->exclude("ColumnE:fulltext", "Dragons");
|
|
$this->assertEquals(2, $search->count());
|
|
} else {
|
|
$this->markTestSkipped("FulltextFilter only supports MySQL syntax.");
|
|
}
|
|
}
|
|
|
|
public function testGenerateQuery() {
|
|
// Test if columns have table identifier
|
|
$filter1 = new FulltextFilter('SearchFields', 'SilverStripe');
|
|
$filter1->setModel('FulltextFilterTest_DataObject');
|
|
$query1 = FulltextFilterTest_DataObject::get()->dataQuery();
|
|
$filter1->apply($query1);
|
|
$this->assertNotEquals('"ColumnA","ColumnB"', $filter1->getDbName());
|
|
$this->assertNotEquals(
|
|
array("MATCH (\"ColumnA\",\"ColumnB\") AGAINST ('SilverStripe')"),
|
|
$query1->query()->getWhere()
|
|
);
|
|
|
|
// Test SearchFields
|
|
$filter1 = new FulltextFilter('SearchFields', 'SilverStripe');
|
|
$filter1->setModel('FulltextFilterTest_DataObject');
|
|
$query1 = FulltextFilterTest_DataObject::get()->dataQuery();
|
|
$filter1->apply($query1);
|
|
$this->assertEquals('"FulltextFilterTest_DataObject"."ColumnA","FulltextFilterTest_DataObject"."ColumnB"', $filter1->getDbName());
|
|
$this->assertEquals(
|
|
array(array(
|
|
"MATCH (\"FulltextFilterTest_DataObject\".\"ColumnA\",\"FulltextFilterTest_DataObject\".\"ColumnB\") AGAINST (?)" => array('SilverStripe')
|
|
)),
|
|
$query1->query()->getWhere()
|
|
);
|
|
|
|
// Test Other searchfields
|
|
$filter2 = new FulltextFilter('OtherSearchFields', 'SilverStripe');
|
|
$filter2->setModel('FulltextFilterTest_DataObject');
|
|
$query2 = FulltextFilterTest_DataObject::get()->dataQuery();
|
|
$filter2->apply($query2);
|
|
$this->assertEquals('"FulltextFilterTest_DataObject"."ColumnC","FulltextFilterTest_DataObject"."ColumnD"', $filter2->getDbName());
|
|
$this->assertEquals(
|
|
array(array(
|
|
"MATCH (\"FulltextFilterTest_DataObject\".\"ColumnC\",\"FulltextFilterTest_DataObject\".\"ColumnD\") AGAINST (?)" => array('SilverStripe')
|
|
)),
|
|
$query2->query()->getWhere()
|
|
);
|
|
|
|
// Test fallback to single field
|
|
$filter3 = new FulltextFilter('ColumnA', 'SilverStripe');
|
|
$filter3->setModel('FulltextFilterTest_DataObject');
|
|
$query3 = FulltextFilterTest_DataObject::get()->dataQuery();
|
|
$filter3->apply($query3);
|
|
$this->assertEquals('"FulltextFilterTest_DataObject"."ColumnA"', $filter3->getDbName());
|
|
$this->assertEquals(
|
|
array(array(
|
|
"MATCH (\"FulltextFilterTest_DataObject\".\"ColumnA\") AGAINST (?)" => array('SilverStripe')
|
|
)),
|
|
$query3->query()->getWhere()
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
class FulltextFilterTest_DataObject extends DataObject implements TestOnly {
|
|
|
|
private static $db = array(
|
|
"ColumnA" => "Varchar(255)",
|
|
"ColumnB" => "HTMLText",
|
|
"ColumnC" => "Varchar(255)",
|
|
"ColumnD" => "HTMLText",
|
|
"ColumnE" => 'Varchar(255)'
|
|
);
|
|
|
|
private static $indexes = array(
|
|
'SearchFields' => array(
|
|
'type' => 'fulltext',
|
|
'name' => 'SearchFields',
|
|
'value' => '"ColumnA", "ColumnB"',
|
|
),
|
|
'OtherSearchFields' => 'fulltext ("ColumnC", "ColumnD")',
|
|
'SingleIndex' => 'fulltext ("ColumnE")'
|
|
);
|
|
|
|
private static $create_table_options = array(
|
|
"MySQLDatabase" => "ENGINE=MyISAM",
|
|
);
|
|
|
|
} |