mirror of
https://github.com/silverstripe/silverstripe-fulltextsearch
synced 2024-10-22 14:05:29 +02:00
Second push of Test changes + namespacing
This commit is contained in:
parent
a5588fa5a0
commit
0ebf6e6220
@ -1,6 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Solr\Reindex\Handlers;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\FullTextSearch\Solr\Solr;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
/**
|
||||
* Base class for re-indexing of solr content
|
||||
|
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Solr\Reindex\Handlers;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
/**
|
||||
* Provides interface for queueing a solr reindex
|
||||
|
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Solr\Reindex\Handlers;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
/**
|
||||
* Invokes an immediate reindex
|
||||
|
@ -1,6 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Solr\Reindex\Handlers;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
if (!interface_exists('QueuedJob')) {
|
||||
return;
|
||||
|
@ -1,5 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests;
|
||||
|
||||
use SilverStripe\FullTextSearch\Tests\Solr4ServiceTest\Solr4ServiceTest_RecordingService;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
|
||||
/**
|
||||
@ -18,7 +21,7 @@ class Solr4ServiceTest extends SapphireTest
|
||||
|
||||
protected function getMockDocument($id)
|
||||
{
|
||||
$document = new Apache_Solr_Document();
|
||||
$document = new \Apache_Solr_Document();
|
||||
$document->setField('id', $id);
|
||||
$document->setField('title', "Item $id");
|
||||
return $document;
|
||||
@ -60,16 +63,3 @@ class Solr4ServiceTest extends SapphireTest
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Solr4ServiceTest_RecordingService extends Solr4Service_Core
|
||||
{
|
||||
protected function _sendRawPost($url, $rawPost, $timeout = false, $contentType = 'text/xml; charset=UTF-8')
|
||||
{
|
||||
return $rawPost;
|
||||
}
|
||||
|
||||
protected function _sendRawGet($url, $timeout = false)
|
||||
{
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
19
tests/Solr4ServiceTest/Solr4ServiceTest_RecordingService.php
Normal file
19
tests/Solr4ServiceTest/Solr4ServiceTest_RecordingService.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\Solr4ServiceTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\Solr4Service_Core;
|
||||
|
||||
class Solr4ServiceTest_RecordingService extends Solr4Service_Core
|
||||
{
|
||||
protected function _sendRawPost($url, $rawPost, $timeout = false, $contentType = 'text/xml; charset=UTF-8')
|
||||
{
|
||||
return $rawPost;
|
||||
}
|
||||
|
||||
protected function _sendRawGet($url, $timeout = false)
|
||||
{
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrIndexSubsitesTest\SolrIndexSubsitesTest_Index;
|
||||
|
||||
if (class_exists('Phockito')) {
|
||||
Phockito::include_hamcrest(false);
|
||||
@ -11,7 +12,7 @@ if (class_exists('Phockito')) {
|
||||
*/
|
||||
class SolrIndexSubsitesTest extends SapphireTest {
|
||||
|
||||
public static $fixture_file = 'SolrIndexSubsitesTest.yml';
|
||||
public static $fixture_file = 'SolrIndexSubsitesTest/SolrIndexSubsitesTest.yml';
|
||||
|
||||
/**
|
||||
* @var SolrIndexSubsitesTest_Index
|
||||
@ -245,13 +246,3 @@ class SolrIndexSubsitesTest extends SapphireTest {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SolrIndexSubsitesTest_Index extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('File');
|
||||
$this->addClass('SiteTree');
|
||||
$this->addAllFulltextFields();
|
||||
}
|
||||
}
|
||||
|
15
tests/SolrIndexSubsitesTest/SolrIndexSubsitesTest_Index.php
Normal file
15
tests/SolrIndexSubsitesTest/SolrIndexSubsitesTest_Index.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrIndexSubsitesTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrIndexSubsitesTest_Index extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('File');
|
||||
$this->addClass('SiteTree');
|
||||
$this->addAllFulltextFields();
|
||||
}
|
||||
}
|
@ -1,6 +1,10 @@
|
||||
<?php
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrIndexTest\SolrIndexTest_FakeIndex;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrIndexTest\SolrIndexTest_FakeIndex2;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrIndexTest\SolrIndexTest_BoostedIndex;
|
||||
|
||||
|
||||
class SolrIndexTest extends SapphireTest
|
||||
{
|
||||
@ -311,54 +315,3 @@ class SolrIndexTest extends SapphireTest
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class SolrIndexTest_FakeIndex extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
|
||||
$this->addFilterField('Field1');
|
||||
$this->addFilterField('MyDate', 'Date');
|
||||
$this->addFilterField('HasOneObject.Field1');
|
||||
$this->addFilterField('HasManyObjects.Field1');
|
||||
$this->addFilterField('ManyManyObjects.Field1');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class SolrIndexTest_FakeIndex2 extends SolrIndex
|
||||
{
|
||||
protected function getStoredDefault()
|
||||
{
|
||||
// Override isDev defaulting to stored
|
||||
return 'false';
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
$this->addFilterField('MyDate', 'Date');
|
||||
$this->addFilterField('HasOneObject.Field1');
|
||||
$this->addFilterField('HasManyObjects.Field1');
|
||||
$this->addFilterField('ManyManyObjects.Field1');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class SolrIndexTest_BoostedIndex extends SolrIndex
|
||||
{
|
||||
protected function getStoredDefault()
|
||||
{
|
||||
// Override isDev defaulting to stored
|
||||
return 'false';
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
$this->addAllFulltextFields();
|
||||
$this->setFieldBoosting('SearchUpdaterTest_Container_Field1', 1.5);
|
||||
$this->addBoostedField('Field2', null, array(), 2.1);
|
||||
}
|
||||
}
|
||||
|
22
tests/SolrIndexTest/SolrIndexTest_BoostedIndex.php
Normal file
22
tests/SolrIndexTest/SolrIndexTest_BoostedIndex.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrIndexTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrIndexTest_BoostedIndex extends SolrIndex
|
||||
{
|
||||
protected function getStoredDefault()
|
||||
{
|
||||
// Override isDev defaulting to stored
|
||||
return 'false';
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
$this->addAllFulltextFields();
|
||||
$this->setFieldBoosting('SearchUpdaterTest_Container_Field1', 1.5);
|
||||
$this->addBoostedField('Field2', null, array(), 2.1);
|
||||
}
|
||||
}
|
19
tests/SolrIndexTest/SolrIndexTest_FakeIndex.php
Normal file
19
tests/SolrIndexTest/SolrIndexTest_FakeIndex.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrIndexTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrIndexTest_FakeIndex extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
|
||||
$this->addFilterField('Field1');
|
||||
$this->addFilterField('MyDate', 'Date');
|
||||
$this->addFilterField('HasOneObject.Field1');
|
||||
$this->addFilterField('HasManyObjects.Field1');
|
||||
$this->addFilterField('ManyManyObjects.Field1');
|
||||
}
|
||||
}
|
23
tests/SolrIndexTest/SolrIndexTest_FakeIndex2.php
Normal file
23
tests/SolrIndexTest/SolrIndexTest_FakeIndex2.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrIndexTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrIndexTest_FakeIndex2 extends SolrIndex
|
||||
{
|
||||
protected function getStoredDefault()
|
||||
{
|
||||
// Override isDev defaulting to stored
|
||||
return 'false';
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchUpdaterTest_Container');
|
||||
$this->addFilterField('MyDate', 'Date');
|
||||
$this->addFilterField('HasOneObject.Field1');
|
||||
$this->addFilterField('HasManyObjects.Field1');
|
||||
$this->addFilterField('ManyManyObjects.Field1');
|
||||
}
|
||||
}
|
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrVersionedTest\SolrDocumentMatcher;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrVersionedTest\SolrIndexVersionedTest_Object;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrVersionedTest\SolrVersionedTest_Index;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
if (class_exists('Phockito')) {
|
||||
Phockito::include_hamcrest(false);
|
||||
@ -173,65 +175,3 @@ class SolrIndexVersionedTest extends SapphireTest
|
||||
->deleteById($this->getExpectedDocumentId($id, 'Live'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class SolrVersionedTest_Index extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchVariantVersionedTest_Item');
|
||||
$this->addClass('SolrIndexVersionedTest_Object');
|
||||
$this->addFilterField('TestText');
|
||||
$this->addFulltextField('Content');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Non-sitetree versioned dataobject
|
||||
*/
|
||||
class SolrIndexVersionedTest_Object extends DataObject implements TestOnly {
|
||||
|
||||
private static $extensions = array(
|
||||
'Versioned'
|
||||
);
|
||||
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar',
|
||||
'Content' => 'Text',
|
||||
'TestText' => 'Varchar',
|
||||
);
|
||||
}
|
||||
|
||||
if (!class_exists('Phockito')) {
|
||||
return;
|
||||
}
|
||||
|
||||
class SolrDocumentMatcher extends Hamcrest_BaseMatcher
|
||||
{
|
||||
protected $properties;
|
||||
|
||||
public function __construct($properties)
|
||||
{
|
||||
$this->properties = $properties;
|
||||
}
|
||||
|
||||
public function describeTo(\Hamcrest_Description $description)
|
||||
{
|
||||
$description->appendText('Apache_Solr_Document with properties '.var_export($this->properties, true));
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
if (! ($item instanceof Apache_Solr_Document)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($this->properties as $key => $value) {
|
||||
if ($item->{$key} != $value) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
39
tests/SolrIndexVersionedTest/SolrDocumentMatcher.php
Normal file
39
tests/SolrIndexVersionedTest/SolrDocumentMatcher.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrVersionedTest;
|
||||
|
||||
if (!class_exists('Phockito')) {
|
||||
return;
|
||||
}
|
||||
|
||||
Phockito::include_hamcrest(false);
|
||||
|
||||
class SolrDocumentMatcher extends Hamcrest_BaseMatcher
|
||||
{
|
||||
protected $properties;
|
||||
|
||||
public function __construct($properties)
|
||||
{
|
||||
$this->properties = $properties;
|
||||
}
|
||||
|
||||
public function describeTo(\Hamcrest_Description $description)
|
||||
{
|
||||
$description->appendText('Apache_Solr_Document with properties '.var_export($this->properties, true));
|
||||
}
|
||||
|
||||
public function matches($item)
|
||||
{
|
||||
if (! ($item instanceof Apache_Solr_Document)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($this->properties as $key => $value) {
|
||||
if ($item->{$key} != $value) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrVersionedTest;
|
||||
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
|
||||
/**
|
||||
* Non-sitetree versioned dataobject
|
||||
*/
|
||||
class SolrIndexVersionedTest_Object extends DataObject implements TestOnly {
|
||||
|
||||
private static $extensions = array(
|
||||
'Versioned'
|
||||
);
|
||||
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar',
|
||||
'Content' => 'Text',
|
||||
'TestText' => 'Varchar',
|
||||
);
|
||||
}
|
16
tests/SolrIndexVersionedTest/SolrVersionedTest_Index.php
Normal file
16
tests/SolrIndexVersionedTest/SolrVersionedTest_Index.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrVersionedTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrVersionedTest_Index extends SolrIndex
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SearchVariantVersionedTest_Item');
|
||||
$this->addClass('SolrIndexVersionedTest_Object');
|
||||
$this->addFilterField('TestText');
|
||||
$this->addFulltextField('Content');
|
||||
}
|
||||
}
|
@ -1,13 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use Monolog\Handler\HandlerInterface;
|
||||
use Monolog\Logger;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
if (class_exists('Phockito')) {
|
||||
Phockito::include_hamcrest(false);
|
||||
@ -287,280 +280,3 @@ class SolrReindexTest extends SapphireTest
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a wrapper for testing SolrReindexBase
|
||||
*/
|
||||
class SolrReindexTest_TestHandler extends SolrReindexBase
|
||||
{
|
||||
public function processGroup(
|
||||
LoggerInterface $logger, SolrIndex $indexInstance, $state, $class, $groups, $group, $taskName
|
||||
) {
|
||||
$indexName = $indexInstance->getIndexName();
|
||||
$stateName = json_encode($state);
|
||||
$logger->info("Called processGroup with {$indexName}, {$stateName}, {$class}, group {$group} of {$groups}");
|
||||
}
|
||||
|
||||
public function triggerReindex(LoggerInterface $logger, $batchSize, $taskName, $classes = null)
|
||||
{
|
||||
$logger->info("Called triggerReindex");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class SolrReindexTest_Index extends SolrIndex implements TestOnly
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SolrReindexTest_Item');
|
||||
$this->addAllFulltextFields();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Does not have any variant extensions
|
||||
*/
|
||||
class SolrReindexTest_Item extends DataObject implements TestOnly
|
||||
{
|
||||
private static $extensions = array(
|
||||
'SolrReindexTest_ItemExtension'
|
||||
);
|
||||
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar(255)',
|
||||
'Variant' => 'Int(0)'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Select only records in the current variant
|
||||
*/
|
||||
class SolrReindexTest_ItemExtension extends DataExtension implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Filter records on the current variant
|
||||
*
|
||||
* @param SQLQuery $query
|
||||
* @param DataQuery $dataQuery
|
||||
*/
|
||||
public function augmentSQL(SilverStripe\ORM\Queries\SQLSelect $query, SilverStripe\ORM\DataQuery $dataQuery = NULL)
|
||||
{
|
||||
$variant = SolrReindexTest_Variant::get_current();
|
||||
if ($variant !== null && !$query->filtersOnID()) {
|
||||
$sqlVariant = Convert::raw2sql($variant);
|
||||
$query->addWhere("\"Variant\" = '{$sqlVariant}'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Dummy variant that selects items with field Varient matching the current value
|
||||
*
|
||||
* Variant states are 0 and 1, or null if disabled
|
||||
*/
|
||||
class SolrReindexTest_Variant extends SearchVariant implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Value of this variant (either null, 0, or 1)
|
||||
*
|
||||
* @var int|null
|
||||
*/
|
||||
protected static $current = null;
|
||||
|
||||
/**
|
||||
* Activate this variant
|
||||
*/
|
||||
public static function enable()
|
||||
{
|
||||
self::disable();
|
||||
|
||||
self::$current = 0;
|
||||
self::$variants = array(
|
||||
'SolrReindexTest_Variant' => singleton('SolrReindexTest_Variant')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable this variant and reset
|
||||
*/
|
||||
public static function disable()
|
||||
{
|
||||
self::$current = null;
|
||||
self::$variants = null;
|
||||
self::$class_variants = array();
|
||||
self::$call_instances = array();
|
||||
}
|
||||
|
||||
public function activateState($state)
|
||||
{
|
||||
self::set_current($state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current variant to the given state
|
||||
*
|
||||
* @param int $current 0, 1, 2, or null (disabled)
|
||||
*/
|
||||
public static function set_current($current)
|
||||
{
|
||||
self::$current = $current;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current state
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function get_current()
|
||||
{
|
||||
// Always use string values for states for consistent json_encode value
|
||||
if (isset(self::$current)) {
|
||||
return (string)self::$current;
|
||||
}
|
||||
}
|
||||
|
||||
public function alterDefinition($class, $index)
|
||||
{
|
||||
$self = get_class($this);
|
||||
|
||||
$this->addFilterField($index, '_testvariant', array(
|
||||
'name' => '_testvariant',
|
||||
'field' => '_testvariant',
|
||||
'fullfield' => '_testvariant',
|
||||
'base' => ClassInfo::baseDataClass($class),
|
||||
'origin' => $class,
|
||||
'type' => 'Int',
|
||||
'lookup_chain' => array(array('call' => 'variant', 'variant' => $self, 'method' => 'currentState'))
|
||||
));
|
||||
}
|
||||
|
||||
public function alterQuery($query, $index)
|
||||
{
|
||||
// I guess just calling it _testvariant is ok?
|
||||
$query->filter('_testvariant', $this->currentState());
|
||||
}
|
||||
|
||||
public function appliesTo($class, $includeSubclasses)
|
||||
{
|
||||
return $class === 'SolrReindexTest_Item' ||
|
||||
($includeSubclasses && is_subclass_of($class, 'SolrReindexTest_Item', true));
|
||||
}
|
||||
|
||||
public function appliesToEnvironment()
|
||||
{
|
||||
// Set to null to disable
|
||||
return self::$current !== null;
|
||||
}
|
||||
|
||||
public function currentState()
|
||||
{
|
||||
return self::get_current();
|
||||
}
|
||||
|
||||
public function reindexStates()
|
||||
{
|
||||
// Always use string values for states for consistent json_encode value
|
||||
return array('0', '1', '2');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test logger for recording messages
|
||||
*/
|
||||
class SolrReindexTest_RecordingLogger extends Logger implements TestOnly
|
||||
{
|
||||
/**
|
||||
* @var SolrReindexTest_Handler
|
||||
*/
|
||||
protected $testHandler = null;
|
||||
|
||||
public function __construct($name = 'testlogger', array $handlers = array(), array $processors = array())
|
||||
{
|
||||
parent::__construct($name, $handlers, $processors);
|
||||
|
||||
$this->testHandler = new SolrReindexTest_Handler();
|
||||
$this->pushHandler($this->testHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getMessages()
|
||||
{
|
||||
return $this->testHandler->getMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all messages
|
||||
*/
|
||||
public function clear()
|
||||
{
|
||||
$this->testHandler->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messages with the given filter
|
||||
*
|
||||
* @param string $containing
|
||||
* @return array Filtered array
|
||||
*/
|
||||
public function filterMessages($containing)
|
||||
{
|
||||
return array_values(array_filter(
|
||||
$this->getMessages(),
|
||||
function ($content) use ($containing) {
|
||||
return stripos($content, $containing) !== false;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Count all messages containing the given substring
|
||||
*
|
||||
* @param string $containing Message to filter by
|
||||
* @return int
|
||||
*/
|
||||
public function countMessages($containing = null)
|
||||
{
|
||||
if ($containing) {
|
||||
$messages = $this->filterMessages($containing);
|
||||
} else {
|
||||
$messages = $this->getMessages();
|
||||
}
|
||||
return count($messages);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logger for recording messages for later retrieval
|
||||
*/
|
||||
class SolrReindexTest_Handler extends AbstractProcessingHandler implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Messages
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $messages = array();
|
||||
|
||||
/**
|
||||
* Get all messages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getMessages()
|
||||
{
|
||||
return $this->messages;
|
||||
}
|
||||
|
||||
public function clear()
|
||||
{
|
||||
$this->messages = array();
|
||||
}
|
||||
|
||||
protected function write(array $record)
|
||||
{
|
||||
$this->messages[] = $record['message'];
|
||||
}
|
||||
}
|
||||
|
39
tests/SolrReindexTest/SolrReindexTest_Handler.php
Normal file
39
tests/SolrReindexTest/SolrReindexTest_Handler.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
|
||||
/**
|
||||
* Logger for recording messages for later retrieval
|
||||
*/
|
||||
class SolrReindexTest_Handler extends AbstractProcessingHandler implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Messages
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $messages = array();
|
||||
|
||||
/**
|
||||
* Get all messages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getMessages()
|
||||
{
|
||||
return $this->messages;
|
||||
}
|
||||
|
||||
public function clear()
|
||||
{
|
||||
$this->messages = array();
|
||||
}
|
||||
|
||||
protected function write(array $record)
|
||||
{
|
||||
$this->messages[] = $record['message'];
|
||||
}
|
||||
}
|
15
tests/SolrReindexTest/SolrReindexTest_Index.php
Normal file
15
tests/SolrReindexTest/SolrReindexTest_Index.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
class SolrReindexTest_Index extends SolrIndex implements TestOnly
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$this->addClass('SolrReindexTest_Item');
|
||||
$this->addAllFulltextFields();
|
||||
}
|
||||
}
|
21
tests/SolrReindexTest/SolrReindexTest_Item.php
Normal file
21
tests/SolrReindexTest/SolrReindexTest_Item.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
/**
|
||||
* Does not have any variant extensions
|
||||
*/
|
||||
class SolrReindexTest_Item extends DataObject implements TestOnly
|
||||
{
|
||||
private static $extensions = array(
|
||||
'SolrReindexTest_ItemExtension'
|
||||
);
|
||||
|
||||
private static $db = array(
|
||||
'Title' => 'Varchar(255)',
|
||||
'Variant' => 'Int(0)'
|
||||
);
|
||||
}
|
29
tests/SolrReindexTest/SolrReindexTest_ItemExtension.php
Normal file
29
tests/SolrReindexTest/SolrReindexTest_ItemExtension.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrReindexTest\SolrReindexTest_Variant;
|
||||
use SilverStripe\Core\Convert;
|
||||
|
||||
/**
|
||||
* Select only records in the current variant
|
||||
*/
|
||||
class SolrReindexTest_ItemExtension extends DataExtension implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Filter records on the current variant
|
||||
*
|
||||
* @param SQLQuery $query
|
||||
* @param DataQuery $dataQuery
|
||||
*/
|
||||
public function augmentSQL(SilverStripe\ORM\Queries\SQLSelect $query, SilverStripe\ORM\DataQuery $dataQuery = NULL)
|
||||
{
|
||||
$variant = SolrReindexTest_Variant::get_current();
|
||||
if ($variant !== null && !$query->filtersOnID()) {
|
||||
$sqlVariant = Convert::raw2sql($variant);
|
||||
$query->addWhere("\"Variant\" = '{$sqlVariant}'");
|
||||
}
|
||||
}
|
||||
}
|
74
tests/SolrReindexTest/SolrReindexTest_RecordingLogger.php
Normal file
74
tests/SolrReindexTest/SolrReindexTest_RecordingLogger.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use Monolog\Logger;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\FullTextSearch\Tests\SolrReindexTest\SolrReindexTest_Handler;
|
||||
|
||||
/**
|
||||
* Test logger for recording messages
|
||||
*/
|
||||
class SolrReindexTest_RecordingLogger extends Logger implements TestOnly
|
||||
{
|
||||
/**
|
||||
* @var SolrReindexTest_Handler
|
||||
*/
|
||||
protected $testHandler = null;
|
||||
|
||||
public function __construct($name = 'testlogger', array $handlers = array(), array $processors = array())
|
||||
{
|
||||
parent::__construct($name, $handlers, $processors);
|
||||
|
||||
$this->testHandler = new SolrReindexTest_Handler();
|
||||
$this->pushHandler($this->testHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getMessages()
|
||||
{
|
||||
return $this->testHandler->getMessages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all messages
|
||||
*/
|
||||
public function clear()
|
||||
{
|
||||
$this->testHandler->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messages with the given filter
|
||||
*
|
||||
* @param string $containing
|
||||
* @return array Filtered array
|
||||
*/
|
||||
public function filterMessages($containing)
|
||||
{
|
||||
return array_values(array_filter(
|
||||
$this->getMessages(),
|
||||
function ($content) use ($containing) {
|
||||
return stripos($content, $containing) !== false;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Count all messages containing the given substring
|
||||
*
|
||||
* @param string $containing Message to filter by
|
||||
* @return int
|
||||
*/
|
||||
public function countMessages($containing = null)
|
||||
{
|
||||
if ($containing) {
|
||||
$messages = $this->filterMessages($containing);
|
||||
} else {
|
||||
$messages = $this->getMessages();
|
||||
}
|
||||
return count($messages);
|
||||
}
|
||||
}
|
26
tests/SolrReindexTest/SolrReindexTest_TestHandler.php
Normal file
26
tests/SolrReindexTest/SolrReindexTest_TestHandler.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use SilverStripe\FullTextSearch\Solr\Reindex\Handlers\SolrReindexBase;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use SilverStripe\FullTextSearch\Solr\SolrIndex;
|
||||
|
||||
/**
|
||||
* Provides a wrapper for testing SolrReindexBase
|
||||
*/
|
||||
class SolrReindexTest_TestHandler extends SolrReindexBase
|
||||
{
|
||||
public function processGroup(
|
||||
LoggerInterface $logger, SolrIndex $indexInstance, $state, $class, $groups, $group, $taskName
|
||||
) {
|
||||
$indexName = $indexInstance->getIndexName();
|
||||
$stateName = json_encode($state);
|
||||
$logger->info("Called processGroup with {$indexName}, {$stateName}, {$class}, group {$group} of {$groups}");
|
||||
}
|
||||
|
||||
public function triggerReindex(LoggerInterface $logger, $batchSize, $taskName, $classes = null)
|
||||
{
|
||||
$logger->info("Called triggerReindex");
|
||||
}
|
||||
}
|
117
tests/SolrReindexTest/SolrReindexTest_Variant.php
Normal file
117
tests/SolrReindexTest/SolrReindexTest_Variant.php
Normal file
@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\FullTextSearch\Search\SearchVariant;
|
||||
|
||||
/**
|
||||
* Dummy variant that selects items with field Varient matching the current value
|
||||
*
|
||||
* Variant states are 0 and 1, or null if disabled
|
||||
*/
|
||||
class SolrReindexTest_Variant extends SearchVariant implements TestOnly
|
||||
{
|
||||
/**
|
||||
* Value of this variant (either null, 0, or 1)
|
||||
*
|
||||
* @var int|null
|
||||
*/
|
||||
protected static $current = null;
|
||||
|
||||
/**
|
||||
* Activate this variant
|
||||
*/
|
||||
public static function enable()
|
||||
{
|
||||
self::disable();
|
||||
|
||||
self::$current = 0;
|
||||
self::$variants = array(
|
||||
'SolrReindexTest_Variant' => singleton('SolrReindexTest_Variant')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable this variant and reset
|
||||
*/
|
||||
public static function disable()
|
||||
{
|
||||
self::$current = null;
|
||||
self::$variants = null;
|
||||
self::$class_variants = array();
|
||||
self::$call_instances = array();
|
||||
}
|
||||
|
||||
public function activateState($state)
|
||||
{
|
||||
self::set_current($state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current variant to the given state
|
||||
*
|
||||
* @param int $current 0, 1, 2, or null (disabled)
|
||||
*/
|
||||
public static function set_current($current)
|
||||
{
|
||||
self::$current = $current;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current state
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function get_current()
|
||||
{
|
||||
// Always use string values for states for consistent json_encode value
|
||||
if (isset(self::$current)) {
|
||||
return (string)self::$current;
|
||||
}
|
||||
}
|
||||
|
||||
public function alterDefinition($class, $index)
|
||||
{
|
||||
$self = get_class($this);
|
||||
|
||||
$this->addFilterField($index, '_testvariant', array(
|
||||
'name' => '_testvariant',
|
||||
'field' => '_testvariant',
|
||||
'fullfield' => '_testvariant',
|
||||
'base' => ClassInfo::baseDataClass($class),
|
||||
'origin' => $class,
|
||||
'type' => 'Int',
|
||||
'lookup_chain' => array(array('call' => 'variant', 'variant' => $self, 'method' => 'currentState'))
|
||||
));
|
||||
}
|
||||
|
||||
public function alterQuery($query, $index)
|
||||
{
|
||||
// I guess just calling it _testvariant is ok?
|
||||
$query->filter('_testvariant', $this->currentState());
|
||||
}
|
||||
|
||||
public function appliesTo($class, $includeSubclasses)
|
||||
{
|
||||
return $class === 'SolrReindexTest_Item' ||
|
||||
($includeSubclasses && is_subclass_of($class, 'SolrReindexTest_Item', true));
|
||||
}
|
||||
|
||||
public function appliesToEnvironment()
|
||||
{
|
||||
// Set to null to disable
|
||||
return self::$current !== null;
|
||||
}
|
||||
|
||||
public function currentState()
|
||||
{
|
||||
return self::get_current();
|
||||
}
|
||||
|
||||
public function reindexStates()
|
||||
{
|
||||
// Always use string values for states for consistent json_encode value
|
||||
return array('0', '1', '2');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user