silverstripe-fulltextsearch/tests/SearchVariantVersionedTest.php

145 lines
4.9 KiB
PHP
Raw Permalink Normal View History

<?php
namespace SilverStripe\FullTextSearch\Tests;
use SilverStripe\Core\Config\Config;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\FullTextSearch\Search\FullTextSearch;
use SilverStripe\FullTextSearch\Search\Indexes\SearchIndex_Recording;
use SilverStripe\FullTextSearch\Search\Services\SearchableService;
use SilverStripe\FullTextSearch\Search\Variants\SearchVariantVersioned;
use SilverStripe\FullTextSearch\Tests\SearchVariantVersionedTest\SearchVariantVersionedTest_Index;
use SilverStripe\FullTextSearch\Tests\SearchVariantVersionedTest\SearchVariantVersionedTest_Item;
use SilverStripe\FullTextSearch\Tests\SearchVariantVersionedTest\SearchVariantVersionedTest_IndexNoStage;
use SilverStripe\FullTextSearch\Search\Processors\SearchUpdateProcessor;
use SilverStripe\FullTextSearch\Search\Processors\SearchUpdateImmediateProcessor;
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
2017-04-21 02:23:27 +02:00
2015-11-21 07:19:20 +01:00
class SearchVariantVersionedTest extends SapphireTest
{
/**
* @var SearchVariantVersionedTest_Index
*/
2015-11-21 07:19:20 +01:00
private static $index = null;
protected static $extra_dataobjects = array(
SearchVariantVersionedTest_Item::class
2015-11-21 07:19:20 +01:00
);
2021-11-02 02:48:12 +01:00
protected function setUp(): void
2015-11-21 07:19:20 +01:00
{
parent::setUp();
2015-11-21 07:19:20 +01:00
if (self::$index === null) {
self::$index = singleton(SearchVariantVersionedTest_Index::class);
2015-11-21 07:19:20 +01:00
}
2012-07-19 03:38:43 +02:00
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, array(
'class' => SearchUpdateImmediateProcessor::class
2015-11-21 07:19:20 +01:00
));
2015-11-21 07:19:20 +01:00
FullTextSearch::force_index_list(self::$index);
SearchUpdater::clear_dirty_indexes();
}
2015-11-21 07:19:20 +01:00
public function testPublishing()
{
// Check that write updates Stage
$classesToSkip = [SearchVariantVersionedTest_Item::class];
Config::modify()->set(SearchableService::class, 'indexing_canview_exclude_classes', $classesToSkip);
Config::modify()->set(SearchableService::class, 'variant_state_draft_excluded', false);
2015-11-21 07:19:20 +01:00
$item = new SearchVariantVersionedTest_Item(array('TestText' => 'Foo'));
$item->write();
2015-11-21 07:19:20 +01:00
SearchUpdater::flush_dirty_indexes();
$this->assertEquals(array(
2015-11-21 07:19:20 +01:00
array('ID' => $item->ID, '_versionedstage' => 'Stage')
), self::$index->getAdded(array('ID', '_versionedstage')));
2015-11-21 07:19:20 +01:00
// Check that publish updates Live
2015-11-21 07:19:20 +01:00
self::$index->reset();
$item->copyVersionToStage('Stage', 'Live');
2015-11-21 07:19:20 +01:00
SearchUpdater::flush_dirty_indexes();
$this->assertEquals(array(
array('ID' => $item->ID, '_versionedstage' => 'Stage'),
2015-11-21 07:19:20 +01:00
array('ID' => $item->ID, '_versionedstage' => 'Live')
), self::$index->getAdded(array('ID', '_versionedstage')));
2015-11-21 07:19:20 +01:00
// Just update a SiteTree field, and check it updates Stage
2015-11-21 07:19:20 +01:00
self::$index->reset();
2015-11-21 07:19:20 +01:00
$item->Title = "Pow!";
$item->write();
2015-11-21 07:19:20 +01:00
SearchUpdater::flush_dirty_indexes();
$expected = array(array(
'ID' => $item->ID,
'_versionedstage' => 'Stage'
2015-11-21 07:19:20 +01:00
));
$added = self::$index->getAdded(array('ID', '_versionedstage'));
$this->assertEquals($expected, $added);
// Test unpublish
self::$index->reset();
$item->deleteFromStage('Live');
SearchUpdater::flush_dirty_indexes();
2017-03-09 11:32:56 +01:00
$this->assertCount(1, self::$index->deleted);
$this->assertEquals(
SiteTree::class,
self::$index->deleted[0]['base']
);
$this->assertEquals(
$item->ID,
self::$index->deleted[0]['id']
);
$this->assertEquals(
'Live',
self::$index->deleted[0]['state'][SearchVariantVersioned::class]
);
2015-11-21 07:19:20 +01:00
}
2012-08-28 23:21:51 +02:00
2015-11-21 07:19:20 +01:00
public function testExcludeVariantState()
{
$index = singleton(SearchVariantVersionedTest_IndexNoStage::class);
2015-11-21 07:19:20 +01:00
FullTextSearch::force_index_list($index);
2012-08-28 23:21:51 +02:00
2015-11-21 07:19:20 +01:00
// Check that write doesn't update stage
$item = new SearchVariantVersionedTest_Item(array('TestText' => 'Foo'));
$item->write();
SearchUpdater::flush_dirty_indexes();
$this->assertEquals(array(), $index->getAdded(array('ID', '_versionedstage')));
2012-08-28 23:21:51 +02:00
2015-11-21 07:19:20 +01:00
// Check that publish updates Live
$index->reset();
$item->copyVersionToStage('Stage', 'Live');
SearchUpdater::flush_dirty_indexes();
$this->assertEquals(array(
array('ID' => $item->ID, '_versionedstage' => 'Live')
), $index->getAdded(array('ID', '_versionedstage')));
2015-11-21 07:19:20 +01:00
}
public function testCanBeDisabledViaConfig()
{
$variant = new SearchVariantVersioned;
Config::modify()->set(SearchVariantVersioned::class, 'enabled', true);
$this->assertTrue($variant->appliesToEnvironment());
Config::modify()->set(SearchVariantVersioned::class, 'enabled', false);
$this->assertFalse($variant->appliesToEnvironment());
}
2015-11-21 07:19:20 +01:00
}