Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/Model/SearchTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Search\Manager;
use Search\Model\Filter\FilterCollectionInterface;
use Search\Processor;
use function Cake\Core\deprecationWarning;

trait SearchTrait
{
Expand Down Expand Up @@ -116,6 +117,17 @@ public function searchManager(): Manager
*/
protected function _getFilters(string $collection = Manager::DEFAULT_COLLECTION): FilterCollectionInterface
{
if (method_exists($this->_repository(), 'searchManager')) {
deprecationWarning(
'1.7.1',
'Support for `searchManager() function on the table class is deprecated.'
. ' Access the search manager through the Search behavior instance instead or'
. ' filter collections.',
);

return $this->_repository()->searchManager()->getFilters($collection);
}

return $this->searchManager()->getFilters($collection);
}

Expand Down
43 changes: 43 additions & 0 deletions tests/TestApp/Model/Table/CustomSearchManagerTable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);

namespace Search\Test\TestApp\Model\Table;

use Cake\ORM\Table;
use Search\Manager;

/**
* Table with custom searchManager() method to test that it gets called.
*
* @mixin \Search\Model\Behavior\SearchBehavior
*/
class CustomSearchManagerTable extends Table
{
/**
* Tracks whether the custom searchManager() method was called.
*
* @var bool
*/
public static $searchManagerCalled = false;

public function initialize(array $config): void
{
$this->setTable('articles');
$this->addBehavior('Search.Search');
}

/**
* Custom searchManager() implementation that should be called.
*
* @return \Search\Manager
*/
public function searchManager(): Manager
{
static::$searchManagerCalled = true;

$searchManager = $this->behaviors()->Search->searchManager()
->value('title');

return $searchManager;
}
}
30 changes: 30 additions & 0 deletions tests/TestCase/Model/Behavior/SearchBehaviorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
use Cake\ORM\Query\SelectQuery;
use Cake\TestSuite\TestCase;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Runner\Version;
use Search\Manager;
use Search\Model\Behavior\SearchBehavior;
use Search\Model\Filter\FilterCollection;
use Search\Test\TestApp\Model\Table\ArticlesTable;
use Search\Test\TestApp\Model\Table\CommentsTable;
use Search\Test\TestApp\Model\Table\CustomSearchManagerTable;
use Search\Test\TestApp\Model\Table\SectionsTable;

class SearchBehaviorTest extends TestCase
Expand Down Expand Up @@ -335,4 +337,32 @@ public function testExtraParams(): void
'extra_field' => 'bar',
], $result);
}

/**
* Test that a table's custom searchManager() method is called during find('search').
*
* @return void
* @deprecated
*/
public function testCustomSearchManagerIsCalled(): void
{
if (version_compare(Version::id(), '11.0.0', '<')) {
$this->markTestSkipped('This test requires PHPUnit 11 or higher.');
}

$table = $this->getTableLocator()->get('CustomSearchManager', [
'className' => 'Search\Test\TestApp\Model\Table\CustomSearchManagerTable',
]);

CustomSearchManagerTable::$searchManagerCalled = false;

$this->deprecated(function () use ($table) {
$table->find('search', search: ['title' => 'test'])->toArray();
});

$this->assertTrue(
CustomSearchManagerTable::$searchManagerCalled,
'The table\'s custom searchManager() method should be called during find(\'search\')',
);
}
}