<?php namespace SilverStripe\CMS\Tests\Search; use SilverStripe\Dev\SapphireTest; use SilverStripe\CMS\Model\SiteTree; use SilverStripe\Assets\File; use SilverStripe\ORM\DB; use SilverStripe\Core\Config\Config; use SilverStripe\ORM\Search\FulltextSearchable; class DatabaseSearchEngineTest extends SapphireTest { protected $usesDatabase = true; /** * @var bool InnoDB doesn't update indexes until transactions are committed */ protected $usesTransactions = false; public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); // Postgres doesn't refresh TSearch indexes when the schema changes after CREATE TABLE // MySQL will need a different table type if (static::$tempDB) { static::$tempDB->kill(); Config::modify(); } FulltextSearchable::enable(); static::$tempDB->build(); static::resetDBSchema(true); } /** * Validate that https://github.com/silverstripe/silverstripe-cms/issues/3212 is fixed */ public function testSearchEngineEscapeAs() { $page = new SiteTree(); $page->Title = "This page provides food as bar"; $page->write(); $page->publishRecursive(); $results = DB::get_conn()->searchEngine([ SiteTree::class, File::class ], "foo* as* bar*", 0, 100, "\"Relevance\" DESC", "", true); $this->assertCount(1, $results); $this->assertEquals( "This page provides food as bar", $results->First()->Title ); } }